「WebRTC」最新 WebRTC 源碼目錄結構分析

前言

最近一直在研究 WebRTC源碼,發現目前網上分析WebRTC源碼的資料非常少。隨著Google不斷推進WebRTC標準,WebRTC 程式碼的變化非常大,很多以前的分析文章目前都與最新的程式碼無法對應上了。

所以,我想在分析WebRTC程式碼的過程中,將自己的一些分析心得寫下來分享給大家,這樣即是對自己的一種鞭策,同時也可以幫助那些想入門的同學。

當然,我寫的分析文章不見得十分正確,如有不對的地方還請大家多多指正。

目錄結構分析

api

WebRTC 介面層。包括 DataChannel, MediaStream, SDP相關的介面。各瀏覽器都是通過該介面層調用的 WebRTC。

call

存放的是 WebRTC 「呼叫(Call)」 相關邏輯層的程式碼。

audio

存放音頻網路邏輯層相關的程式碼。音頻數據邏輯上的發送,接收等程式碼。

video

存放影片邏輯層及影片引擎層的相關的程式碼。影片數據邏輯上的發送,接收等程式碼。

影片引擎層就是指如何控制影片採集,處理和編解碼操作的邏輯。

voice_engine

存放音頻引擎程式碼。主要是控制音頻的採集,處理,編解碼的操作。

這個目錄後面可能也會被拿掉。

sdk

存放了 Android 和 IOS 層程式碼。如影片的採集,渲染程式碼都在這裡。

pc

存放一些業務邏輯層的程式碼。如 channel, session等。

common_audio

存放一些音頻的基本演算法。包括環形隊列,博利葉演算法,濾波器等。

common_video

存放了影片演算法相關的常用工具,如libyuv, sps/pps分析器,I420緩衝器等。

modules

這個目錄是 WebRTC 程式碼中最重要的一個目錄。裡面包括了音影片的採集,處理,編解碼器,混音等。

影片的渲染部分已經從這裡刪除了。因為沒有瀏覽器需要用到這裡的渲染程式碼。如果使用Native API 做二次開發,需要自己寫影片渲染相關的程式碼。

modules 目錄下還包括以下幾個子目錄:

audio_coding : 音頻編解碼相關程式碼。

audio_conference_mixer : 會議混音相關程式碼。

audio_device : 音頻採集與音頻播放相關程式碼。

audio_mixer : 混音相關程式碼,這部分是後加的。

audio_processing : 音頻前後處理的相關程式碼。

bitrate_controller : 碼率控制相關程式碼。

congestion_controller : 流控相關的程式碼。

desktop_capture : 桌面採集相關的程式碼。

media_file : 播放媒體文件相關的程式碼。

pacing : 碼率探測相關的程式碼。

remote_bitrate_estimator : 遠端碼率估算相關的程式碼。

rtp_rtcp : rtp/rtcp協議相關程式碼。

video_capture : 影片採集相關的程式碼。

video_coding : 影片編解碼相關的程式碼。

video_processing : 影片前後處理相關的程式碼。

media

存放媒體相關的程式碼。

p2p

p2p相關的程式碼。

rtc_base

存放了一些基礎程式碼。如執行緒,事件,socket等相關的程式碼。

rtc_tools

存放了一些工具程式碼。如影片幀比較,I420轉RGB,影片幀分析。

stats

存放各種數據統計相關的類。

libjingle

網路庫。

system_wrapper

與作業系統相關的程式碼,如 CPU特性,原子操作,讀寫鎖,時鐘等。