webRTC介紹與運行機制
webRTC是 Google在2011年開源的跨平臺的音視頻引擎,可用於瀏覽器,提供簡單的javascript就可以達到實時通訊。提供了視頻會議的核心技術,包括音視頻的採集、編解碼、網絡傳輸、顯示等功能,並且還支持跨平臺:windows,linux,mac,android。
可應用於遊戲、即時通訊、文件傳輸等領域,對音視頻處理有完整的解決方案,如迴音消除、降噪等。
目錄結構
紫色區域爲應用層,爲web開發者接口API
綠色區域爲核心層,分爲四層
1)提供C++API(peerconection)
2)session層,上下文管理層,包括音視頻,非音視頻信息處理
3)音頻引擎:包括編解碼器、音頻緩衝buffer,用於適配、迴音消除、降噪,靜音檢測
視頻引擎:包括編解碼器,視頻緩衝buffer,圖像增強
傳輸:SRTP、RTCP、複用、P2P等
4)音頻採集、視頻採集、網絡IO,虛線代表可重載,可以自己實現模塊代替它
webRTC源碼目錄結構
目錄 | 功能 |
---|---|
api | WebRTC接口層,瀏覽器都是通過該接口調用webRTC |
call | 數據流等管理層、call代表同一斷點等所有數據的流入流出 |
video | 與視頻相關的邏輯 |
audio | 與音頻相關的邏輯 |
common_audio | |
common_video | 視頻算法相關 |
media | 與多媒體相關的邏輯,如編解碼的邏輯處理 |
logging | 日誌相關 |
module | 最重要的目錄,子模塊 |
pc | peerconnection,連接相關的邏輯層 |
P2P | 端對端相關代碼,stun,turn |
rtc_base | 基礎代碼,如線程、鎖相關的統一接口代碼 |
rtc_tool | 音視頻分析相關的工具代碼 |
tool_webrtc | webRTC測試相關的代碼,如網絡模擬器 |
system_wrappers | 與具體操作系統相關的,如CPU特性,原子操作等 |
stats | 存放各種數據統計相關的類 |
sdk | 存放Android和IOS層代碼,如視頻採集,渲染等 |
webRTC modules目錄結構
目錄 | 功能 |
---|---|
audio_coding | 音視頻編輯嗎相關代碼 |
audio_device | 音頻採集與音頻播放相關代碼 |
audio_mixer | 混音相關代碼 |
audio_processing | 音頻前後處理的相關代碼,如迴音消除,降噪等 |
bitrate_controller | 碼率控制相關代碼 |
congestion_controller | 流控相關代碼 |
desktop_capture | 桌面採集相關的代碼 |
pacing | 碼率探測及平滑處理相關的代碼 |
remote_bitrate_estimator | 遠端碼率估算相關的代碼 |
rtp_rtcp | rtp/rtcp協議相關代碼 |
video_capture | 視頻採集相關的代碼 |
video_coding | 視頻編輯嗎相關的代碼 |
video_processing | 視頻前後處理相關的代碼 |
webRTC運行機制
1.Peerconnection調用過程的步驟
1)內部有兩個線程worker thread和signaling thread
2)創建工廠PeerConnectionFactoryInterface
3)創建音視頻軌
4)通過AddTrack創建音視頻流
5)通過AddStream創建PeerConnectionInterace
6)最後通過Observer輸出
2.調用時序圖
1)應用層觸發creatPeerconnectionFactory創建工廠
2)通過CreatPeerConnection創建連接,創建流和視頻軌
3)通過Addstream添加到連接中
4)當流發生變化會觸發一個信息offer發送到信令
5)信令收到answer後傳給連接
6)連接拿到媒體信息建立通道
7)連接將遠端的流發送到APP中去