基于webrtc的远程控制系统设计与实现学习之路

基于webrtc的远程控制系统设计与实现学习之路

对论文的学习

第一次接触论文的复现,感觉很新奇。这篇论文针对传统的远程控制系统的弊端,研究了WebRTC(Web Real-Time Communication)技术的特点,并基于WebRTC点对点通信的特点,设计了一套基于WebRTC的远程控制系统,去除了传统远程控制系统中的跳板服务器,在设备端与客户端之间直接建立对等连接。

  1. 下面就谈谈这个项目干了什么?
    该项目包括四个模块:对等连接模块、远程监控模块、远程指令模块、远程登录模块。
    对等连接模块的主要功能是:发现设备,然后当客户端请求连接时与之建立对等连接。
    远程监控模块主要功能是:采集设备端视频并推送到客户端进行播放。
    远程登录模块主要功能是:用户为了能进行远程控制设备,先要远程登录到设备端。
    远程指令模块主要功能是:用户在客户端发送指令来实现对设备的控制。

  2. 论文涉及到的WebRTC技术的学习笔记

    1. webrtc的介绍
      WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。
      WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox…)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现。
      WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。
      论文中涉及到的JavaScript API: MediaStream 音视频流对象、RTCPeerConnection 端对端音视频连接对象、RTCDataChannel 端对端数据通道对象
    2. webrtc连接建立流程:
      以下转自http://www.cnblogs.com/fangkm/p/4364553.html
      连接建立流程图: Alt

    1、ClientA首先创建PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。
    2、ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给ClientB。
    3、ClientB接收到ClientA发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signal服务器发送给ClientA。
    4、ClientA接收到ClientB发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。
    5、在SDP信息的offer/answer流程中,ClientA和ClientB已经根据SDP信息创建好相应的音频Channel和视频Channel并开启Candidate数据的收集,Candidate数据可以简单地理解成Client端的IP地址信息(本地IP地址、公网IP地址、Relay服务端分配的地址)。
    6、当ClientA收集到Candidate信息后,PeerConnection会通过OnIceCandidate接口给ClientA发送通知,ClientA将收到的Candidate信息通过Signal服务器发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。同样的操作ClientB对ClientA再来一次。
    7、这样ClientA和ClientB就已经建立了音视频传输的P2P通道,ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来即可。同样操作也适应ClientB到ClientA的音视频流的传输。

因为NAT带来的网络穿透问题,双方直接建立连接不是简单的事情。WebRTC通过ICE框架来解决网络穿透的问题,并对应用开发者屏蔽了复杂的技术细节。

ICE (Interactive Connectivity Establishment) ,交互式连接建立,是一种NAT穿透的框架,它集成了多种NAT穿越技术,比如STUN、TURN。

STUN(Session Traversal Utilities for NAT),NAT会话遍历实用工具。主要用途如下:检测分配给主机的外网IP和端口;检测NAT类型;检测两台主机之间的网络连通性;

TURN(Traversal Using Relays around NAT)对STUN进行了扩展,主要增加了中继服务器。在某些情况下,NAT背后的两台主机无法直接通信,这个时候可以借助中继服务器来实现间接通信。假设通信的两台主机分别为A、B。确认各自IP地址&端口、NAT类型 的方式跟STUN一致,不同之处在于A、B后续的通信方式。

RTCPeerConnection:在媒体能够交换,或者数据通道建立之前,你需要把两个终端连接起来。这个连接过程的完成就是使用RTCPeerConnection 接口。

MediaStream:MediaStream接口描述了终端之间传输的媒体流。这个流由一个或多个媒体通道信息;通常这是一个音频通道或者视频通道信息。

RTCDataChannel:WebRTC支持在建立连接的两个终端之间相互的传输二进制数据。这个过程通过RTCDataChannel接口。这个接口可以作为数据的反向通道,甚至作为主要的数据通道去交换各种数据。

VoiceEngine:WebRTC音频引擎,包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。
VideoEngine:WebRTC视频处理引擎。包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

猜你喜欢

转载自blog.csdn.net/weixin_45948260/article/details/106854673