樂利鋒,彭 晉,段曉東
(中國移動通信研究院 北京 100053)
Web應用已成為互聯網應用最成功的模式之一,其應用范疇已經滲透人類社會生活的各個領域。人們只要通過一款瀏覽器,就可以享受到無窮無盡的Web服務,如各種電子商務、網絡游戲、社區服務及各種網絡交友等。與此同時,Web技術所帶來的優勢(如統一的客戶端和較好的可維護性),使一些傳統應用紛紛轉型到Web模式。Web應用開發的簡單快速也受到開發者青睞,開發者只需要一次開發就可以在任何地方部署,代碼片段很容易在開發者之間被復制和粘貼,越來越容易掌握的JavaScript庫使開發更加快捷。
Web瀏覽器一直隨著Web應用的需要持續加入新的Web 特性,W3C(world wide web consortium,萬維網聯盟)標準化組織追求的Open Web Platform[1]是所有Web技術的集合,不僅包括基礎 Web技術,如 HTML(hypertext markup language,超文本標記語言)、CSS(cascading style sheet,級聯樣式表)和 JavaScript及 HTTP(hypertext transfer protocol,超文本傳輸協議)等;還包括新的Web技術,如HTML5[2],允許開發者免費使用它所發布的技術??梢灶A見,未來Web將逐漸成為一種準入門檻較低、推廣成本可控的統一應用平臺。
基于Web的實時通信應用可以吸引越來越多的用戶。Facebook[3]推出了整合Skype的視頻聊天服務,首次使用該功能的用戶需要安裝插件;GoogleTalk[4]網頁版的正常使用需要安裝Google話音和視頻聊天插件,在瀏覽器中成功安裝插件后,可以直接在Gmail[5]或iGoogle[6]中進行視頻和話音通話。但這些插件對于不同瀏覽器需要不同的開發實現,且需要用戶安裝,具有一定的安全隱患。為了避免引入新插件,一些 Web 網絡電話(如 Alicall[7]、FlashVoIP[8])采用普及程度比較高的flash player插件實現實時通信功能,可重用flash插件自有RTMP(real time messaging protocol,實時消息傳送協議)[9]信令和媒體傳輸協議。但flash插件方式需要依托第三軟件提供商的支持,大規模商用更需要支付相當可觀的費用。
如果徹底不引入插件,Web實時通信客戶端在執行效率方面想接近傳統客戶端或插件客戶端的效果,需要瀏覽器提供更多新特性的支持。為了實現實時通信功能,瀏覽器至少需要具備會話管理、音視頻編解碼引擎和媒體傳輸等功能。會話管理功能允許開發者為上層應用實現呼叫建立和管理;音視頻編解碼引擎功能允許外設(如麥克風及攝像頭)將采集的數據進行編碼并發送給網絡,或者將接收的媒體進行解碼供外設(如音箱或者顯示器)呈現;媒體傳輸功能實現對不同網絡的NAT(network address translation,網絡地址轉換)或防火墻穿越,并實現對媒體內容的封裝傳輸。
對于無插件Web實時通信應用開發,開發者需要調用瀏覽器API(application programming interface,應用程序編程接口)才能使用其實時通信模塊功能。如果缺少對實時通信模塊API的統一使用規范,不同瀏覽器廠商對API的定義和使用可能出現很大的差異,開發者需要了解不同版本的API使用方法,從而可能會影響開發周期。所以,業界希望Web瀏覽器的實時通信能力被標準化的呼聲越來越高。IETF(internet engineering task force,工程任務組)和W3C這兩大標準化組織從2011年開始積極推進基于Web瀏覽器的實時通信 (real-time communication in web-browsers,RTCWeb)標準化工作[10,11],力圖提出一個能夠在Web瀏覽器上實現用戶之間話音和視頻等實時通信的標準化框架。IETF的主要工作在于標準化基于瀏覽器的實時通信的架構和協議;W3C的主要工作在于標準化瀏覽器與Web應用之間的API,即上層Web應用通過JavaScrip編程調用這些被標準化的API,實現對瀏覽器RTCWeb功能的使用,如捕獲本地設備的媒體內容、呈現媒體內容、建立點對點媒體通信等。隨著RTCWeb標準化的逐漸深入和影響力的逐步增強,各大瀏覽器廠商如 Chrome、Mozilla Firefox、Safari和Opera紛紛宣布支持或部分支持RTCWeb功能,RTCWeb瀏覽器逐漸步入舞臺并占據相當的市場份額。
IETF RTCWeb工作組建議的典型架構[12]如圖1所示。Web客戶端是基于瀏覽器的融合JavaScript、HTML及CSS的技術客戶端實現,對瀏覽器和Web服務器的會話信令面操作是通過JSEP控制實現的;通過JavaScript調用RTCWeb API,實現對瀏覽器能力的使用;Web客戶端通過JavaScript與Web服務器傳遞基于Web Socket承載的RTCWeb信令消息。RTCWeb信令協議由Web應用定義,可以是標準的協議,如 SIP(session initiation protocol,會話初 始 協 議 )、XMPP (extensible messaging and presence protocol,可擴展消息處理現場協議)或私有協議,但媒體協商可參考基于Offer/Answer模型的ROAP(RTCWeb offer/answer protocol);Web服務器之間采用雙方認同的協議,如 SIP或者 XMPP;瀏覽器之間采用RTP(real-time transport protocol,實時傳輸協議)或 SRTP(secure RTP,安全實時傳輸協議)用于媒體傳輸,同時采用ICE(interactive connectivity establishment,交互式連接建立)協議用于防火墻穿越。

圖1 RTCWeb通信模型
W3C WebRTC工作組的關注重點在于瀏覽器端API的標準化[13],通過調用標準化API實現從本地設備(如攝像頭、麥克風或網絡攝像機)捕獲并呈現本地音視頻媒體內容、通過NAT穿越技術建立點對點連接、基于點對點連接交換媒體內容。這些功能的實現主要由Stream API和Peer Connection兩大類API實現。
Stream抽象了對實際媒體流表示及操作的方法和屬性,目前定義了若干重要的接口,主要是Media Stream。Media Stream對象可以表示從遠端節點或者發送給遠端節點的媒體流;從網絡傳輸Media Stream角度看,每個Media Stream對象都有一個輸入和輸出,來自遠端節點的Media Stream(由Peer Connection實例化產生)可以看作輸入;本地設備產生的Media Stream(調用getUserMedia函數產生)傳給遠端節點便有一個輸出;對于媒體流的呈現,需要專用URL來表示一個媒體流并在網頁中表現出來 (調用createObjectURL函數生成)。
Peer Connection抽象了瀏覽器之間信令交互及媒體通道建立的方法和屬性,通過開通媒體通道,Media Stream對象表示的媒體流可被送到對端。一個Peer Connection對象實現3類功能,即ICE代理 (利用ICE方式實現NAT穿越,如依賴STUN或者TURN服務器)、Peer Connection狀態(標識當前連接狀態,如“new”、“opening”、“active”等)和ICE 狀態(標識穿越狀態,如“new”“waiting”“connected”等)。此外,Peer Connection提供創建媒體協商的方法和屬性,如Offer/Answer消息構建方法(createOffer/createAnswer)及SDP屬性設置(setLocal Description/setRemote Description)等。
W3C WebRTC工作組對于媒體流的訪問和呈現使用HTML5 video和audio標簽[2],這兩個新標簽提供了在瀏覽器中不使用插件播放視頻和音頻的特性,這正是HTML5區別于先前版本的顯著特征。非HTML5的瀏覽器一般安裝flash插件播放媒體,正確播放媒體需要使用
RTCWeb通信在HTML5瀏覽器中呈現音視頻的播放需要通過JavaScript實現。如圖2所示,Alice和Bob進行視頻通話,Alice的視頻通過RTP流到達Bob的瀏覽器,瀏覽器通知上層Web應用;上層Web應用向瀏覽器獲取Alice視頻流的Bob URL;上層Web應用獲取video標簽,并將URL賦值給這個video標簽,更新video標簽代碼,實現媒體播放。

圖2 RTCWeb基于HTML5標簽呈現
IETF RTCWeb工作組建議RTCWeb終端間實現媒體建立所需信息協商的協議ROAP[14]。ROAP遵循Offer/Answer模型實現瀏覽器終端之間對SDP(session description protocol)消息的交換。ROAP消息內容只是實際傳輸的RTCWeb信令包含的子內容,并不定義實際線上傳輸的RTCWeb信令消息。如圖 3 所示,ROAP 目前主要定義了“offer”、“answer”及 “OK”等消息,這些消息的產生由上層應用通過JavaScript調用Peer Connection的若干API實現。

圖3 ROAP消息展示
RTCWeb通信系統需要專門的信令狀態機實現對多媒體會話信令面的控制,IETF RTCWeb工作組建議采用一種基于JavaScript實現會話建立的協議 (JavaScript session establishment protocol,JSEP)[15]。JSEP 使得信令狀態機從瀏覽器中解放出來,通過JavaScript使控制狀態、狀態機升級、會話描述修改等操作變得更加靈活和容易。JSEP能夠靈活、簡單地處理Offer/Answer模型的交互,如圖4所示。
JSEP可以和任何會話控制協議相結合,如JSEP控制ROAP呼叫、JSEP控制XMPP呼叫、JSEP控制SIP呼叫。目前已經出現了JSEP控制SIP呼叫的雛形 (如sipML5)[16],sipML5信令面采用SIP over Web Socket,外接專用RTCWeb服務器將SIP消息從Web Socket中解放出來,并發送給SIP或IMS核心網。

圖4 JSEP實現流程
傳統上,Web雙向通信是通過Web客戶端采用 HTTP輪詢方式從Web服務器獲取消息,這是一種對HTTP的畸形使用。基于HTTP作為RTCWeb信令的傳輸協議并不合適,主要體現在3個方面:第一,Web服務器采用HTTP輪詢方式會造成Web服務器資源的浪費;第二,HTTP輪詢方式實現實時通信依賴于輪詢周期,周期太長會影響實時性,周期太短會耗費資源;第三,Web客戶端和Web服務器之間的數據傳輸需要使用HTTP頭,這對于實時通信來說是一個比較大的開銷。希望Web實時通信能夠通過一個TCP連接實現雙向通信?;谶@個想法,IETF提出了Web Socket[17]協議用于實現雙向通信。Web Socket是一個基于TCP及80/443端口傳輸的協議,包含握手和數據傳輸兩部分,握手協議通過帶有Upgrade字段的HTTP請求和101的響應交互完成,握手成功后就進入雙向長連接的數據傳輸階段。如圖 5所示,采用 Web Socket協議承載 RTCWeb信令可以提高消息的交互效率,相對HTTP輪詢而言,實現了真正的雙工通信,一個TCP長連接相比若干HTTP短連接占用資源少,同時數據傳輸效率更高(Web Socket數據幀頭只有幾個字節,而HTTP頭需要幾十個字節)。

圖5 Web Socket與HTTP實現實時通信流程對比
IMS是一種全新的多媒體業務形式,能夠滿足用戶對更新穎、更多樣化多媒體業務的需求。隨著IMS應用的增加和豐富,IMS客戶端的功能和特性需要不停地變化與演進,客戶端軟件變得越來越復雜,對IMS終端的要求也會更高。目前IMS客戶端主要包含硬終端和軟終端。如果采用RTCWeb技術實現IMS的免插件的RTCWeb客戶端,可以進一步豐富IMS的終端形態。RTCWeb客戶端和傳統的客戶端在實現上存在本質區別,如圖6所示。在傳統客戶端中,應用與終端平臺相關,信令面和媒體面功能是通過調用操作系統API實現的,信令面與媒體面在邏輯上分離并通過內部接口通信;在RTCWeb客戶端中,應用與終端平臺無關,信令面和媒體面在邏輯和物理上均分離,信令面由上層應用實現,媒體面由瀏覽器實現,信令面調用瀏覽器API實現實時通信。

圖6 傳統客戶端和RTCWeb客戶端的比較
相比傳統IMS客戶端或插件客戶端,RTCWeb客戶端具備更多優勢:操作便捷性,基于瀏覽器環境,實現客戶端的免安裝(輸入網址即可下載Web客戶端)和免用戶干預的升級;開發靈活性,瀏覽器為上層Web應用提供了開發實時通信應用的API,基于腳本開發客戶端應用,周期較短,成本較低;平臺無關性,在瀏覽器中運行,實現了業務與終端平臺或操作系統的無關性,有利于跨平臺移植,適應于不同終端。
IMS增加Web客戶端形態,使其應用最終能脫離終端平臺或操作系統的限制。由于受瀏覽器支持能力和普及程度的影響,IMS客戶端Web化是一個逐步落實的過程。如圖7所示,第一步,通過對傳統客戶端軟件進行二次開發并向瀏覽器平臺移植,實現基于瀏覽器的插件客戶端,這種客戶端借用了瀏覽器的呈現方式,但邏輯上自成體系,可和IMS直接對接;普通插件對于不同瀏覽器需要不同的開發實現,且需要用戶安裝,具有一定的安全隱患。第二步,為了避免引入新插件,可以考慮使用普及程度比較高的flash插件做客戶端,但需要一個接入網關實現RTMP協議流的解析和與IMS協議的適配。第三步,采用RTCWeb技術引入無插件的Web客戶端,開發者通過JavaScrip編程實現Web應用信令面功能,RTCWeb信令可以由Web應用定義,所以需要一個接入網關實現RTCWeb信令和IMS協議的適配。
隨著終端Web化的逐漸深入,承擔RTCWeb客戶端接入功能的網關(RTC-GW)的作用越來越重要。RTC-GW除了可以接入RTCWeb客戶端,也可以提供對其他Web客戶端 (如flash客戶端)的接入,實現客戶端通信協議 (如RTCWeb或者RTMP)到電信核心網IMS協議的適配和轉換及媒體轉碼等操作(為了簡化,后文將主要考慮RTC-GW提供RTC客戶端接入功能)。隨著RTCWeb客戶端數量的增長,單個RTC-GW無法應對高并發呼叫和媒體處理問題,可以通過多個RTC-GW組成協同群組(RTC-GW cluster),實現資源共享。

圖7 RTCWeb客戶端接入IMS構想
RTCWeb技術有力推動了IMS終端形態向無插件Web客戶端的轉型,將來IMS用戶手持任何終端下載RTC客戶端即可使用IMS業務。本節將重點介紹RTCWeb客戶端接入IMS解決方案及典型業務的實現流程。
如圖8所示,RTCWeb系統由RTC-GW及RTCWeb客戶端組成,其中RTCWeb客戶端由支持RTCWeb API的瀏覽器及相應的Web App組成。RTCWeb客戶端可以通過DNS獲取RTC-GW群組的入口地址,入口點一般具有負載均衡器(load balancer)的功能;RTCWeb客戶端向負載均衡器請求可服務的RTC-GW,負載均衡器采用輪詢或者IP散列的方式確定一個RTC-GW,并向RTCWeb客戶端返回IP地址或者域名信息。如果RTCWeb客戶端位于NAT之后,無法與其他客戶端建立直連,RTC-GW可以向RTCWeb客戶端提供ICE,幫助客戶端實現不同類型的NAT穿越。RTCWeb客戶端通過RTC-GW實現與IMS核心網的通信,其中,RTCWeb客戶端和RTC-GW之間形成客戶端/服務器方式的通信,包括RTCWeb信令和RTP媒體交互;RTC-GW實現了背對背的用戶代理(B2BUA),轉化RTCWeb信令及媒體編解碼適配IMS信令及媒體編解碼,最終接入為IMS業務邊界控制器(service border controller,SBC)設備,完成RTCWeb客戶端和IMS的互通。

圖8 基于IMS的RTCWeb系統結構
RTCWeb信令處理/適配及媒體面交換主要涉及了RTC-GW以下基本功能。
·主處理單元 (master processing unit,MPU)主要完成RTCWeb信令及業務流程控制,如對于Chrome瀏覽器,MPU處理基于Web Socket承載的RTCWeb信令。
·協議適配(protocol adapter,PA)單元主要完成RTCWeb信令與SIP的協議轉換及SIP用戶代理的信令面相關工作。
·編解碼轉換(codec transcoding,CT)單元主要完成媒體格式的編解碼轉換工作。比如,Chrome瀏覽器支持音頻編解碼iSAC/iLBC/G.711和視頻編解碼VP8,而IMS要求支持音頻編解碼G.711/G.723/G.729和視頻編解碼H.263/H.264,一般情況下需要實現瀏覽器到網絡編解碼的轉換。
·媒體轉發(media forward,MF)模塊主要完成 IMS及RTCWeb客戶端之間的RTP/SRTP媒體接收、發送及解析,如果需要編解碼轉化需要先將RTP分組發送給CT處理。

圖9 RTCWeb用戶與傳統手機用戶之間的呼叫流程
4.2.1 RTCWeb用戶與傳統手機用戶之間的呼叫流程
RTCWeb客戶端通過RTC-GW群組系統接入IMS,所以RTCWeb客戶端與RTC-GW群組系統之間的交互基于Web Socket承載的RTCWeb信令,而RTC-GW群組系統與IMS之間采用SIP信令。如圖9所示,在RTCWeb用戶呼叫傳統手機用戶的信令流程中,RTC-GW群組系統負責在RTCWeb客戶端和IMS網絡之間傳遞呼叫、振鈴及摘機等操作。

圖10 RTCWeb用戶之間呼叫流程
4.2.2 RTCWeb用戶之間的呼叫流程
SBC作為IMS的信令和媒體的入口點,將造成兩個RTCWeb客戶端之間通信媒體的迂回。希望在無需合法監聽的情況下,RTCWeb客戶端之間的媒體交互能夠以P2P的方式進行。這個問題可以通過RTC-GW群組系統來實現。如圖10所示,RTC-GW群組系統在媒體協商Offer/Answer交互中,將SBC的媒體面IP地址和端口隱藏,取而代之的是RTCWeb客戶端A和B的媒體面IP地址和端口,實現RTCWeb客戶端之間的媒體直傳。
RTC-GW群組系統如何將SBC的媒體面IP地址和端口替換成RTCWeb客戶端的媒體面IP地址和端口,實現方法有很多,圖11列舉兩種方式僅作參考:第一種方式,RTC-GW A和B分別為RTCWeb客戶端 A和B提供服務,RTC-GW A和B直接交換媒體面信息,將SBC的媒體面信息換成對端RTCWeb客戶端的媒體面信息;第二種方式,RTC-GW A和B分別為RTCWeb客戶端A和B提供接入,并將信令轉發給同一個RTC-GW提供服務,這樣同一個RTC-GW便直接將SBC的媒體面信息替換成不同的RTCWeb客戶端的媒體面信息。

圖11 RTC-GW群組系統實現媒體地址替換
RTCWeb技術成為推進Web實時通信的優選方式之一,它具有傳統客戶端無法比擬的優勢,如操作便捷性、開發靈活性及平臺無關性等。本文首先對RTCWeb通信模型及關鍵技術進行介紹及分析;在此基礎上,提出了采用RTCWeb技術實現IMS免插件Web客戶端的想法,并提出相應的RTCWeb與IMS的融合方案;方案細化了IMS RTCWeb客戶端和RTC-GW接入網關的實現方式;通過本文建議的RTCWeb和IMS融合方案,可進一步豐富IMS的終端形態,簡化IMS客戶端部署方式,提升用戶體驗。
此外,關于RTC-GW群組實現方式,可以結合云計算技術形成一個RTC-GW云。通過云計算技術使RTC-GW群組具有低成本、易擴展、易管理等優點。RTC-GW云系統保證RTC-GW功能實體之間相互協作,實現負荷分擔,對外實現拓撲隱藏,使用了數據多副本容錯、同構可互換等措施來提升可靠性。RTC-GW云還可以對外提供云服務,如 SaaS(software as a service,軟件即服務),可能包括RTC-GW的功能或者其子功能,如會話控制、協議適配或編解碼轉化甚至NAT穿越等;PaaS(platform as a service,平臺即服務),可能提供RTCWeb開發平臺,即系統可以對外提供JavaScript開發包供第三方網站或者軟件進行調用。
1 Open web platform.http://www.w3.org/wiki/Open_Web_Platform
2 HTML5.http://www.w3.org/TR/html5/
3 Facebook.http://www.facebook.com/
4 GoogleTalk.http://www.gtalk.com.cn/
5 Gmail.http://mail.google.com/
6 iGoogle.http://www.google.com/
7 Alicall.http://www.alicall.com/
8 FlashVoIP.http://www.alicall.com/
9 RTMP specification.http://www.adobe.com/devnet/rtmp.html
10 W3C WebRTC working group.http://www.w3.org/standards/techs/webrtc#w3c_all
11 IETF RTCWeb working group.http://datatracker.ietf.org/wg/rtcweb/
12 Alvestrand H.Overview:Real Time Protocols for Brower-based Applications.W3C,June 20,2012
13 WebRTC 1.0:real-time communication between browsers.http://www.w3.org/TR/webrtc/
14 Jennings C,Rosenberg J.RTCWeb Offer/AnswerProtocol(ROAP).IETF,October 30,2011
15 Uberti J,Jennings C.Javascript Session Establishment Protocol.IETF,June 4,2012
16 sipML5.http://www.sipml5.org/
17 RFC6455.http://tools.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol