如何实现:手机监控PC桌面?(附源码)
最近做了一个项目,里面有涉及到监控PC桌面和监视手机屏幕的功能,客户需要在PC电脑上和安卓手机上都能够观看对方的屏幕,而对方的设备既可以是PC电脑,也可以是安卓手机。
为了便于以后复习,我把这个屏幕监控的功能单独提出来做了个Demo名为ScreenMonitor来记录备忘,顺便也分享给大家。
该Demo一个包括3个项目:服务端、PC客户端、安卓客户端。
文末除了将ScreenMonitor整个项目的源码提供下载,也专门给出了可以直接部署的版本,供大家直接部署测试。
接下来,我将给大家介绍整个功能的实现原理和代码逻辑,大家可以从文末下载源码后,对照源码再来看下面的介绍就会更清晰些。
一.服务端实现
服务端主要用来转发数据(被监控的屏幕图像的编码数据),并不涉及其它复杂的业务逻辑。
这个实现起来很简单,只需要几句代码就OK,它主要做的就是将客户端的消息的处理与数据的转发。这里不做过多的介绍,其关键核心代码只有一句,就是创建OMCS多媒体服务器实例。
Program.MultimediaServer = MultimediaServerFactory.CreateMultimediaServer(9900, userVerifier, config, true);
第一个参数是提供服务的TCP端口,第二个参数用于验证登录的用户帐号密码。服务端运行界面如下所示:
二.PC客户端实现
客户端中我们也分为了2种身份:控制端、被控端
我们在登录时,我们需要初始化多媒体管理器 来连接服务端进行通信,其实也很简单,我们也只需要调用一句话就OK。
multimediaManager.Initialize(loginForm.CurrentUserID, "", ConfigurationManager.AppSettings["ServerIP"], int.Parse(ConfigurationManager.AppSettings["ServerPort"]));
1.PC控制端:主要包括远程观看对方的桌面、监听对方的麦克风 2个功能
实现中主要是用到了DesktopConnector这个自定义控件,我们也只需简单的调用一个BeginConnect 方法就可以直接连接到对方桌面。将控件还提供了2个事件 ConnectEnded、Disconnected 来知道当前连接的结果和状态
public DesktopForm(string friendID,bool audioEnabled){InitializeComponent();this.ownerID = friendID;this.Text = string.Format("正在访问{0}的桌面", this.ownerID); this.desktopConnector1.ConnectEnded += new CbGeneric<ConnectResult>(desktopConnector1_ConnectEnded);this.desktopConnector1.Disconnected += DesktopConnector1_Disconnected;this.desktopConnector1.BeginConnect(this.ownerID);if (audioEnabled){this.microphoneConnector1.BeginConnect(this.ownerID);}}private void DesktopConnector1_Disconnected(ConnectorDisconnectedType type){if (this.InvokeRequired){this.BeginInvoke(new CbGeneric<ConnectorDisconnectedType>(this.DesktopConnector1_Disconnected), type);}else{if (type == ConnectorDisconnectedType.OwnerActiveDisconnect || type == ConnectorDisconnectedType.GuestActiveDisconnect){return;}MessageBox.Show("断开连接!原因:" + type);this.Close();}}void desktopConnector1_ConnectEnded(ConnectResult result){if (this.InvokeRequired){this.BeginInvoke(new CbGeneric<ConnectResult>(this.desktopConnector1_ConnectEnded), result);}else{if (result != ConnectResult.Succeed){MessageBox.Show("连接失败!" + result.ToString());} }}
以下为在PC端远程观看手机屏幕的截图:
2.PC被控端:显示正在被哪些用户观看
三.安卓端实现
安卓客户端就与PC客户端的实现原理差不多了,只是其中一些细节不一样而已
安卓端同样也是分为2种身份:监控端、被控端
同PC客户端一样我们也要初始化多媒体管理器 来连接服务端进行通信
LogonResponse omcsResp = MultimediaManagerFactory.GetSingleton().initialize(id, password, ipaddStr, 9900, getApplication());//登录OMCS服务器
1.安卓控制端:功能同PC一样,可观看目标用户的屏幕和监听麦克风
这里我们用到了一个自定义组件 DesktopSurfaceView 用来显示对方桌面的图像 ,我们通过桌面连接器 DesktopConnector 去连接对方的桌面将获取的桌面图像数据用于该组件来显示
//显示对方数据view DesktopSurfaceView otherView = (DesktopSurfaceView) findViewById(R.id.Desk_surface_remote);desktopConnector.setOtherVideoPlayerSurfaceView(otherView);desktopConnector.setConnectorEventListener(new IConnectorEventListener() {@Overridepublic void connectEnded(ConnectResult connectResult) {if( connectResult!= ConnectResult.Succeed){Message msg = Message.obtain(); // 实例化消息对象msg.what = 1; // 消息标识msg.obj = "远程桌面连接失败:" + connectResult.toString(); // 消息内容存放myHandler.sendMessage(msg);}}@Overridepublic void disconnected(ConnectorDisconnectedType connectorDisconnectedType) {if(connectorDisconnectedType==ConnectorDisconnectedType.OwnerActiveDisconnect||connectorDisconnectedType==ConnectorDisconnectedType.GuestActiveDisconnect){return;}Message msg = Message.obtain(); // 实例化消息对象msg.what = 2; // 消息标识msg.obj = "远程桌面连接断开:" + connectorDisconnectedType.toString();// 消息内容存放myHandler.sendMessage(msg);}});desktopConnector.beginConnect(targetUid);
下图为手机监控PC桌面
2.安卓被控端:需要采集本手机的桌面图像、麦克风声音发送给控制方
核心点在采集本手机的整个桌面的图像,这一点在OMCS框架中已经为我们处理好了,我们只是需要设置一下相关权限来允许录制屏幕即可,剩下的事情都可以交给omcs内部去处理了。
MultimediaManagerFactory.GetSingleton().setDesktopRecordActivity(this);//this 为当前Activity@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);MultimediaManagerFactory.GetSingleton().setDesktopRecordActivityResult(requestCode, resultCode, data);//设置授权结果给多媒体管理器}
当控制方请求观看安卓的桌面时,被控端会弹出如下权限申请提示,点击“立即开始”对方就可以开始采集屏幕并将数据发送给 控制方用于显示。(若勾选了始终允许分享屏幕 的选项,之后控制端请求访问该被控端时就不会再次弹出权限的对话框了,可直接看得到该屏幕)
四、ScreenMonitor 源码下载
1. 项目源码下载 ScreenMonitor.rar
2. 部署版本下载 ScreenMonitor_Deploy.rar
另外:开源即时通信 GGTalk V7.0 已于2020.09.30发布,全新的 服务端+PC端+Android端 源码,快来下载吧!
如何实现:手机监控PC桌面?(附源码)相关推荐
- java手机象棋软件下载,Java手机网络版象棋游戏附源码JAVA游戏源码下载
运行于手机上的中国象棋游戏,鉴于JAVA J2ME技术,本游戏分服务端和客户端,导入JAR包即可在手机上运行,内有开发文档和运用说明. Java手机网络版象棋游戏附源码 (1 folders, 2 f ...
- java计算机毕业设计ssm基于大数据的汽车流量监控cvej1(附源码、数据库)
java计算机毕业设计ssm基于大数据的汽车流量监控cvej1(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也 ...
- JAVA计算机毕业设计无人值守台球厅智能管理监控系统(附源码、数据库)
JAVA计算机毕业设计无人值守台球厅智能管理监控系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ E ...
- 一套完整版开源的监控系统(附源码)吃透监控系统
前言 电视监控系统由前端监视设备.传输设备.后端存储.控制及显示设备这五大部分组成.后端设备可进一步分为中心控制设备和中心控制设备.前.后端设备有多种构成方式,它们之间的联系可通过电缆.光纤.微波等多 ...
- 吃透监控系统!分享一套开源的监控系统(附源码)
前言 电视监控系统由前端监视设备.传输设备.后端存储.控制及显示设备这五大部分组成.后端设备可进一步分为中心控制设备和中心控制设备.前.后端设备有多种构成方式,它们之间的联系可通过电缆.光纤.微波等多 ...
- SSM+手机销售网站 毕业设计-附源码161043
ssm手机销售网站的设计与实现 摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流 ...
- 超级好看的登录页面,可以密码和手机验证码页面(附源码)
学校学生会档案系统需要更新登录界面ui,网上没有找到合适的就自己写了一个,分享出来,图中logo等均学校图标就不做展示 功能介绍 1.有手机验证码登录和密码登录窗口 2.背景刷新一次换一次,也可以隔几 ...
- 基于Matlab的激光雷达机场地面监控仿真(附源码)
目录 一.设置方案 编辑 二.设置扩展对象跟踪器和性能衡量指标 2.1 扩展对象跟踪器 2.2 指标 三.运行方案和跟踪器 四.结果 五.总结 六.程序 停机坪是机场的一个特定区域,旨在容纳飞机,用 ...
- springboot手机推荐网站 毕业设计-附源码052329
摘 要 随着社会的发展,计算机的优势和普及使得手机推荐网站的开发成为必需.手机推荐网站主要是借助计算机,通过对首页.手机问答.公告消息.手机资讯.手机测评.我的.跳转到后台等信息进行管理.减少管理员的 ...
- 一个很酷的监控系统(附源码)
最新文章
- 使用jQuery制作手风琴效果.(转)
- linux halt函数,常用Linux命令 reboot halt shutdown passwd vlock exit等
- 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)
- Linux基础篇之文本、数据流处理命令(sed uniq grep awk wc)
- 恶意代码实战Lab13-01分析
- 《机器学习》 —— 第二章:模型评估与选择 学习笔记
- PAT_B_1086_Java(15分)
- 【C语言进阶深度学习记录】五 C语言中变量的属性
- 把 mysql 整个加载进内存磁盘中_MySQL 缓冲池 是什么?
- JAVA中的isMirror函数_Swift中的反射Mirror
- GigaSpaces Grid for dataBase Cashing
- 如何通过文件流将很多图片存入SD卡,而不是自己内存
- HA模式下的java api访问要点
- c++在数组中添加元素_LeetCode 题解 | 1157. 子数组中占绝大多数的元素
- 在上海创业的日子之了解银行企业对公基础账户收费情况
- [NIPS 2018] Delta Encoder: An Effective Sample Synthesis Method for Few Shot Object Recognition
- 新启动计算机顺序,最新版本:计算机启动启动项设置
- PTX/CR偶联物胶束/TAT-KLA/阿司匹林偶联/双氢青蒿偶联紫杉醇的制备
- 在ubuntu上安装nodebb
- html中collapse代码怎么写,CSS 面试题: 手写 collapse(折叠) 的 css/html 部分