趙 宇
WebRTC是一個(gè)開源項(xiàng)目,可以在瀏覽器中不借助任何插件進(jìn)行實(shí)時(shí)通信。由Google、Opera和Mozilla主導(dǎo)的這一項(xiàng)目,允許開發(fā)者在瀏覽器中僅使用JavaScript API和HTML5將聲音、訊息和視頻融為一體。盡管WebRTC提供了一些標(biāo)準(zhǔn)以促進(jìn)創(chuàng)新,但尚有一些問題需要解決。其中,兩個(gè)大問題是缺少標(biāo)準(zhǔn)化信令和瀏覽器的普遍支持。WebRTC聯(lián)盟曾故意遺漏信令標(biāo)準(zhǔn)來避免沖突,使各方盡快就標(biāo)準(zhǔn)達(dá)成共識(shí)。因此,廠商目前可以使用各不相同的協(xié)議,包括SIP、WebSockets以及HTTP協(xié)議,從而使WebRTC跨瀏覽器應(yīng)用而被廣泛支持。
WebRTC,名稱源自網(wǎng)頁實(shí)時(shí)通信(Web Real-Time Communication)的縮寫,是一個(gè)支持網(wǎng)頁瀏覽器進(jìn)行實(shí)時(shí)語音對(duì)話或視頻對(duì)話的技術(shù)。WebRTC實(shí)現(xiàn)了基于網(wǎng)頁的視頻會(huì)議,標(biāo)準(zhǔn)是WHATWG協(xié)議,目的是通過瀏覽器提供簡單的javascript就可以達(dá)到實(shí)時(shí)通訊(Real-Time Communications,RTC)能力。
WebRTC項(xiàng)目的最終目的主要是讓W(xué)eb開發(fā)者能夠基于瀏覽器輕易快捷地開發(fā)出豐富的實(shí)時(shí)多媒體應(yīng)用,而無需下載安裝任何插件;Web開發(fā)者也無需關(guān)注多媒體的數(shù)字信號(hào)處理過程,只需編寫簡單的Javascript程序即可實(shí)現(xiàn)[1]。WebRTC提供了視頻會(huì)議的核心技術(shù),包括音視頻的采集、編解碼、網(wǎng)絡(luò)傳輸、顯示等功能,且支持跨平臺(tái)windows、linux、mac、android。谷歌瀏覽器、火狐瀏覽器、360安全瀏覽器等,目前支持WebRTC技術(shù)標(biāo)準(zhǔn)。
WebRTC的系統(tǒng)架構(gòu),如圖1所示。
圖1 WebRTC系統(tǒng)架構(gòu)
如圖1所示,WebRTC架構(gòu)組件主要包括Web應(yīng)用APP、面向Web應(yīng)用開發(fā)者的Web API、面向?yàn)g覽器廠商開發(fā)者的WebRTC Native C++ API以及WebRTC 內(nèi)核[2]。
Web開發(fā)者開發(fā)的程序,是指Web開發(fā)者可以基于集成WebRTC的瀏覽器提供的Web API開發(fā)基于視頻、音頻的實(shí)時(shí)通信應(yīng)用,如云呼叫中心JSSIP框架和坐席應(yīng)用。
Web API是指面向第三方開發(fā)者的WebRTC標(biāo)準(zhǔn)API(Javascript)。這些API可分成Network Stream API、RTCPeerConnection和Peer-to-peer Data API三類。
Network Stream API的主要對(duì)象包括[3]:
①M(fèi)ediaStream用來表示媒體數(shù)據(jù)流;
②MediaStreamTrack,在瀏覽器中表示媒體源;
③ RTCPeerConnection,RTCPeerConnection對(duì)象允許用戶在兩個(gè)瀏覽器之間直接通訊;
④RTCIceCandidate表示ICE協(xié)議的候選者;
⑤RTCIceServer表示ICE Server;
⑥Peer-to-peer Data API表示點(diǎn)對(duì)點(diǎn)數(shù)據(jù)接口;
⑦DataChannel:數(shù)據(jù)通道表示一個(gè)在兩個(gè)節(jié)點(diǎn)之間的雙向的數(shù)據(jù)通道。
⑧WebRTC Native C++ API是指本地C++ API層,它使瀏覽器廠商容易實(shí)現(xiàn)WebRTC標(biāo)準(zhǔn)的Web API,抽象地對(duì)數(shù)字信號(hào)過程進(jìn)行處理。
WebRTC核心層包括:
①Transport/Session(傳輸/會(huì)話層)組件采用libjingle庫的部分組件實(shí)現(xiàn),無須使用xmpp/jingle協(xié)議;
②RTP Stack協(xié)議棧,即Real Time Protocol;
③STUN/ICE可以通過STUN和ICE組件建立不同類型網(wǎng)絡(luò)間的呼叫連接;
④Session Management是一個(gè)抽象的會(huì)話層,提供會(huì)話建立和管理功能。該層協(xié)議留給應(yīng)用開發(fā)者自定義實(shí)現(xiàn)。
⑤VoiceEngine(音頻引擎)是包含一系列音頻多媒體處理的框架,包括從視頻采集卡到網(wǎng)絡(luò)傳輸端的整個(gè)解決方案。
⑥VideoEngine(視頻引擎)是包含一系列視頻處理的整體框架,包括從攝像頭采集視頻到視頻信息網(wǎng)絡(luò)傳輸再到視頻顯示的整個(gè)完整過程的解決方案。
為了方便租用云呼叫中心坐席的用戶使用,將WebRTC技術(shù)引入云呼叫中心系統(tǒng)平臺(tái)。用戶通過瀏覽器網(wǎng)頁,不用加載任何插件即可進(jìn)行通話,且用戶不需了解任何關(guān)于SIP參數(shù)的專業(yè)配置[4]。系統(tǒng)架構(gòu)圖,如圖2所示。
圖2 系統(tǒng)架構(gòu)
在云呼叫中心系統(tǒng)的核心軟交換平臺(tái)增加了對(duì)WebRTC的適配模塊,即增加對(duì)WebSOCKET的支持和SIP OVER WebSOCKET的處理。這樣核心軟交換平臺(tái)就實(shí)現(xiàn)了WebRTC和標(biāo)準(zhǔn)SIP AGENT之間的交換,從而達(dá)到相互通信的目的。
整個(gè)平臺(tái)的架構(gòu)是完全分布式的,采用高內(nèi)聚、低耦合的模塊化設(shè)計(jì)思想。軟交換平臺(tái)可以分布式擴(kuò)展,并且根據(jù)坐席和SIP中繼線路分配相應(yīng)的負(fù)荷量,確保系統(tǒng)平滑擴(kuò)展,沒有瓶頸。Web和應(yīng)用服務(wù)器可以采用集群方式擴(kuò)展,數(shù)據(jù)庫服務(wù)器可以采用ORACLE RAC來做集群擴(kuò)展。
模塊之間采用業(yè)界最好的ICE中間件實(shí)現(xiàn)分布式通信和負(fù)載均衡,通信安全可靠。Web瀏覽器和服務(wù)器之間采用HTTPS協(xié)議,實(shí)現(xiàn)了客戶數(shù)據(jù)的高度安全保護(hù),采用SRTP實(shí)現(xiàn)語音媒體通信的安全性,確保不能被監(jiān)聽。
坐席的通話方式支持IP話機(jī)(支持視頻)、IAD電話、網(wǎng)絡(luò)電話軟件(支持視頻)、網(wǎng)頁通話(瀏覽器WebRTC,支持視頻)和綁定手機(jī)或固定電話??蛻舳瞬捎脼g覽器方式即B/S結(jié)構(gòu),易于升級(jí),便于采用互聯(lián)網(wǎng)方式運(yùn)營。
系統(tǒng)核心軟交換平臺(tái)采用基于業(yè)界最先進(jìn)的開源軟交換系統(tǒng)FREESWITCH定制開發(fā)的、支持集群的功能強(qiáng)大的軟交換系統(tǒng),支持SIP等常見軟交換協(xié)議。
核心軟交換平臺(tái)配置了功能強(qiáng)大的TTS(文本語音轉(zhuǎn)換引擎)、MCU和錄音錄像引擎。核心軟交換平臺(tái)通過SIP中繼和聯(lián)通軟交換網(wǎng)絡(luò)互聯(lián)。每個(gè)SIP中繼對(duì)應(yīng)一組中繼號(hào)碼段,每個(gè)SIP中繼接入到不同的軟交換服務(wù)器。
數(shù)據(jù)庫系統(tǒng)采用ORACLE,具備業(yè)界最好的安全性和可靠性。擴(kuò)容時(shí),可以采用ORACLE RAC實(shí)現(xiàn)。
Web和應(yīng)用服務(wù)器可以采用集群方式擴(kuò)展,實(shí)現(xiàn)云呼叫中心系統(tǒng)的所有功能。和其他系統(tǒng)的互聯(lián)采用標(biāo)準(zhǔn)HTTP協(xié)議和JavaScript函數(shù)API接口。
ACD/IVR/CTI以及視頻會(huì)議控制服務(wù)端軟件,支持多服務(wù)器部署。
IVR是指語音流程模塊,主要處理來電的交互式語音響應(yīng)??蛻敉ㄟ^不同的按鍵選擇不同的業(yè)務(wù)或者自助查詢服務(wù),也可以通過語音識(shí)別(ASR)模塊識(shí)別客戶說話進(jìn)行交互。不同的企業(yè)通過后臺(tái)Web管理頁面來定制自己企業(yè)的語音流程。例如,可以定義多個(gè)語音流程。不同的時(shí)段定義不同的語音流程,如上班時(shí)間的流程、休息時(shí)間的流程;也可以定義多個(gè)號(hào)碼的多個(gè)語音流程,其中每個(gè)號(hào)碼對(duì)應(yīng)一個(gè)語音流程。
ACD(自動(dòng)呼叫分配)模塊實(shí)現(xiàn)來電呼叫的排隊(duì)和自動(dòng)分配以及坐席的管理。排隊(duì)和自動(dòng)分配是以隊(duì)列為基本單位進(jìn)行處理的,客戶可以在后臺(tái)Web管理頁面配置各個(gè)業(yè)務(wù)隊(duì)列,并定制其排隊(duì)和分配策略。
CTI模塊實(shí)現(xiàn)了來電的客戶信息識(shí)別以及服務(wù)端和客戶端的信息推送,如來電彈屏功能。錄音模塊實(shí)現(xiàn)了對(duì)坐席通話的實(shí)時(shí)錄音和存儲(chǔ)管理,TTS(文本轉(zhuǎn)語音)模塊實(shí)現(xiàn)了文本轉(zhuǎn)換為語音的功能,即在語音流程中播放指定的文字[5]。
FLEXGATE模塊實(shí)現(xiàn)了接收瀏覽器通過FLASH方式發(fā)送過來的控制命令,即關(guān)于CTI的坐席操作方面的控制命令通過FLASH實(shí)現(xiàn),如來電彈屏、簽入、簽出、上線、下線、外呼、會(huì)議、保持、監(jiān)聽、咨詢坐席等操作。瀏覽器的控制命令通過FLEXGATE和呼叫中心相關(guān)服務(wù)通信(IVR、ACD、CTI),系統(tǒng)部署如圖3所示。
圖3 系統(tǒng)部署
最后,基于JavaScript開發(fā)了瀏覽器網(wǎng)頁電話的支持框架JsSIP。這個(gè)框架是基于WebRTC的Web API開發(fā)的。它將框架集成到云呼叫中心網(wǎng)頁中,網(wǎng)頁就可以通過JavaScript調(diào)用簡單的框架提供的接口完成呼叫中心坐席電話的功能,完全可以替代傳統(tǒng)的網(wǎng)絡(luò)電話軟件或者插件。
瀏覽器應(yīng)用框架如圖4所示。EXTJS框架實(shí)現(xiàn)各種管理軟件應(yīng)用的頁面;FLASH組件實(shí)現(xiàn)ACD信令方面的通信;JsSIP組件實(shí)現(xiàn)音視頻通信,其建立在WebRTC的Web API層面開發(fā)。
圖4 瀏覽器應(yīng)用框架
JsSIP是用于Web端SIP應(yīng)用開發(fā)的一套JavaScript library。利用它可以實(shí)現(xiàn)完整的SIP協(xié)議棧和WebRTC交互功能,且可以在任何網(wǎng)站輕松提供一個(gè)功能齊全的SIP終端?;贘sSIP開發(fā)庫,任何網(wǎng)站只要添加幾行代碼就可以使用音頻、視頻和消息等實(shí)時(shí)通訊功能。
框架特點(diǎn)如下[6]:
(1)SIP over WebSocket傳送;
(2)Audio/video呼叫,即時(shí)消息和presence;
(3)純JavaScript代碼從最基礎(chǔ)構(gòu)建,容易使用功能完善的user API;
(4)可以和著名的OverSIP、Kamailio和Asterisk servers等SIP服務(wù)軟件互通。
JsSIP實(shí)現(xiàn)所遵循的規(guī)范如下:
RFC 3261“SIP∶ Session Initiation Protocol”
RFC 3311“SIP UPDATE Method”
RFC 3326“The Reason Header Field for SIP”
RFC 3327“SIP Extension Header Field for Registering Non-Adjacent Contacts”(Path header)
RFC 3428“SIP Extension for Instant Messaging”(MESSAGE method)
RFC 4028“Session Timers in SIP”
RFC 5626“Managing Client-Initiated Connections in SIP”(Outbound mechanism)
RFC 5954“Essential Correction for IPv6 ABNF and URI Comparison in RFC 3261”
RFC 6026“Correct Transaction Handling for 2xx Responses to SIP INVITE Requests”
RFC 7118“The WebSocket Protocol as a Transport for SIP”
JsSIP User Agent是JsSIP的核心元素,代表一個(gè)關(guān)聯(lián)的SIP帳號(hào)的SIP客戶端。JsSIP User Agent在JsSIP.UA class中定義。在同一個(gè)Web應(yīng)用中,可以創(chuàng)建多個(gè)JsSIP User Agents。這在同一Web應(yīng)用中運(yùn)行多個(gè)不同的SIP帳號(hào)的情況下十分有用。
Google認(rèn)為,支持互聯(lián)網(wǎng)的核心技術(shù)如HTML、HTTP和TCP/IP是開放免費(fèi)的,互聯(lián)網(wǎng)也因此繁榮,所以音視頻技術(shù)也必須免費(fèi)且高質(zhì)量。因此,WebRTC是變革者,將徹底改變media engines市場(chǎng)。
[1] 聶曉飛.基于WebRTC的跨平臺(tái)視頻會(huì)議系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2014.NIE Xiao-fei.Design and Implementation of Crossplatform Video Conference System Based on WebRTC[D].Beijing:Beijing Jiaotong University,2014.
[2] 何明亮.WebRTC技術(shù)的研究與應(yīng)用[D].南京:南京郵電大學(xué),2014.HE Ming-liang.Research and Practice of the WebRTC Technology[D].Nanjing:Nanjing University of Posts and Telecommunication,2014.
[3] Bergkvist A,Burnett D C,Jennings C,et al.WebRTC1.0:Real-timeCommunication Between BrowsersW3C Editor’s Draft03[Z].2013.
[4] 陳龍明.基于JXTA和WebRTC的視頻會(huì)議系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].合肥:中國科學(xué)院大學(xué),2013.CHEN Long-ming.Design and Implementation of Video Conference System Based on JXTA and WebRTC[D].Hefei:University of Chinese Academy of Sciences,2013.
[5] Burnett D C,Narayanan A.Media Capture and Streams,W3CEditor’s Draft 30[Z].2013.
[6] 孫進(jìn)寶.基于WebRTC的混音服務(wù)器的研究與設(shè)計(jì)[D].西安:西安電子科技大學(xué),2014.SUN Jin-bao.Research and Design of WebRTC Based Mixer Server[D].Xi’an:Xidian University,2014.