基于WebRTC实现多人跨平台同时在线视频聊天
2018-12-08杨德炎郑少明郑汉军陈思德李剑煜
◆杨德炎 郑少明 郑汉军 陈思德 李剑煜
基于WebRTC实现多人跨平台同时在线视频聊天
◆杨德炎 郑少明 郑汉军 陈思德 李剑煜
(厦门安胜网络科技有限公司 福建 321008)
手机、台式机、笔记本、电视以及任何安装智能操作平台的移动设备,都可以在通用平台上,使地理上分散的用户共聚一处,进行视频会议开展协同工作,实现点对点实时信息交流和数据共享的世界,本文介绍的WebRTC技术就能实现这样的协同工作。
WebRTC;WebSocket;跨平台;实时通信;流媒体;视频通话;NAT/防火墙穿透
0 前言
纵观全球,将RTC(实时通讯)技术与现有内容,音/视频视频数据和服务集成起来非常困难且耗时,还需要花费昂贵的技术成本,尤其是建立在Web应用上。
许多Web服务使用RTC,需要下载本机应用程序或插件。其中包括早期的WebQQ、 微信网页版、微软的Skype、Facebook和Google Hangouts。下载,安装和更新插件等复杂操作,容易出错并且很烦人。插件很难更新部署,调试,故障排除,测试和维护,兼容性差,需要为各种操作平台定制开发,并且可能需要昂贵的许可并与复杂的技术集成。通常很难说服人们首先安装插件,用户体验极差,交互野蛮。
而现在这一切都变得很容易,网络视频新技术—基于WebRTC实现网页化提供实时,无插件视频、音频和数据通信。
1 WebRTC概述
WebRTC,来自网页即时通信(Web Real-Time Communication)的缩写,通过简单友好的API为浏览器和移动应用程序提供实时,无插件的音/视频和数据通信标准,涵盖了视频会议的核心技术,包括从视频采集卡到网络传输端视频显示等整个解决方案。其自适应抖动控制算法以及语音包丢失隐藏算法,能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。Video Jitter Buffer视频抖动缓冲器,能有效降低由于视频抖动和视频信息包丢失带来的不良影响。Image enhancements图像质量增强模块对暗度检测、颜色增强、色彩过渡、降噪处理等,表现出极为强悍的一面。
面向开发者的标准API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三大类,允许用户在两个浏览器之间直接通讯,实现双向的数据交换。内置抽象会话层,采用了libjingle库的组件实现,提供会话建立和管理功能,无须使用xmpp/jingle协议。本地C++接口层能抽象地对数字信号过程进行处理,通过STUN和ICE Server即可建立不同类型网络间的视频呼叫连接。而且具有很强的扩展性,容易跟其它现有的音/视频通讯系统结合。并且支持所有的主流操作平台Windows、linux、Mac、Android、IOS等。
2 视频会议系统设计与实现
WebRTC 基于P2P的网络通信,提供了浏览器到浏览器之间的通信。但是网络之间的应用程序不能简单随意地进行任意设备相连接,现实生活中大多数设备都隐藏在一层或多层NAT,有些设备还具有阻止某些端口和协议的防病毒软件,而且许多设备都支持网络代理和企业防火墙。为此浏览器之间用于交换建立通信的元数据—信令和穿越NAT和防火墙必须依托服务器维护。
2.1 信令服务器 Signaling Server
在浏览器之间的会话建立之前,浏览器之间显然没有办法传递数据进行通信,需要一系列协调通信和发送控制消息的机制来建立浏览器之间的通信 。浏览器之间传递的这些信令元数据需要通过服务器的中转回传,然后建立浏览器之间的会话,一旦成功RTCPeerConnection就会尝试点对点直接连接,处理对等体之间流数据的稳定和有效通信。
其实信令就是协调沟通的过程,而用于信令的消息服务需要是双向的:客户端到服务器,服务器到客户端。为了使WebRTC程序之间进行通信,其客户端需要交换以下信息:
(1)控制初始化或关闭会话的控制消息和错误消息。
(2)媒体流元数据,比如像解码器、编解码器的配置、带宽、分辨率等网络配置数据。
(3)用来建立安全连接的关键秘钥数据。
(4)外界所看到用户在网络上的数据,比如IP地址和端口等。
举个例子,如图1:假设客户端A希望与客户端B建立TCP连接,那么这两个客户端A和B首先需要连接至服务器S。服务器S注册每个客户端的IP和专用端口。客户端A使用与服务器S活动的TCP会话来请求服务器S帮助其连接客户端B。
图1 Signaling Server工作原理图
服务S把设备B的IP和端口回复给设备A,并在同一时间发送A的IP和端口给B。
设备A和设备B获取到对方的IP端口后尝试直连,传出连接尝试成功,或者失败。如果其中一个传出连接尝试因网络错误,例如连接重置、主机无法访问而失败,则主机只需在短暂延迟后重新尝试该连接,直至应用程序,建立TCP连接后,主机会相互进行身份验证,以验证它们是否已连接到目标主机。如果身份验证失败,客户端将关闭该连接并继续等待其他连接成功。
具体的连接建立方式基于信令控制协议JSEP(JavaScript Session Establishment Protocol),在JSEP中,需要交换的关键信息是多媒体会话描述,由于开发者所使用的协议不尽相同,例如SIP或XMPP,WebRTC建立呼叫的思想建立在媒体流控制层面上,从而与上层信令传输相分离,防止相互之间的信令污染。只要上层信令为其提供了多媒体会话描述符这样的关键信息就可以建立连接,不管开发者用何种方式来传递。
2.2 NAT穿透服务器 ICE Server
网络地址转换NAT(Network Address Translation)就是为解决IPV4下的IP地址匮乏而出现的一种技术。NAT设备允许在具有面向Internet的单个公共IP地址的路由器后面的专用网络上,使用私有IP地址。内部网络设备通过将传出请求的源地址更改为NAT设备的源地址,并将回复中继回原始设备来与外部网络上的主机通信。
每个WebRTC终端都有一个唯一的地址,可以与其他对等端交换,以便直接通信和数据交换。但是NAT提供具有IP地址的设备在专用本地网络内使用,但是该地址不能在外部使用。没有公共地址,WebRTC对等体就无法进行通信。
为了解决这问题,我们需要ICE服务器来克服现实网络的复杂性,借助NAT网关跟踪来自专用网络的出站请求,并维持每个已建立连接的状态,以便将来自公共网络上的对等体的响应直接响应到专用网络中的对等体。保证了RTCPeerConnection能实现NAT穿越。
简单地说就是将ICE服务器URL传递给RTCPeerConnection, ICE试图找到连接对等体的最佳路径。它并行尝试所有可能性,并选择最有效的选项。ICE首先尝试使用从设备的操作系统和网卡获得的主机地址建立连接。如果失败它将用于NAT后面的设备,ICE使用STUN服务器获取外部地址,如果失败,则通过TURN中继服务器路由其流量。
每个TURN服务器都支持STUN,TURN服务器也是STUN服务器,内置了增加的中继功能,ICE还应对NAT设置的复杂性。
我们借助两个客户端的设备A和B,一开始通过TCP或UDP连接到具有全球公网IP的服务器S,如图2:A,B两个客户端驻留在单独的专用网络里,和它们各自的NAT阻止客户端直接与另一个客户端连接。两个客户端可以简单地使用服务器S在它们之间中继消息,而不是尝试直接连接。例如,向客户端B发送消息,A只需将消息沿其已建立的客户端/服务器连接发送到服务器S,服务器S使用其现有的客户端/服务器连接S将消息转发到客户端B。
又由于A,B主动给公网IP的服务器S发消息,所以公网服务器可以穿透NAT A, NAT B送包给A,B。只要公网IP将B的IP/PORT发给A,A的IP/PORT发给B。这样下次A和B互相消息,就不会被NAT阻拦了。
TURN用于在对等体之间中继音频、视频数据流,而不是信令数据,服务器具有公共地址,因此即使对等体位于防火墙或代理之后,也可以与对等方联系。
服务器具有公共地址,因此即使对等体位于防火墙或代理之后,也可以与对等方联系。
图2 NAT穿越原理图
3 总结
基于WebRTC技术的网页版网络视频会议技术,使用支持HTML5浏览器的设备即可,它与几乎所有的浏览器兼容,无需额外下载安装任何插件,极大地提高了安全性,且支持市面上所有主流的操作平台。使开发者能够容易地开发出网络视频聊天的web应用,同时也极大地减少开发成本,一次编写到处运行,维护成本低。
应用中使用的编解码器和协议可以进行大量工作,即使在不可靠的网络上也可以进行强大而灵活的点对点实时通信,内置安全性(DTLS)和拥塞控制,内含多种容错机制丢包隐藏、回声消除、带宽适应性、动态抖动缓冲、自动增益控制、降噪和抑制、图像清洁等。以及多个对等端各自直接相互通信,或通过多点控制单元(MCU),进行选择性流转发,混合或录制音频和视频。
而这一切都可以通过低廉的开发成本得到一个高性能的产品。
[1]赵宇.WebRTC技术在语音平台中的应用研究[J].通信技术,2018.
[2]李锋.WebRTC标准的现状研究及展望[J].中国新通信,2018.
[3]孙卫喜,席少龙.P2P中NAT穿越问题的研究[J].计算机技术与发展,2014.
[4]韩可玉,王振涛,苏继斌.NAT和防火墙穿越技术研究[J].软件导刊,2014.
[5]陈亮. 基于改进ICE协议的流媒体穿透NAT的研究[D].华南理工大学,2012.
[6]Cihan Topal,Cuneyt Akinlar. Secure seamless peer-to-peer (P2P) UDP communication using IPv4 LSRR option and IPv4+4 addresses[J]. Computers and Electrical Engineering,2008.
[7]Julian Jang-Jaccard,Surya Nepal,Branko Celler,Bo Yan. WebRTC-based video conferencing service for telehealth[J]. Computing,2016.
[8]Vogt,C.,Werner,M.J.,Schmidt,T.C.Leveraging WebRTC for P2P content distribution in web browsers[P]. ,2013.