趙永明
(中國氣象局氣象干部培訓(xùn)學(xué)院,北京 100081)
WebRTC主要包括音頻引擎、視頻引擎和網(wǎng)絡(luò)傳輸協(xié)議3個主要部分。音頻模塊包括iSAC/iLBC采集編解碼、聲音處理、語音控制、同步及輸出,采用降噪和回音處理技術(shù)提供高質(zhì)量的語音。視頻引擎模塊包含視頻采集、編解碼、加密、圖像處理顯示、網(wǎng)絡(luò)傳輸與流媒體控制等技術(shù),視頻采用VP8編解碼技術(shù)具有低延時的特點,視頻抖動緩沖以及圖像增強(qiáng)可以減小網(wǎng)絡(luò)不穩(wěn)定時的視頻噪音,增強(qiáng)視頻質(zhì)量。網(wǎng)絡(luò)傳輸包含了穩(wěn)定的SRTP,包含STUN、ICE等技術(shù),支持透防火墻等功能,各部分可根據(jù)實際需求進(jìn)行擴(kuò)展,可滿足網(wǎng)絡(luò)條件較差的用戶進(jìn)行實時的音視頻交流。
圖1 webrtc架構(gòu)圖
WebRTC采用SIP-over-WebSocket(SIPoWS)作為信令棧。HTTP協(xié)議用于瀏覽器下載HTML5/JavaScript程序內(nèi)容;NAT棧解決P2P連接問題;媒體棧用于發(fā)送和接收RTC的音頻和視頻。
WebRTC視頻教學(xué)會議方案優(yōu)勢主要體現(xiàn)基于UDP,延時低,互動效果好;支持跨平臺,容易集成二次開發(fā),用h5網(wǎng)頁就能調(diào)用開發(fā),目前android,Ios,pc的web都能調(diào)用;采用視頻協(xié)議新標(biāo)準(zhǔn),WebRTC的兼容性越來越好。較傳統(tǒng)的基于H.323視頻會議系統(tǒng),WebRTC主要采用SIP的協(xié)議作為信令傳輸協(xié)議,具有擴(kuò)展性強(qiáng),穩(wěn)定可靠、帶寬利用率高等特點,利用WebRTC技術(shù),用戶之間可以直接利用基于HTML5技術(shù)的瀏覽器進(jìn)行多媒體通信,大大提高了用戶之間通信的便捷性。
WebRTC目前存在的問題包括開發(fā)難度較高,特別是服務(wù)端沒有統(tǒng)一的方案;UDP穿透,部署NAT后端服務(wù)器,比較麻煩;WebRTC架構(gòu)方案較多,選型有一些難度。
系統(tǒng)采用B/S架構(gòu)模型,后臺配置SIP服務(wù)器,WebSocket代理服務(wù)器、媒體服務(wù)器,WebRTC客戶端運(yùn)行在瀏覽器,采用JavaScript語言調(diào)用SIP協(xié)議棧用于發(fā)送接收解析SIP信令。SIP服務(wù)器主要進(jìn)行用戶認(rèn)證,會話控制。WebSocket代理服務(wù)器通過偵聽負(fù)責(zé)連接WebRTC客戶端和SIP服務(wù)器。媒體服務(wù)器負(fù)責(zé)音視頻信號的混合,并通過SIP服務(wù)器提供的會議信息對音視頻信號進(jìn)行分發(fā)。
圖2 音視頻實時教學(xué)系統(tǒng)結(jié)構(gòu)
SIP服務(wù)器主要控制會議的建立,學(xué)員和老師的加入和退出,為了避免冗余,以及做到與現(xiàn)有技術(shù)的最大兼容,信令方法和協(xié)議都不由WebRTC標(biāo)準(zhǔn)來指定,協(xié)調(diào)通信的過程。WebRTC應(yīng)用要發(fā)起一個對話交換媒體元數(shù)據(jù)、網(wǎng)絡(luò)數(shù)據(jù)密鑰數(shù)據(jù)等,本文采用了在Asterisk開源軟件的基礎(chǔ)上進(jìn)行修改實現(xiàn)。另外還考慮Freeswitch作為服務(wù)端,包含了sip服務(wù)器,stun服務(wù)器、視頻轉(zhuǎn)發(fā)服務(wù)器。p2p的通信過程采用SPD的會話描述協(xié)議以及通過STUN技術(shù)穿越NAT實現(xiàn)p2p的直接通信或者使用STUN服務(wù)器實現(xiàn)突破NAT的P2P通信,在連接建立前或者建立后調(diào)用peerConnection.addStream方法將本地視頻/音頻數(shù)據(jù)流加入到connection當(dāng)中,當(dāng)對方接受到視頻流時會觸發(fā)addStream事件,在其處理程序中我們可以接受數(shù)據(jù)流將其顯示,STUN服務(wù)器可以是自己搭建的,也可以是直接使用現(xiàn)成的。
媒體服務(wù)器主要完成音視頻的混合和分發(fā),音頻部分采用Zaptel實現(xiàn),視頻部分采用FFmpeg實現(xiàn),可判斷客戶端是否在同一網(wǎng)段,還可以采用組播方式傳輸媒體流來節(jié)省帶寬。流媒體服務(wù)自主研發(fā)服務(wù)端技術(shù),門檻較高,基于WebRTC開源MCU框架有l(wèi)icode、kurento、jistsi等,可選擇基于開源改造節(jié)省開發(fā)時間,本文采用Licode進(jìn)行了學(xué)習(xí)和實踐。Licode主要由Erizo的一對多組件(MCU)、NodeJsapi、負(fù)責(zé)管理視頻會議session的控制器、負(fù)責(zé)管理會議房間、參加人員、憑證等服務(wù)器資源的管理單元4個模塊組成。在ubuntu環(huán)境下進(jìn)行了搭建,安裝時需要依賴libNice、libavutil、libevent-core等庫。通過下載licode,編譯安裝后配置liconde_config.js及erizoController.js文件后即可實現(xiàn)多人視頻通信。
WebRTC客戶端通過瀏覽器Html5應(yīng)用采用WebRTC的音頻引擎和視頻引擎及網(wǎng)絡(luò)傳輸部分的javascriptAPI實現(xiàn)音視頻采集和編解碼以及音視頻同步、傳輸以及圖像同步。傳統(tǒng)的視頻會議一般需要安裝第三方插件或者采用flash插件將語音和視頻遷入到網(wǎng)頁中,html5的video和audio標(biāo)簽可不使用特殊插件播放音視頻,因此采用web瀏覽器接入視頻教學(xué)系統(tǒng)成為了新的選擇。本文采用JsSIP兼容WebRTC的js庫,可快速實現(xiàn)客戶端,通過WebRTC,從用戶攝像頭獲取圖像并傳給服務(wù)器。由于WebRTC只在Chrome、Opera、Firefox上支持,所以客戶端不能運(yùn)行于IE瀏覽器。JsSIP是一個javascript庫,通過websocket傳輸SIP,具有豐富的API,適用于Asterisk,可提供全功能的sip斷點,JsSIP封裝了SIP和WebRTC,如果不需要自己調(diào)用getUserMedia來獲取音視頻,JsSIP會通過JsSIP.UA.call方法的參數(shù)來實現(xiàn)調(diào)用,通過配置對象初始化JsSIP用戶代理,調(diào)用相應(yīng)的api可以很容易實現(xiàn)網(wǎng)站間通過音視頻實時通信。
通過本文實踐,基本熟悉和掌握了基于WebRTC進(jìn)行音視頻教學(xué)系統(tǒng)開發(fā)的基本思路和技術(shù)路線,目前完成的系統(tǒng)實現(xiàn)了音視頻實時教學(xué)的基本功能。
完成的客戶端前端主要包括用戶注冊登錄,主講人加入會議進(jìn)行音視頻推流,學(xué)員端用戶加入會議參會,舉手申請連麥,以及文字聊天等直播系統(tǒng)的主要功能,基本實現(xiàn)了通過網(wǎng)絡(luò)進(jìn)行視頻直播教學(xué)活動,后期將進(jìn)一步考慮基于P2P的WebRTC架構(gòu)調(diào)整、使用P2P媒體流,音頻、視頻和數(shù)據(jù)的連接直接通過瀏覽器實現(xiàn)、采用STUN協(xié)議建立一個P2PRTC媒體等方式,改進(jìn)多人參加互動連麥,進(jìn)一步改進(jìn)會議房間管理和用戶管理、添加簽到點名、課堂調(diào)查、抽獎以及點贊等功能,同時提升系統(tǒng)的易用性。
本文分析了基于WebRTC開發(fā)視頻會議系統(tǒng)的基本設(shè)計思路和開發(fā)模式,主要部分基于開源軟件實現(xiàn),對現(xiàn)有業(yè)務(wù)使用的視頻會議產(chǎn)品提出優(yōu)化改造需求和設(shè)計開發(fā)思路提供了參考,后期將在此基礎(chǔ)上擴(kuò)展音視頻教學(xué)系統(tǒng)功能、優(yōu)化系統(tǒng)性能、增加學(xué)員在線學(xué)習(xí)體驗和提升同步課堂教學(xué)效果,為利用同步音視頻教學(xué)在氣象遠(yuǎn)程培訓(xùn)業(yè)務(wù)應(yīng)用提供更好的支持。