WebRTC因其开放的标准、简单易扩展、同运营商网络的互联互通、与其他技术结合等特性,本文旨在通过对W3C WebRTC标准的跟踪和业界WebRTC开源项目的系统分析,梳理出WebRTC应用所涉及的关键技术。
WebRTC(Web Real-Time Communication)Web上的实时通信,泛指基于网页的实时通信业务,如电话、视频会议、即时消息等。WebRTC项目的主要目的是让Web开发者不用其他的软件就能够便利的开发出实时的,基于浏览器的多媒体应用,Web开发者也无需对多媒体的数字信号处理过程过多在意,只需简单的Javascript和HTML5技术即可即可实现。WebRTC基于标准的WHATWG协议,给予了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。
1.业界WebRTC原型概况
1.1业界WebRTC
(1)官方demo
没有用任何封装库,信令机制使用了XHR和Google App Engine Channel API,可实现浏览器间的视频音频通信。
(2)爱立信实验室开发的WebRTC demo
这是第一个基于浏览器的WebRTC视频通信demo,爱立信为此还开发了一个基于WebKit的浏览器用于支持WebRTC,叫做Bowser browser(当时市场上可能还没有支持WebRTC的浏览器)。
(3)华为WebRTC
华为WebRTC网络并不仅仅着眼于WebRTC用户系统,而是秉持CAAS(Communication as a Service)的核心理念,开发使用简单,作为其WebRTC能力开放网关地关键足点。
1.2业务流程分析
(1)向Participations UA返回成功将其加入会议室roomName的消息,ParticipationUA收到消息后添加本地的视频流到指定位。
(2)向Host UA广播Participations UA加入到会议室roomName的通知,广播消息中包含Participations UA的标识。
(3)Host UA在收到Signaling Server广播Participations UA加入到会议室roomName的通知后,会着手进行两个方面的工作。
(4)发起与Participation UA的媒体协商:首先获取并保存本地的媒体面信息offer,并途经Signaling Server路由转发给ParticipationsUA。Participations UA收到offer后,保存Host UA的媒体面信息并据此创建协商媒体信息answer,最后将answer途经Signaling Server路由转发给Host UA。
至此,Host UA与Participations UA之间已可以进行端到端的视频通话。
2.多方视频会议系统设计与实现
2.1 设计方案
WebRTC标准Javascript接口由浏览器提供,客户端与服务端双向通信采用WebSocket(客户端由浏览器提供支持,服务端由tomcat提供支持),jain-sip采用Mobicents开源的JavaScript库来提供SIP栈的支持。WebRTC封装库建立在WebRTC和jain-sip的基础上,它利用jain-sip提供的SIP栈功能组装SIP请求并经过浏览器提供的WebSocket传输给服务端。
WebRTC封装库的主要功能如下:屏蔽不同浏览器厂商在WebRTC标准接口实现上的差异(包括接口命名差异和方法调用差异);将客户端与服务端之间双向通信连接建立机制以及通信的细节,做到向上层Web应用开发者透明;在端到多端的媒体协商以及防火墙穿越机制上,做到向开发者透明。
2.2 关键技术
2.2.1 SIP信令交互技术
在W3C WebRTC标准中,对客户端与服务端之间的信令没有具体的标准。SIP以其简易、灵巧和可伸展等特性,得到越来越多的关注和赞同,已成为下一代Web通信事实上的规范。正是基于这样一种特点,本项目开发以SIP为核心的WebRTC视频通信系统。为完成客户端与服务端SIP信令交互,本系统在客户端侧使用其对JAIN-SIP标准的参考实现来提供SIP栈服务,服务端侧利用SIP Servlet API来处理客户端侧请求或进行路由分发,客户端与服务端之间的双向通信采用了WebSocket协议。在本系统中,服务端实际上就是充当个背靠背代理的角色。
2.2.2 多方媒体协商技术
多方媒体协商与防火墙穿越协议机制是实现WebRTC多方视频会议的关键所在。在具体的实现策略上,WebRTC封装库将多方的协商过程分解成多个端到端的协商过程,可通过后入会者发起来实现。这里简要描述一下后入会者协商的过程:
(1)第一方与第二方情形下,由一对PeerConnection对象来完成offer/answer的协商。主动协商的一方PeerConnection利用接口createOffer获取到本方的媒体面相关信息后,将该信息通过信令服务器传送到对端。对端的PeerConnection对象保存该信息,并利用接口createAnswer获取当地的媒体面信息,并将其通过信令服务器回传给主动协议的一方。这样,两方之间的协商完成。
(2)当第三方加入会议时,应用程序会创建两个PeerConnection对象,一个用来与第一方进行协商,另一个用于与第二方进行协商。第二方和第三方在收到第一方对应的PeerConnection对象发送过来的offer信息后,将分别创建一个新的PeerConnection对象来负责与之交互,并按照1)所述的方法完成与第三方的媒体协商过程。
2.2.3 NAT/防火墙穿越技术
这种技术是把内部网络(简称为内网)私有IP地址转变为外网公共IP地址,它使得局域范围内的多台主机利用同一个公共IP地址就可以连接到外网。一方面,NAT技术可以在很大程度上缓解了公网IP地址紧缺的问题,并有效减少了内网主机受外部系统攻击的可能性。另一方面,对于WebRTC等Web音视频通信而言,NAT的应用会致使其在跨局域网的环境中失效。这是因为,位于局域网的主机无法在公网上进行路由,进而无法完成不同局域网内部主机相互之间的P2P通信。
3.多方视频会议系统性能测试与分析
3.1环境搭建
3.1.1下载安装jdk
进入oracle官网downloads专区,选择下载版本jdk-6u13-windows-i586-p.exe,双击运行即可安装。
3.1.2配置jdk环境变量
在控制面板系统和安全系统高级系统设置环境变量系统变量中新建环境变量JAVA_HOME并设置成下面的格式,找到Path和CLASSPATH分别设置成如下所示的格式。JAVA_HOME
C:\Program Files\Java\jdk1.6.0_13
Path
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT Server\110\Tools\Binn\;E:\Project\opencv\build\x86\vc11\bin;%JAVA_HOME%\bin;
CLASSPATH
%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3.2 核心流程
在服务端侧,处理“创建会议”和“加入会议”的逻辑实际上也是作为两个分支集成在同一个大的处理逻辑当中(SIP Servlet里面的doSubscribe),为了区别两者不同的请求,我们事先约定按照客户端SUBSCRIBE请求头部里面的Expires的整型值来确定:当请求中的Expires为3600时,是创建会议的请求,当请求中的Expires值为1800时,是加入会议。
用户加入会议成功后,服务端返回的信息,显示本地视频流用的是HTML5的getUserMedia接口。当然,获取到这个媒体流Stream后,还需要借助HTML5 URL接口将其转换成url,然后再添加到HTML5
作者:宋瑞 来源:大陆桥视野·下 2016年3期