孙建伟,陈 立,2,王 卫
1(中国科学院 沈阳计算技术研究所,沈阳 110168)
2(中国科学院大学,北京 100049)
Web实时通信(WebRTC)[1]是一种构建在Web浏览器上的实时音视频通信技术.WebRTC由Google收购 Global IP Solution 公司而获得的一项技术,并在2011年将其开源.WebRTC提供了音视频采集、网络传输、音视频编解码、信号优化和处理等[2]一整套的音视频通信解决方案.由于WebRTC强大的多媒体处理引擎,WebRTC 已经在 Chrome、Firefox、Opera、Android、iOS等浏览器和平台上得到了支持.
会话初始协议(Session Initiation Protocol,SIP)是一个应用层的信令控制协议,是IMS的核心的、成熟的、已经得到广泛应用的技术,用于创建、修改和释放一个或多个参与者的会话.WebRTC提供的JSEP是一种仅维护信令状态机的弱信令控制协议,在企业级融合通信应用中必须将WebRTC和实际的信令协议相结合.
本文介绍了WebRTC和SIP融合已有的两种方案,分析了WebRTC和SIP互通需要解决的问题,提出了一种WebRTC的PeerConnection层和SIP协议在客户端融合的方案,最后在多种客户端实现了WebRTC和SIP融合的应用,并和其他方案对比得出了此方案的优缺点.
SIP是基于文本的、独立于传输层的应用层IMS核心协议.其用于建立,结束以及中断多媒体会话[3].
WebRTC语音引擎支持iSAC、iLBC、Opus 等多种编解码器.音频NetEQ算法包括抖动缓冲和丢包补偿模块以延迟减至最小并提高音频质量[4].WebRTC视频引擎包含采集、编解码(VP9、VP8、可添加H264等编解码器)、加解密、媒体文件、图像处理与显示、网络传输与媒体流控制等技术[5].WebRTC提供JSEP这样的弱信令目的就是为了让WebRTC强大的多媒体处理能力可以和不同的实际的信令协议相结合,如 SIP、ROAP、XMPP、Jingle 等[6].
从信令的角度来看,当下主要有两种SIP和WebRTC互通方案[7]:一种是基于服务器开发 SIP/WebRTC 转换网关.另一种是用 JavaScript 实现 SIP 协议,在此协议栈的基础上构建WebRTC 应用.
这种方案通过开发SIP/WebRTC转化网关实现SIP信令和WebRTC信令的转化,如webrtc2sip[8]就是这种方案的典型代表.基于服务器端的信令转化网关实现WebRTC和IMS网络互通架构图如图1所示.
这种方案用JavaScript实现SIP协议并向Web应用开发者提供JavaScript API.开发者调用WebRTC JavaScript API开发出的 WebRTC 应用可以采用WebSocket传输SIP信令.开发者通过此类WebRTC应用直接注册并登录支持WebSocket[9]的SIP Server,与传统 SIP终端进行通信.使用这种解决方案的开源SIP项目有Jssip和SipML5.
图1 基于服务器端的信令转化网关实现WebRTC和IMS网络互通架构
WebRTC C++ API(PeerConnection 层)是面向浏览器厂商的,使的浏览器厂商容易在此基础上实现WebRTC标准的Web API.本文提出了一种WebRTC的PeerConnection层和SIP协议在客户端实现融合互通的方案,可以适当避免上述两种方案的缺陷.该方案主要通过内嵌于客户端SIPRTC本地网关做WebRTC SDP和 SIP SDP的转化及 SIP信令和 WebRTC PeerConnection API的映射.该方案基于 WebRTC PeerConnection API,但不局限于 C++ API,也包括编译等手段产生的其他语言的PeerConnection 层API,相应的不同终端结合的SIP模块会有所不同.WebRTC的PeerConnection层和SIP协议在客户端的融合方案架构如图2所示.
方案一需要在SIP服务器上开发为了兼容WebRTC信令的转换网关,开发成本较高,服务器也会因信令的转换产生一定的延迟.但是该方案会减轻客户端的开发负担.方案二需要浏览器支持WebRTC,虽然目前主流的浏览器都已支持WebRTC,但限于浏览器的 WebRTC JavaScript API尚处于草案阶段,在此基础上开发应用会有所不便.但这种开发方式的开发流程较为简单,代码可以实现跨平台.这两种案都需要服务器端传输通道支持WebSocket;且这两种方案开发的都是Web应用,Web应用在性能上会低于原生应用.
本文提出的方案首先可以不必在服务器端做兼容WebRTC的开发,从而减小服务器的压力和信令转换造成延迟;其次不需要服务器传输通道支持WebSocket,从而减小服务器传输通道的限制;最后由于此时客户端由本来的 Web App 一跃变成 Native App,也一定程度上提高了客户端的性能.该方案一定程度上加大了客户端的工作量,但对比方案一的工作量,该方案的工作量完全可以接受.
图2 WebRTC 的 PeerConnection 层和 SIP 协议在客户端的融合方案架构
本方案中最重要的一个环节就是SIPRTC本地网关的设计,其功能包括 WebRTC SDP 和 SIP SDP 转化和 SIP 信令和 WebRTC PeerConnection API映射.
WebRTC 使用 JSEP(JavaScript Session Establish Protocol)提供的弱信令完成媒体协商.JSEP提供的信令分为主叫方的Offer信令和被叫方的Answer信令,信令中的主要信息均符合SDP(Session Description Protocol)标准.WebRTC和SIP在媒体和信令的异同点对比如表1所示.
表1 WebRTC 和 SIP 媒体和信令的异同点对比表
本方案中客户端通过SIPRTC本地网关做信令转化和接口映射,WebRTC PeerConnection 和 SIP 协议的映射流程如图3所示,其中Alice是主叫,Bob是被叫.WebRTC PeerConnection和SIP映射步骤如下:
(1)Alice 调用 PeerConnection 层 createoffer API,并通过SIPRTC本地网关转化成SIP(INVITE)消息发送给Bob;
(2)Bob 接收 SIP 消息后,调用 PeerConnection 层setRemoteDescription、createAnswer API,并通过SIPRTC 本地网关转化成 SIP(180 Ring、200 OK)消息发送给Alice;
(3)Alice 接收 SIP 消息,调用 PeerConnection 层setRemoteDescription API,并发送 SIP(ACK)消息给Bob,此时建立了p2p或者通过多媒体中转服务器的多媒体会话;
(4)Alice调用 PeerConnection层removeRemoteStream API,并通过 SIPRTC 本地网关转化成SIP(BYE)消息发送给Bob;
(5)Bob 接收 SIP 消息,调用 PeerConnection 层removeRemoteStream API,并发送 SIP(200 OK)消息给Alice,至此完成一次音视频会话.
图4为客户端应用设计的架构,在完成SIPRTC本地网关后,业务逻辑只需调用SIP接口,从而便于业务逻辑的实现;MQTT用于文本聊天等功能的实现.
视各客户端不同,WebRTC 的 PeerConnection 在不同平台结合的SIP模块稍有不同,具体来说Windows平台选择 pjsip[10],Android 平台选择 sipdroid,iOS 平台选择sofiasip;相应的WebRTC的PeerConnection API不局限于某种语言的API,包括编译手段产生的C++ API、Java API、OC API.
本实验在服务器端使用OpenSIPS部署SIP服务器,使用 Google 的 Stun Server作为 ICE 代理,使用Asterisk服务器部署多媒体中转服务器.
在Android、iOS、Windows客户端完成了WebRTC PeerConnection 和 SIP 协议的融合,并测试了各平台之间的音视频通信.SIPRTC本地网关转化的呼叫和响应信令如图5和图6所示.Android端发出呼叫 并和iOS端视频通话如图7和图8所示.
图3 WebRTC PeerConnetion 和 SIP 映射流程
图4 客户端应用设计架构
图5 SIPRTC 本地网关转化的呼叫信令
图6 SIPRTC 本地网关转化的响应信令
经过多次测试和抓包分析,验证了WebRTC的PeerConnection层在客户端融合SIP协议方案的可行性,对比前两种方案,发现本方案的客户端流畅度要高于前两种方案的客户端;且本方案服务器造成的延迟要低于方案一的服务器,特别是服务器负载较大时,本方案服务器造成的延迟会明显低于方案一的服务器.
本文介绍了已有的WebRTC和SIP协议融合的方案,研究了WebRTC和SIP协议互通需要解决的问题,提出了一种WebRTC的PeerConnection层和SIP协议在客户端融合的方案,通过查阅大量资料、搭建试验环境、编码、测试和对比,验证了该方案的可行性和优越性.但是由于使用Google提供的Stun Server做ICE代理,有时会有明显的延迟,后期的工作将集中研究、开发及搭建自己的ICE代理;另外后期我们也将在不同应用场景下对各客户端的稳定性做测试,尽早将该方案产品从实验室推向市场.
图7 Android 端发出呼叫
图8 iOS 端视频会话