整體架構
上圖中分爲2層:應用層、核心層
- 最核心的是綠色的部分,是WebRTC提供的核心功能。
- 紫色部分是瀏覽器提供的js API層。[即瀏覽器對WebRTC核心層的C++做了封裝]
WebRTC庫屬於核心層(綠色部分)。
核心層比較複雜:分爲4層:
- C++ API: 提供給外邊的API接口(主要是對等連接PeerConnection)
- Session上下文管理層:管理相關的邏輯
- 引擎層:音頻引擎(編解碼、音頻緩衝buffer防止抖動、迴音消除)、視頻引擎(圖形處理增強、防抖動、人臉識別等)、傳輸(底層是UDP,上層RTP,安全傳輸SRTP、多個流的通道複用、P2P協議、線路的檢測估算網絡帶寬等、音視頻非音視頻的傳輸)。【音頻和視頻的同步不是在引擎層做的】
- 與硬件相關:音頻的採集的渲染、視頻的採集(無視頻的渲染,需要瀏覽器/應用層自己去做)、網絡IO
目錄結構
需要掌握的目錄結構:
1.源碼目錄:
2. Modules目錄:
運行機制
1.軌與流:
- Track軌: 一路音頻是一路軌,一路視頻也是一路軌。2條軌之間永遠不相交。單獨存放。
- MediaStream流:包括音頻軌、字幕軌等。
2. WebRTC中重要的類:
- MediaStream
- RTCPeerConnection
- RTCDataChannel
3.PeerConnection調用過程:
4.調用時序: