天天看點

二 、第一節 WebRTC架構.mp4

WEBRTC整體架構

二 、第一節 WebRTC架構.mp4

我們可以簡單的将這張圖分成兩大部分,最核心的是綠色部分,這是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的圖像增加相對來說做的比較薄,它把相應的接口也留出來了,如果你想做類似美顔、貼圖等等這些操作的話,也可以在相應的裡面實作,它接口已經提供出來了,你還可以做人臉識别,這些東西都可以加進去,非常的靈活,這是視訊引擎方面。

繼續閱讀