張遠 劉偉 董顯平 蔡樹培
【摘要】? ? 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,實時音視頻應(yīng)用正逐步融入到人們?nèi)粘5墓ぷ鳌W(xué)習、生活中,在會議協(xié)作、在線教育、智慧工廠、網(wǎng)絡(luò)直播等行業(yè)取得了良好的效益。本文在介紹WebRTC技術(shù)的基礎(chǔ)上,基于Janus網(wǎng)關(guān)設(shè)計并實現(xiàn)了一個在瀏覽器中運行的音視頻客戶端系統(tǒng),具備音視頻設(shè)備調(diào)試,音視頻直播放映,基于SIP協(xié)議的Web話機,會議協(xié)作等功能,具有跨平臺,即點即用,低成本,穩(wěn)定可靠等特點,論證了使用Janus網(wǎng)關(guān)開發(fā)WebRTC應(yīng)用的可行性。
【關(guān)鍵字】? ? WebRTC? ? Janus網(wǎng)關(guān)? ? 音視頻客戶端
一、WebRTC技術(shù)簡介
WebRTC即Web Real-Time Communication(網(wǎng)頁實時通信),是一個Web瀏覽器原生支持的點對點進行實時音頻、視頻通信及通用數(shù)據(jù)傳輸?shù)募夹g(shù),提供了包括客戶端音視頻采集、編解碼、網(wǎng)絡(luò)傳輸、顯示等一系列核心功能,為Web開發(fā)者提供了應(yīng)用程序接口(API),支持Windows, Linux, MacOS, Android, iOS等多種操作系統(tǒng)間跨平臺通信[1]。
二、Janus網(wǎng)關(guān)介紹
Janus網(wǎng)關(guān)(Janus Gateway)是由Meetecho公司開發(fā)的開源通用WebRTC服務(wù)器,提供了客戶端間實時音視頻通信,信令交互,RTP/RTCP數(shù)據(jù)包接力轉(zhuǎn)發(fā)等功能,同時封裝了WebRTC的編程接口,屏蔽了各個平臺間WebRTC編程接口的差異,更便利于開發(fā)者進行各種音視頻應(yīng)用的開發(fā)[2]。
Janus網(wǎng)關(guān)使用C語言開發(fā),代碼架構(gòu)分為核心模塊,插件模塊,插件編程接口模塊,管理、監(jiān)控模塊,事件處理及日志編程接口等模塊。其中核心模塊實現(xiàn)了RTCP/RTP/SRTP/SCTP等數(shù)據(jù)包傳輸協(xié)議以及ICE/STUN/TURN等內(nèi)網(wǎng)透傳協(xié)議;插件模塊實現(xiàn)Janus網(wǎng)關(guān)支持的各項功能,如回聲測試、視頻呼叫、聊天室等,同時支持第三方插件的開發(fā);插件編程接口模塊供開發(fā)者調(diào)用來開發(fā)各項業(yè)務(wù)功能,支持包括HTTP RestFUL、Websocket、RabbitMQ、MQTT、UnixSockets等多種協(xié)議,適用于各種軟件開發(fā)平臺與環(huán)境;管理、監(jiān)控模塊提供服務(wù)器運行狀態(tài)、會話狀態(tài)等詳盡的信息,主要用于調(diào)試及監(jiān)控用途。
三、音視頻客戶端設(shè)計
以下從技術(shù)框架及架構(gòu)設(shè)計兩個方面來介紹本音視頻客戶端的設(shè)計。
3.1技術(shù)框架
客戶端使用PHP語言的Laravel框架來開發(fā)Web后臺,數(shù)據(jù)庫使用MySQL,Nginx作為Web服務(wù)器。Laravel是一個開源的PHP Web框架,旨在實現(xiàn)Web系統(tǒng)的MVC架構(gòu),其特點包括用戶身份驗證與授權(quán),模塊化的代碼結(jié)構(gòu),提供了連接多種數(shù)據(jù)庫的類庫,提供了一系列的工具來協(xié)助應(yīng)用程序的部署與維護,同時包含許多語法糖。前端使用VueJS框架來開發(fā)頁面邏輯,頁面UI樣式使用ElementUI。VueJS是一套構(gòu)建Web用戶界面的漸進式MVVM框架,其核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合,其頁面數(shù)據(jù)動態(tài)綁定的特性適合構(gòu)建復(fù)雜的大型Web單頁面應(yīng)用。
3.2架構(gòu)設(shè)計
下圖為整個系統(tǒng)的架構(gòu)設(shè)計圖。整個系統(tǒng)包括Janus網(wǎng)關(guān),Web應(yīng)用服務(wù),數(shù)據(jù)庫及內(nèi)網(wǎng)透傳服務(wù)器四部分。
Janus網(wǎng)關(guān)使用了回聲測試插件,媒體推流插件,SIP協(xié)議插件及視頻會議插件。
回聲測試插件用來檢查客戶端音頻、視頻設(shè)備的工作狀態(tài),連接到此插件的一個客戶端將會接收到其發(fā)送的音頻、視頻媒體流,通過與本地音視頻進行對比,即可發(fā)現(xiàn)音視頻設(shè)備有沒有正常工作。
媒體推流插件允許客戶端收聽及觀看錄制好的媒體文件及其他工具生成的實時媒體流,包括三種類型的媒體流,1.按需播放的媒體文件,2.直播形式的媒體文件,3.直播形式的其他工具生成的媒體流。
SIP協(xié)議插件允許WebRTC客戶端向SIP服務(wù)器注冊用戶,用來支持瀏覽器用戶與SIP話機間通過Janus網(wǎng)關(guān)進行音視頻通信。
視頻會議插件基于訂閱發(fā)布的模式,讓每一個會議室的用戶都可以發(fā)布其音視頻媒體流,同時會議室的其他成員會收到發(fā)布的通知并開始接收并在頁面中播放,即視頻會議插件支持從單主講人-多聽眾到多方會議的多個應(yīng)用場景。
Web應(yīng)用后臺連接MySQL數(shù)據(jù)庫,持久化保存用戶信息,設(shè)備信息,會議信息等多種數(shù)據(jù),前端瀏覽器通過Websocket協(xié)議建立與Janus網(wǎng)關(guān)的長連接,用來發(fā)送用戶的各項業(yè)務(wù)請求并接收Janus網(wǎng)關(guān)的響應(yīng)展示給用戶。
針對內(nèi)網(wǎng)的網(wǎng)絡(luò)環(huán)境還需要配置一臺內(nèi)網(wǎng)穿透服務(wù)器來穿透NAT網(wǎng)絡(luò)進行點對點的音視頻通信。Janus網(wǎng)關(guān)的核心層實現(xiàn)了STUN、ICE等協(xié)議棧來支持內(nèi)網(wǎng)透傳。
四、各項功能的實現(xiàn)
4.1音視頻設(shè)備調(diào)試
此項功能需要在頁面上放置兩個