二 、第一節 WebRTC架構.mp4

WEBRTC整體架構

我們可以簡單的將這張圖分成兩大部分,最核心的是綠色部分,這是WebRTC庫所提供的核心功能,紫色部分是瀏覽器提供的JavaScript API層,也就是說瀏覽器對WEBRTC核心層的C++API 做了一層封裝,封裝成了javascript接口,上層應用就是一個個箭頭,有很多應用都可以在這瀏覽器中直接訪問瀏覽器所提供的API,那麼這樣最終就調到了核心層去獲取音頻視頻,去編解碼通過傳輸去發送,這就是他的整體的一個分層,也就是說分層兩次,一個是應用層一個是核心層。

而我們要講解的WebRTC庫他屬於這個核心層的部分,那如果我們自己去做應用的話,其實也是參考整個瀏覽器它的實現模式,那麼在上層你可以實現一個自己的API,最終是調核心層的C++API,也就是我們通常所說的Native API, 它在內部就會一層層的調下來,最終實現整個音視頻的邏輯.

下面我們看一下核心層,核心層就比較複雜了,它也是按層級來區分的,它分成了四層,第一層是C++ API,也就是說提供給外面的API接口,這些API其實非常的少,我們可以通過查看它的源碼就可以看到,最主要的是PeerConnection,WebRTC最主要的就是P2P進行傳輸,它可以往服務端傳,你也可以認爲服務端是一個端,也是從一個終端到服務端的P2P,在PeerConnection又包括了很多的接口,包括你的傳輸質量,傳輸質量報告,各種統計數據和流都是封裝在PeerConnection裏的,那除了這個連接之外,還可以有設備管理,音視頻數據的採集,還有我們普通的非音視頻數據傳輸,基本上就分成這幾大類API就可以了。

通過這一點就可以看出wenrtc這一點設計的非常好,很有技巧,對上層來說,你提供的API越簡單,那麼對應用層來說它就比較方便,這樣對它的開發就降低了難度,那麼對於內部來說它就比較複雜了,上面我們說了第一層,那麼第二層是Session層,Session management / Abstract signaling,也就是上下文管理層,包括你創建了音頻,創建了視頻,還有非音視頻的數據傳輸,那都可以在Session層去做處理,也就是說這一層去管理相關的邏輯,那這一層也不是很重。

最重的是第三層,第三層有包括了音頻引擎,視頻引擎,還有傳輸,那音頻引擎裏面又包括了一堆,稍後我們看一下。

最後一層是與硬件相關的,包括了音頻的採集與渲染 ,視頻的採集,這裏需要注意的一點在WEBRTC庫裏核心層是沒有視頻的渲染的,那麼所有的渲染都需要應用層或者瀏覽器層自己去做;那麼最後一個是網絡 I/O。

下面有個說明,所有劃虛線的,都是可以可重載的,這樣增加了它更大的靈活度,也就是說當你不需要Webrtc這些引擎庫的時候,可以自己實現一個模塊代替它,所以瀏覽器一般都是自己實現了一套,比如chrome,它會使用自己的音頻採集與渲染,視頻採集與渲染,I/O當然也可以自己做,那麼一般情況下還是用的WebRTC自己的這個網絡I /O,通過這四層我們就可以瞭解到這個WebRTC包括了哪些東西。

那麼最後我們再來看一下其中的第三層,最複雜的這一層都做了哪些事情,那它這樣的設計,它首先將視頻、音頻、還有傳輸分開這個設計就特別好,我傳輸的時候我只關心我的傳輸而不需要了解其他的業務邏輯 ,而音頻和視頻 顯然又應該分開,那音頻走音頻相關的邏輯,視頻走視頻相關的邏輯,那這裏涉及到一個東西就是音頻與視頻的同步,實際上視頻與音頻的同步不是在它的引擎層所做的。

那對與音頻來說,它首先是包括了編解碼,它這裏列舉了iSAC/iLBC Codec,另外呢 就是NetEQ,這是一個音頻緩衝的buffer,用於做網絡適配的,防止抖動,那麼這裏面涉及到很多算法,這塊都是放在NetEQ裏面,在接下來就是大家頭疼的一下處理,包括迴音消除等,這是大家最頭疼的,我們在開發的時候迴音消除是非常關鍵的一個點,如果你做不好的話,大家會覺得你這個質量很差,但是如果你想做好迴音消除,確實好花不少的功夫。當然WebRTC裏面它提供了非常成熟的迴音消除的算法,那我們需要做的就是調一些參數,在後面我會給大家講解怎麼處理這種迴音消除和降噪自動增益、機型檢測等等。這些都是在音頻模塊裏做的。

我們再來看視頻引擎,視頻引擎此前推出的是VP  8,VP 9,包括現在最新的AV one也是谷歌聯合其他公司一起研究的新的編解碼器,還有 H264現在也支持了,open H264,XH 264在官方的WEBrtc裏面是不支持的,如果想支持的話,可以按照open H264的模式去添加進去,這是視頻的編解碼器。對於視頻也有相關的buffer,防止視頻抖動,這塊是 與傳輸相關的。還包括圖像的處理和圖像增強,但是WebRTC的圖像增加相對來說做的比較薄,它把相應的接口也留出來了,如果你想做類似美顏、貼圖等等這些操作的話,也可以在相應的裏面實現,它接口已經提供出來了,你還可以做人臉識別,這些東西都可以加進去,非常的靈活,這是視頻引擎方面。

最後是傳輸,傳輸底層用的是UDP,在上層用的是RTP,由於瀏覽器的關係,瀏覽器需要非常安全的傳輸,所以有這個SRTP,安全加密後的RTP,爲了控制整個流,還有RTPCP,可以把相應的接收和發送的數據報告發給對方,那麼對方就可以做留庫,Multiplexing可以多個流複用一個通道,下面是P2P相關的,這個包括了STUN TURN ICE,主要就是P2P的一套協議了。

通過這個整體的架構圖,大家會對WebRTC 有個初步的瞭解 ,那他最核心的部分就是這個第三層,包括音頻引擎、視頻引擎和傳輸,所有音頻、視頻的接收與發送都是通過傳輸去做的,那在傳輸層包括了線路的檢測,有沒有丟包 ,網絡抖動如何等,通過這些計算去估算你的網絡帶寬,根據你的網絡帶寬然後進行音視頻的傳輸,當然不僅僅是音頻與視頻的傳輸,還有非音視頻數據,或者文件、文本、文字、二進制數據,比方說我們玩遊戲的時候可以傳輸二進制數據,那都可以通過傳輸層去傳輸數據 。對於音頻視頻的傳輸,他可以通過接口去調用傳輸層的接口然後進行傳輸,通過這樣一個講解,大家就會明白,WebRTC他是按照一個分層設計,在底層又劃分了各個模塊,音頻模塊、視頻模塊 和傳輸模塊,各個模塊之間 又有相互的調用關係,那麼對於上層需要訪問的是WebRTC Native  API層。

以上就是WEBRTC整體結構的粗略介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章