「完整学习」基于C++音视频高手课-WebRTC远程桌面后台服务实战

51 阅读4分钟

基于C++音视频高手课-WebRTC远程桌面后台服务实战

“夏のke”》3w ukoou com

WebRTC介绍

WebRTC(Web Real-Time Communication)是一种用于浏览器之间实时通信的开放源代码项目。虽然它最初设计用于实现音频和视频通话,但它也可以用于实现远程桌面控制,尽管这不是其最常见的用途之一。

远程桌面控制是一种技术,允许用户从一个地点控制另一个地点的计算机桌面。使用WebRTC实现远程桌面控制可以提供以下优势:

  1. 实时性: WebRTC提供了实时通信的能力,使得远程桌面控制的操作几乎即时生效。

  2. 跨平台性: 由于WebRTC是基于Web的技术,它可以在几乎所有现代浏览器和操作系统上运行,包括Windows、macOS、Linux等。

  3. 安全性: WebRTC通常使用加密协议(如DTLS和SRTP)来保护通信内容的安全性,确保数据在传输过程中是加密的。

WebRTC远程桌面远程控实现制机与原理

  1. 获取桌面图像: 首先,需要捕获远程计算机的桌面图像。这可以通过桌面捕获技术来实现,通常使用屏幕截图或屏幕录制来获取当前屏幕上的图像。

  2. 编码图像数据: 捕获到的桌面图像需要被编码成一种能够在网络上传输的格式。常见的图像编码格式包括JPEG、H.264等。编码后的图像数据可以被传输给远程客户端。

  3. 传输图像数据: 使用WebRTC的数据通道,将编码后的图像数据传输给远程客户端。WebRTC提供了用于在浏览器之间建立点对点连接的API,这使得数据可以直接从发送方发送到接收方,而无需通过服务器中转。

  4. 解码图像数据: 在接收端,接收到的图像数据需要被解码成可视的图像。这通常涉及将接收到的数据解码成原始图像格式,以便在本地显示。

  5. 显示远程桌面: 解码后的图像数据可以被渲染到远程客户端的屏幕上,从而显示远程计算机的桌面内容。这样,用户就可以在本地控制远程计算机的桌面了。

基于C++音视频高手课-WebRTC远程桌面后台服务实战 - WebRTC远程桌面实战

主要分为三部分:web端(控制端)中继服务端被控端,各部分的工作内容如下

web端

  • 建立Websocket服务端通信
  • 建立Webrct 通道与被控端通信
  • 远程桌面视频流的渲染
  • 反向控制(键、鼠:按比例将数据下发)

被控端

  • 建立Websocket服务端通信
  • 建立Webrct 通道与控制端通信
  • 设备屏幕截图、截屏压缩处理、将截取的图片转成流推送【屏幕截图、截屏压缩处理耗时处理】
  • 解析和响应控制(键、鼠:按比例将数据解析后模拟鼠标事件)

中继服务端

它是在建立连接之前交换信息的任何一种通信渠道,

  • turn服务的搭建
  • 开发websocket服务、账号管理、消息转发

Websocket 与服务端通信

websocket的连接是为了后续建立p2p连接做的前置工作。websocket的通信比较简单,soket连接直接使用new WebSocket(地址)可以实例化sokcet对象sokcet对象的回调函数有onopen/onerror/onclose/onmessage等,可以在对应的回调里执行相关操作

this.socket = new WebSocket(this.socketUrl)

this.socket.onopen = () => {}

this.socket.onerror = (error) => {}

this.socket.onclose = (error) => {}

this.socket.onmessage = (Message

Webrct 通道建立

基于C++音视频高手课-WebRTC远程桌面后台服务实战 ,Webrct 通道建立也就是我们常提到的p2p连接,第一步控制端被控端都与中继服务建立了websoket连接后,可以借用中继服务交换OfferAnswer,成功建立p2p连接。对应的是流程图中的这部分

websocket连接成功后,中继服务器转发给控制端connected指令,控制端onmessage接收到指令connected后,控制端要做的事情有:

    1. 执行初始化peer的操作
    1. 创建数据通道
    1. 给中继服务发送ready消息