1.4、WebRTC源碼


文章導讀:本篇分析WebRTC的源碼目錄結構以及每個目錄的作用,不想了解的讀者可以跳過,如果你有興趣查閱webrtc源碼,請自行搜索下載,本文的意義:幫助讀者了解webrtc源碼目錄的組成,擴充對webrtc的常識了解。閱讀方式推薦:了解。

   本書目錄 

  正文開始。

  webrtc基於C++開發,所以源碼目錄中都放置C++代碼文件,源碼目錄結構如下。(下列每一個段落都是一個目錄) 

  1、api。該目錄存放了webrtc接口層的代碼,即核心層中的WebRTC C++ API,瀏覽器廠商或者其他軟件開發者可以在此調用或者調整webrtc API。

  2、call。該目錄存放數據流管理邏輯代碼,即主要處理與流數據相關的業務,這里的流數據主要指流媒體。在這里解釋下流媒體,流媒體(streaming media)是指一連串的媒體數據經過壓縮后,在網絡中傳輸,且不要求全部數據傳輸完就可使用的數據類型,如視頻就是典型的一種流媒體,我們只需要緩沖一段就可以播放了,此過程中數據包得以像流水一樣發送。但並不是什么數據類型都可以用這種方式傳輸,比如程序文件,文檔文件,其他二進制文件等,這類文件必須要求所有數據傳輸完才能打開。call代表的是同一個端的流數據的流入流出,怎么來理解呢?比如 A 和 B 進行音視頻通話,在A中會生成一個call,本次通話所有音視頻流都在這個call里,由此可知,在call里管理通話雙方的流數據,可以獲取通話過程中的各種統計數據。同理,B也是如此。如果A再和C通信,那么A中會再次創建一個新call。與一端建立通信都會建立一個call。

   3、video。存放視頻處理相關的業務。如視頻編解碼,視頻數據優化處理等。本目錄就是視頻處理邏輯代碼的總入口。

   4、audio。如同video,只是這里處理的是音頻數據。

  5、common_video。視頻算法相關的代碼,在視頻處理中, 算法是一個大技術內容,所以webrtc單獨把算法的業務分出來。

  6、common_audio。如同common_video,這里存放的是處理的音頻數據的算法文件。

  7、media。多媒體處理相關的邏輯。如判斷處理音頻視頻時什么時候使用編解碼。注意,真正的編解碼代碼沒有放在這里。

  8、logging。存放日志處理的相關代碼。

  9、module。這個目錄就稍微復雜些,里面存放各種子模塊,下面具體分析。

    ①、module/audio_coding。存放了音頻編解碼器相關的代碼,如AAC、iSAC、iLBC等音頻編解碼器。

    ②、module/audio_device。存放了音頻采集和播放相關代碼。

    ③、module/audio_mixer。存放混音相關的代碼,比如音視頻通信時,同時有多個人講話,為了方便傳輸和管理,會把多路聲音混在一起統一傳輸。

    ④、module/audio_processing。存放音頻前處理和后處理的相關代碼,人音頻的降噪、回音消除等。

    ⑤、module/bitrate_controller。存放碼率控制的相關代碼,在音頻中碼率就是比特率,表示的是音頻從模擬信號轉成數字信號之后,單位時間內二進制的數量,碼率越高表示聲音銜接越流暢,當然數據量也越大。

    ⑥、module/congestion_controller。存放流量控制的代碼,在音視頻通信時,為了保護帶寬,需要做流量控制。

    ⑦、module/desktop_capture。存放桌面采集的相關代碼,通過桌面采集的功能可以實現遠程桌面共享。

    ⑧、module/pacing。存放碼流監測以及傳輸平滑處理。每個音視頻流的碼率有高有低,發送的速率不能太高或者太低,需要做折中的處理,使得傳輸數據上更加的平滑。

    ⑨、module/remote_bitrate_estimator。存放遠端碼率評估代碼。通信是雙方相互兼容,本地發送的碼率和遠端能接收的碼率要匹配才能達到較好的通信效果,例如遠端能接收的碼率為50k,本地不能發500k碼率的數據,遠程接收的速率沒這么快,會導致通信的不流暢,於是在傳輸之前,數據發送端會先檢測遠端接收端的情況再發送。

    ⑩、module/rtp_rtcp。存放rtp、rtcp協議相關的代碼,關於這兩個協議在之前的文章中解釋過了,這里不在贅述。

    ⑪、video_capture。存放視頻采集相關的代碼。

    ⑫、video_coding。存放視頻編解碼器相關的代碼,如H264、VP8、VP9等。

    ⑬、video_processing。存放視頻前處理、后處理的相關代碼,如視頻圖像的增強,視頻幀的處理,如果需要添加其他圖像處理功能,可以在該目錄中擴展。

  10、pc。這個目錄存放了了PeerConnection的代碼,即連接邏輯。上一節講webrtc架構時在WebRTC C++ API 層提到過PeerConnection的概念,在這里再講下,在通信前期首先要創建連接對象,即PeerConnection對象,然后通過往該連接對象加入流就可以實現音視頻的通信,至於傳輸的細節都在PeerConnection內完成了。此外還可以通過該對象獲取到傳輸的流信息,傳輸時各種統計數據。在第六章中,我們重點講解PeerConnection應用,配合核心代碼的編寫,助你掌握webrtc。

   11、p2p。p2p就不再解釋了,本目錄下存放所有p2p連接相關的所有邏輯代碼,比較重要的技術如STUN、STURN ,第三章重點講解。

   12、rtc_base。存放基礎代碼目錄,如線程管理操作,鎖管理等跨平台適配代碼。

   13、rtc_tool。這里存放音視頻分析工具的相關代碼。

   14、tool_webrtc。這里存放webrtc測試的相關工具代碼,如網絡模擬測試。

   15、system_wrappers。這里存放了與操作系統相關的代碼,如CPU特性、原則操作等。

  16、stats。存放各種統計相關的代碼,如丟包率統計,抖動時長等。

  17、sdk。存放了Android、IOS層相關的代碼,如音視頻采集、渲染等。方便跨平台開發。

  

  以上就是webrtc源碼的整體目錄結構,了解這些目錄結構及其作用,可以為我們后續修改webrtc功能模塊有非常大的幫助,同時,對webrtc也有了一個全局的認知。

  本節的到這里就結束了,簡單的做下小結,本小節列舉並陳述了webrtc源碼結構, 雖然每個目錄的功能不需要背下來,但需要了解。本篇內容大家可以作為查詢手冊來收藏,咱們學習到webrtc源碼的時候會用到。

  最后,祝各位小伙伴學習愉快。

  

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

上一篇:1.3、WebRTC 架構

下一篇:1.5、Web服務器


免責聲明!

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



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