1.3、WebRTC架構


文章導讀:本文的講解的是webrtc技術架構,不想了解的讀者可以跳過。為什么要了解技術架構?一句話:理解優秀項目背后的技術架構。本節內容會涉及一些專業名詞,閱讀起來可能有些晦澀,所以這里推薦的閱讀方式推薦:了解名詞,了解架構。

   本書目錄 

  正文開始。

  在之前的文章里,已經簡單的提到過webrtc的架構相關的內容,相關技術細節沒講清楚,所以本節內容的重點將聚焦在webrtc的架構中。

  如下圖1.3.1,這張圖就是來自webrtc官網的系統架構圖,本書的內容也將從這張圖開始。

  

 

 圖 1.3.1 (webrtc分層架構圖)

圖中分為兩大部分,分別是深紫色、綠色。淺紫色部分不屬於webrtc架構組成。淺紫色的箭頭為Your web app,表示的是用戶基於webrtc技術規范開發的應用程序;深紫色為Web API層,表示的是WebRTC開放給應用層開發人員的JavaScript API ,在這層中開發者無需關心復雜的底層技術,只需知其原理,調其API即可,這也是本書的重點。

  重點來看塊綠色部分——webrtc的核心層, 在核心層中分為四個子核心層,下面分別對這些子核心層逐一講解。

  首先,來看第一個子核心層——WebRTC C++ API,即C++ 接口層。這一層提供了一些 C++ API,數量不多,接口規范而且簡單,較大程度降低了開發者的開發難度。這一層的主要作用就是把webrtc的核心功能暴露出來,如設備管理,音視頻流數據采集等,方便各個軟件廠商集成到自家應用中,比如瀏覽器廠商。其中 PeerConnection是該層最核心的一個模塊,即對等連接模塊;該模塊中實現了很多功能,如P2P 穿洞、通信鏈路的建立和優選、流數據傳輸、非音視頻數據傳輸、傳輸質量報告和統計等,后續章節重點講解。 

  其次,再來看第二個子核心層—— Session management,即會話管理層。在通信應用中,會話管理是一個非常重要的功能,每個會話中都有對應的上下文環境。這一層提供了會話功能管理功能,可進行創建會話、管理會話、管理上下文環境等。

  再次,看第三個子核心層——引擎層。這一層為webrtc核心層中最重、最復雜的一層。引擎層分為三大模塊,分別是Voice Engine(音頻引擎)、Video Engine(視頻引擎)、Transport(傳輸模塊)。 這三大模塊分別處理音頻、視頻、傳輸。在webrtc中,音頻、視頻、傳輸時是分在不同的模塊中處理,由此可以看出webrtc的設計哲學,各類業務分而治之,卻又相互緊密聯系。接下來分析引擎層的每個模塊。

  第一個模塊 Voice Engine, Voice Engine是一個包含了系列音頻處理功能的框架,如音頻編解碼、音頻優化等。分別來陳述這幾個功能:①、編解碼器,webrtc內置的音頻編碼器有iSAC、iLBC。iSAC是針對VoIP(Voice over Internet Protocol,即基於IP的語音傳輸)和音頻流在寬帶和超寬帶環境中進行音頻傳輸的編解碼器 ,是WebRTC音頻引擎的默認的編解碼器,技術成熟,且被廣泛應用在各種實時通信軟件中,如Skype、QQ;iLBC則是VoIP在窄帶環境中的語音編解碼器,在網絡丟包較為嚴重的情況下仍能保持較好通話質量,該編解碼器應用廣泛。②、NetEQ是網絡語音信號處理的組件,其算法能自適應網絡環境的變化,有效的處理因網絡抖動而導致數據丟包所造成的音頻質量問題,這一技術可謂是GIPS的看家本領,在webrtc中占據着至關重要的位置。③、Echo Canceler/Noise Reduction,Echo Canceler是處理回聲消除模塊,能有效的消除采集音頻帶來的回聲影響;Noise Reduction是抑制噪音模塊,如有效的抑制多種噪音(如嘶嘶聲,風扇噪音等)。總而言之,在音頻引擎中各種語音處理模塊/組件都非常優秀,並且廣泛在各類工程應用軟件中。

  第二個模塊Video Engine,Video Engine是一個包含了系列視頻處理功能的框架,如編碼、防網絡抖動、圖像處理等。分別來陳述這幾個功能:①、編解碼器,VP8是專為解決網絡傳輸延時設計的視頻編解碼器,基於此編解碼技術可以憑借更少的數據量得到更高的視頻質量,其數據壓縮率和性能方面比市場上其他編解碼器高,其功能特點非常適合實時通信,是webrtc中默認的視頻編解碼器。②、Video Jitter Buffer——視頻抖動緩沖器,實時視頻通信難免會因為網絡的原因導致視頻的抖動或者視頻數據的丟失,視頻抖動緩沖器依靠獨特的算法,有效的解決這類情況對視頻質量造成的影響。③、Image enhancements——圖像質量增強模塊,本模是用來做圖像處理以提升視頻畫面質量的,如圖像明暗度檢測、顏色增強、降噪處理等。

  第三個模塊Transport,即數據傳輸模塊。在webrtc中,數據傳輸除了音視頻流數據之外,還可以傳輸文件、文本、圖片等其他二進制數據。我們在使用webrtc底層開源代碼時,完全可以根據需求有針對性的選擇某些模塊單獨使用,比如單獨選擇傳輸模塊來幫我們解決復雜的傳輸問題,我們無需考慮傳輸時的P2P鏈路搭建,鏈路優選,數據丟包重傳等問題。接下來分別來陳述本模塊的幾個重要的功能:①、傳輸協議,在webrtc中,底層傳輸協議基於UDP(關於UDP和TCP,請讀者自行查閱資料),上層基於RTP/SRTP協議。RTP 是(Real Time Protocol)提供了具有實時特征的、端到端的數據傳送服務協議,適用於傳輸聲音,圖像數據,更多關於RTP協議的資料可以自行查閱。但在RTP中,並未考慮到數據傳輸的安全性,所以不符合安全性要求較高的應用需求,為了解決此問題,SRTP應運而生。SRTP(SecureReal-time Transport Protocol)是在RTP的基礎上加入了安全機制的傳輸協議,SRTP為數據提供了加密、消息認證、完整性保證和重放保護等功能,最大程度保障了數據傳輸的安全性。注意,RTP/SRTP協議本身並不能保證傳輸質量,即數據傳輸過程中丟失是很常見的。傳輸質量由下層的網絡質量決定,但即使網絡質量能保證足夠好,RTP/SRTP也不能保證數據包的按順序到達,於是引入了RTCP/SRTCP,即RTP控制協議(RTP Control Protocol),該協議用於數據傳輸時的服務質量監視與反饋、媒體間同步,以及多播組中成員的標識,一句話來講就是監控RTP傳輸的質量,例如數據發送端或者接收端通過RTCP數據檢測此刻網絡傳輸的效果不理想,丟包率較高,發送端和接收端會自動調整收發數據包的速率,必要的情況下還會更換通信鏈路,以此來盡可能的提高傳輸質量。SRTCP如同 SRTP一樣,屬於對應協議的加密版,這里不在贅述。②、Multiple exing,通道復用,即多個流數據傳輸共用一個通道, 以此提高傳輸效率。③、P2P相關技術,實現P2P通信需要用到這些技術:STUN、TURN、ICE; 為了把握內容展開的節奏,盡可能的做到循序漸進,深入淺出,所以我決定,在沒有講清楚相關計算機網絡知識的情況下,暫不會深入的講解這幾個技術,在第三章里專門講解這一塊內容,可見其重要程度。在這里你只需要知道通過這三個技術就可以實現數據通信:P2P優先,中轉次之。

  到此,webrtc核心層的內容就講完了,最后看下最底層和驅動相關的模塊——驅動層,如上圖1.3.1的虛線藍框部分,本層有三個部分組成:①、Audio Capture/Render,音頻的采集和渲染模塊。②、Video Capture,視頻采集模塊,在webrtc中,視頻的渲染在應用層。③、Network I/O,網絡IO模塊,所有網絡傳輸的數據都在這里“進進出出”。這一層沒太多內容可講。

   本文的內容到此就結束了,接下來做個小結。webrtc的架構分為兩大部分, 第一部分為 Web API ,屬於上層應用層,該層為應用開發者提供JavaScript接口,豐富多彩的應用在這一層誕生。第二部分為webrtc核心層,核心層又分為了四個子核心層,分別是C++ 接口層、會話管理層、 引擎層、驅動層。C++接口層主要提供給瀏覽器廠商,瀏覽器廠商基於此層來適配出對應的JavaScript API ,共同為上層應用層的開發者提供便利;會話管理層我們不太關注,真正用到的都對我們透明了;引擎層是webrtc的心臟,重要程度不言而喻;驅動層和底層硬件打交道。

  一層一層,鑄成了一個偉大的項目。

  最后,祝你學習愉快。

  附上本書指定交流微信公眾號——“晨叔周刊”,一起討論吧。

上一篇:1.2、初識WebRTC

下一篇:1.4、WebRTC源碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM