趙永明
(中國氣象局氣象干部培訓學院,北京 100081)
WebRTC主要包括音頻引擎、視頻引擎和網絡傳輸協議3個主要部分。音頻模塊包括iSAC/iLBC采集編解碼、聲音處理、語音控制、同步及輸出,采用降噪和回音處理技術提供高質量的語音。視頻引擎模塊包含視頻采集、編解碼、加密、圖像處理顯示、網絡傳輸與流媒體控制等技術,視頻采用VP8編解碼技術具有低延時的特點,視頻抖動緩沖以及圖像增強可以減小網絡不穩定時的視頻噪音,增強視頻質量。網絡傳輸包含了穩定的SRTP,包含STUN、ICE等技術,支持透防火墻等功能,各部分可根據實際需求進行擴展,可滿足網絡條件較差的用戶進行實時的音視頻交流。

圖1 webrtc架構圖
WebRTC采用SIP-over-WebSocket(SIPoWS)作為信令棧。HTTP協議用于瀏覽器下載HTML5/JavaScript程序內容;NAT棧解決P2P連接問題;媒體棧用于發送和接收RTC的音頻和視頻。
WebRTC視頻教學會議方案優勢主要體現基于UDP,延時低,互動效果好;支持跨平臺,容易集成二次開發,用h5網頁就能調用開發,目前android,Ios,pc的web都能調用;采用視頻協議新標準,WebRTC的兼容性越來越好。較傳統的基于H.323視頻會議系統,WebRTC主要采用SIP的協議作為信令傳輸協議,具有擴展性強,穩定可靠、帶寬利用率高等特點,利用WebRTC技術,用戶之間可以直接利用基于HTML5技術的瀏覽器進行多媒體通信,大大提高了用戶之間通信的便捷性。
WebRTC目前存在的問題包括開發難度較高,特別是服務端沒有統一的方案;UDP穿透,部署NAT后端服務器,比較麻煩;WebRTC架構方案較多,選型有一些難度。
系統采用B/S架構模型,后臺配置SIP服務器,WebSocket代理服務器、媒體服務器,WebRTC客戶端運行在瀏覽器,采用JavaScript語言調用SIP協議棧用于發送接收解析SIP信令。SIP服務器主要進行用戶認證,會話控制。WebSocket代理服務器通過偵聽負責連接WebRTC客戶端和SIP服務器。媒體服務器負責音視頻信號的混合,并通過SIP服務器提供的會議信息對音視頻信號進行分發。

圖2 音視頻實時教學系統結構
SIP服務器主要控制會議的建立,學員和老師的加入和退出,為了避免冗余,以及做到與現有技術的最大兼容,信令方法和協議都不由WebRTC標準來指定,協調通信的過程。WebRTC應用要發起一個對話交換媒體元數據、網絡數據密鑰數據等,本文采用了在Asterisk開源軟件的基礎上進行修改實現。另外還考慮Freeswitch作為服務端,包含了sip服務器,stun服務器、視頻轉發服務器。p2p的通信過程采用SPD的會話描述協議以及通過STUN技術穿越NAT實現p2p的直接通信或者使用STUN服務器實現突破NAT的P2P通信,在連接建立前或者建立后調用peerConnection.addStream方法將本地視頻/音頻數據流加入到connection當中,當對方接受到視頻流時會觸發addStream事件,在其處理程序中我們可以接受數據流將其顯示,STUN服務器可以是自己搭建的,也可以是直接使用現成的。
媒體服務器主要完成音視頻的混合和分發,音頻部分采用Zaptel實現,視頻部分采用FFmpeg實現,可判斷客戶端是否在同一網段,還可以采用組播方式傳輸媒體流來節省帶寬。流媒體服務自主研發服務端技術,門檻較高,基于WebRTC開源MCU框架有licode、kurento、jistsi等,可選擇基于開源改造節省開發時間,本文采用Licode進行了學習和實踐。Licode主要由Erizo的一對多組件(MCU)、NodeJsapi、負責管理視頻會議session的控制器、負責管理會議房間、參加人員、憑證等服務器資源的管理單元4個模塊組成。在ubuntu環境下進行了搭建,安裝時需要依賴libNice、libavutil、libevent-core等庫。通過下載licode,編譯安裝后配置liconde_config.js及erizoController.js文件后即可實現多人視頻通信。
WebRTC客戶端通過瀏覽器Html5應用采用WebRTC的音頻引擎和視頻引擎及網絡傳輸部分的javascriptAPI實現音視頻采集和編解碼以及音視頻同步、傳輸以及圖像同步。傳統的視頻會議一般需要安裝第三方插件或者采用flash插件將語音和視頻遷入到網頁中,html5的video和audio標簽可不使用特殊插件播放音視頻,因此采用web瀏覽器接入視頻教學系統成為了新的選擇。本文采用JsSIP兼容WebRTC的js庫,可快速實現客戶端,通過WebRTC,從用戶攝像頭獲取圖像并傳給服務器。由于WebRTC只在Chrome、Opera、Firefox上支持,所以客戶端不能運行于IE瀏覽器。JsSIP是一個javascript庫,通過websocket傳輸SIP,具有豐富的API,適用于Asterisk,可提供全功能的sip斷點,JsSIP封裝了SIP和WebRTC,如果不需要自己調用getUserMedia來獲取音視頻,JsSIP會通過JsSIP.UA.call方法的參數來實現調用,通過配置對象初始化JsSIP用戶代理,調用相應的api可以很容易實現網站間通過音視頻實時通信。
通過本文實踐,基本熟悉和掌握了基于WebRTC進行音視頻教學系統開發的基本思路和技術路線,目前完成的系統實現了音視頻實時教學的基本功能。
完成的客戶端前端主要包括用戶注冊登錄,主講人加入會議進行音視頻推流,學員端用戶加入會議參會,舉手申請連麥,以及文字聊天等直播系統的主要功能,基本實現了通過網絡進行視頻直播教學活動,后期將進一步考慮基于P2P的WebRTC架構調整、使用P2P媒體流,音頻、視頻和數據的連接直接通過瀏覽器實現、采用STUN協議建立一個P2PRTC媒體等方式,改進多人參加互動連麥,進一步改進會議房間管理和用戶管理、添加簽到點名、課堂調查、抽獎以及點贊等功能,同時提升系統的易用性。
本文分析了基于WebRTC開發視頻會議系統的基本設計思路和開發模式,主要部分基于開源軟件實現,對現有業務使用的視頻會議產品提出優化改造需求和設計開發思路提供了參考,后期將在此基礎上擴展音視頻教學系統功能、優化系統性能、增加學員在線學習體驗和提升同步課堂教學效果,為利用同步音視頻教學在氣象遠程培訓業務應用提供更好的支持。