二、第二節 WebRTC源碼目錄結構

今天我們來介紹一些WebRTC的目錄結構,大家都知道WebRTC的代碼量是非常大的,所以它裏面的目錄也特別多,那麼我們下面介紹的這些目錄是大家每個人都應該要掌握的,在我們後面的學習中很有可能就修改WebRTC的代碼,你要修改WebRtc的代碼,你要知道它每個目錄的功能及作用是什麼,當你想改那塊邏輯的時候你可以直接定位到哪個目錄下相應的文件進行修改了,那麼如果你不清楚這個目錄結構的話,就非常困難,這代碼量那麼大,你要一個個去查找,那就非常的費勁。

接下來就一個個來看這些 目錄 到底起什麼作用。

WebRTC源碼目錄結構
目錄 功能
api WebRTC接口層,瀏覽器都是通過該接口調用WebRTC
call 數據流的 管理層,Call代表同一個端點的所有數據的流入流出
video 與視頻相關的邏輯
audio 與音頻相關的邏輯
common_audio 音頻算法相關
common_video 視頻算法相關
media 與多媒體相關的邏輯處理,如編解碼的邏輯處理
logging 日誌相關
module 最重要的目錄,子模塊 

 

 

 

 

 

 

 

 

WebRTC源碼目錄結構(二)
目錄 功能
pc Peer Connection,連接相關的邏輯層
p2p 端對端相關的代碼,syun,turn
rtc_base 基礎代碼 ,如線程、鎖相關的統一接口代碼
rtc_tool 音視頻分析相關的工具代碼
tool_webrtc WebRTC測試相關的工具,如網絡模擬器
system_wrappers 與具體操作系統相關的代碼。如CPU特性,原子操作等
stats 存放各種數據統計相關的類
sdk 存放Android和IOS層代碼。如視頻的採集,渲染等

 

 

 

 

 

 

 

 

 

 

首先是API這個 目錄,API這個顧名思義大家都能一下子猜出來,就是WebRTC的接口層,像瀏覽器也好,像我們自己寫的應用程序也好,我們大多數情況下要調用的這些API是直接從WebRTC通過的這些API調用。但是如果我沒想增加接口,或者是調整這個接口就要到API這個目錄找相應的文件。

第二個是call這個目錄,call這個目錄可能大家比較難以理解,其實也不是很困難,它主要就是對數據流的管理,音頻流、視頻流當我這一端進行連接之後,同一個端的這些流的管理就是通過call進行管理,所以呢,就建立了call這樣一個目錄,它代表的就是同一個端的流入和流出。但是如果我與多個端進行溝通,就有多個call。

第三個是video,video就是與視頻相關的邏輯,視頻的處理,視頻的編解碼等等,一個總的入口點。
第四個是audio, audio就是與音頻的相關邏輯和處理。

下面的兩個common_audio和commin_video,它們的作用就是與算法相關的,那麼拆出來就是與音頻的算法相關就在common_audio裏面,視頻的算法放在common_video裏面。如果你想解決算法相關的,那麼就去這兩個目錄裏面去找。

那麼再接下來就是media,media也很好理解,其實就是和多媒體相關的處理,像編解碼的邏輯,什麼時候進行編碼什麼時候進行解碼,那麼這些就是在media這個目錄下,所以你要解決編解碼以及解碼後要做哪些處理,你需要從media這個目錄進行查找。

再接下來是logging,就是日誌相關了,一般改的很少,比較單一。

那麼這裏最重要的是module,module這個模塊就特別大,module裏面有很多子模塊,每個子模塊都非常重要 ,我會給大家做詳細的介紹。我們首先只需要知道module這個目錄特別重要就好了。

那麼再接下來就是pc,pc的含義就是Peer Connection,在此之前已經給大家介紹了,Peer Connection就代表的是一個連接,如我與對端的一個連接,在整個上層有這個連接的概念。那在這個連接下面就有很多東西了,比如Strem流 ,track軌,一個流裏面可以包含很多軌,包括音頻軌和視頻軌已經桌面軌等等,那麼軌道的概念大家應該也有所瞭解了,兩個平行的線就是兩個軌道,它們永遠是不相交的,就是這樣一個概念,音頻與視頻永遠不會交叉的,它們都是單獨存儲的。那麼通過Peer Connection你能拿到流,能拿到每一個多媒體,也就是音頻、視頻,你還可以拿到媒體流的統計信息,傳輸的統計信息等等,那麼Peer Connection就是非常重要的一個目錄。是上層相當於統一的一個接口層。

那麼再下面是p2p,端對端進行傳輸的時候要看p2p是不是能打通,p2p有很多類型 ,後面會介紹到。你是哪種類型,這種類型能不能打通,相應的偵測工具等都是放在p2p這個目錄下,相應的stun協議、turn協議等也是放在p2p這個目錄下的。

那在下來就是rtc_base,那麼這個base大家也能一目瞭然的瞭解,一些基礎的東西,比如 我們用到的鎖用到的線程 ,這些實際在,因爲他是跨平臺的,在不同的平臺下 ,尤其是window和Linux它使用的函數差別特別大。那麼怎麼辦,寫的時候對於我的上層的邏輯的話根據平臺去做處理, 它統一去做一層目錄。

再下面是rtc_tool,rtc_tool包含一些工具,主要是音頻視頻的分析工具,比如我多H264進行分析,有這個i幀、P幀、B幀包括一些更細一些的NL頭都可以再rtc_tool找到相應的工具。

下面還有個工具叫做tool_webrtc,它就是測試相關的工具,一些單元測試,以及各種的網絡測試,還有音頻、視頻的測試,都是在這個tool_webrtc裏面,這裏主要是整個webrtc的策略是在這個tool_webrtc裏面。

在接下來是system_wrappers,這個大家比較好理解了,就是根據具體的平臺相關的,你的CPU、原子操作,具體的鎖等等,那是放在system_wrappers裏面。window形成 一個文件,linux形成一個文件。

在接下來的是stats是各種統計數據相關的類,比如我的丟包率,抖動時常等功能,這是各種統計信息。

在下面 是sdk主要是存放Android和IOS的代碼層,包括音頻的採集,音頻的渲染,都是放在SDK這個目錄裏面。

以上就是WebRTC最外層的目錄結構。

——————————————————————————————————————————————

下面我們在來看一下module這個目錄下,都有哪些目錄,在module這個目錄下有很多子目錄,我們來認識一下

第一個是audio_coding,剛纔我們在說到audio目錄的時候,那是和編解碼邏輯相關的,會用編解碼,這裏的audio_coding它是編解碼器,都是放在audio_coding這個目錄下。

在下面的 是audio_device它是和設備相關的,它做了一個區分,安卓和IOS放在sdk下面了,它相應的一些代碼移到sdk裏面了,在以前的webrtc版本 ,所有的設備都是 放在audio_device裏面 ,包括我們的windows和MAC下的以及Linux下的,都是在audio_device這個目錄下。

在下來是audio_mixer,就是混音相關的,混音就好比開會時多人實時互動,比如四個人同時在說話,就要給它混在一起,這樣在傳輸的時候就比較方便,這個減少了音頻流,所以這個混音相關的就放在audio_mixer裏面。這個我們後續還會做詳細的介紹 。

在下面是audio_processing就是音頻的前處理後處理,音頻的前處理後處理就好比迴音消除、降噪、增益等,都是放在audio_processing裏面。這個目錄裏面又分了很多子目錄,在後面你就 大體的知道這個相關的在這個目錄下。以及在這個目錄下再找子目錄。

下一個是bitrate_controller,這個是碼流控制的,比如說控制這個碼流,視頻的碼流是500k還是1M。這個碼流的控制。如果想知道相關的碼流他是怎麼控制的 ,那麼可以到這裏去看。

下面是congestion_controller,就是流量控制,當我能檢測到網絡流量比較高的時候,我們要做一些流量控制,防止這個網絡包將帶寬打死,具體怎麼控制就是在這裏做的相關的邏輯。所以如果我要 瞭解流量控制相關的,就到這個目錄下面去找。

在接下來是桌面採集相關的,desktop_capture,這是比較好理解的。

在接下來

pacing的作用是碼率的偵測和平滑處理,我首先要檢測到音頻視頻的碼率是怎樣的,做到之後我們要做到一個平滑的處理,我們不能讓他一下子就發送出去,應該對他做一下平滑,比如有時候是10k有時候是500k,我們讓他平均一下。

再下來是remote_bitrate_estimator的作用是遠程碼率評估,我遠端能接收的帶寬是多少,一個是我本地的帶寬,一個是遠端的帶寬,不光我能發多少還有對方能收多少,所以要有一個遠端的碼率的評估,這是放在remote_bitrate_estimator目錄下。

在下來是rtc_rtcp協議相關的代碼,放在這個目錄下。

在接下來是video_capture我捕獲視頻的相關的代碼,放在video_capture裏面。

在接下來是視頻的編碼,如H264,VP 8,VP 9,等,這個編碼器都是放在video_coding裏面。

接下來是video_processing,就是視頻的前處理和後處理,如視頻幀的增強,檢測,如果我們增加人臉識別可以放到video_processing這個目錄下。

以上就是WebRTC整個目錄的介紹,瞭解了目錄之後,對於我們瞭解WEBRTC代碼、修改它的邏輯、去增加一些功能,是有非常大的幫助的,所以大家要對這些目錄多看多瞭解,讓他熟記在你的腦子裏面,這對我們今後的 學習會有 非常大的幫助

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