張遠 劉偉 董顯平 蔡樹培



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