WebRTC(Web Real-Time Communication)是一套支持瀏覽器和移動應用進行實時音視頻通信的開源技術標準,其架構設計圍繞 “實時性”“低延遲”“跨平臺” 和 “安全性” 展開,整體可分為核心引擎層、API 層、支撐服務層三大部分,各部分協同實現端到端的實時媒體傳輸。是谷歌 2010 年以 6820 萬美元收購 Global IP Solutions 公司而獲得的一項技術。
WebRTC 提供了實時音視頻的核心技術,包括音視頻的采集、編解碼、網絡傳輸、顯示等功能,并且還支持跨平臺:windows,linux,mac,android。
架構簡介:
- 第一層 C++ API:提供給外面的接口,最主要的是(PeerConnedtion 對等連接)
- 第二層 Session:上下文管理層(音視頻)
- 第三層【最重要的部分】
- 音視頻引擎 :編解碼;音頻緩沖 BUFFER 防止音頻網絡抖動 NetEQ;回音消除;降噪;靜音檢測;
- 視頻引擎 :編解碼;jitter buffer 防止視頻網絡抖動;圖像處理增強;
- 傳輸:SRTP 加密后的 RTP;多路復用;P2P(STUN+TURN+ICE)
- 第四層,硬件相關層:音視頻采集;網絡 IO
整體架構
WebRTC是RTC的一部分:
一、核心引擎層(WebRTC Core)
核心引擎是 WebRTC 的底層實現,包含音視頻處理、網絡傳輸、編解碼等核心功能,主要用 C++ 編寫(確保跨平臺和高性能),是實時通信的 “引擎心臟”。
1.1、 媒體引擎(Media Engine)
負責音視頻的采集、處理、編解碼和渲染,分為音頻引擎和視頻引擎。
-
音頻引擎(Audio Engine)
處理所有音頻相關的流程,核心功能包括:- 采集:通過系統 API(如 iOS 的 AVFoundation、Android 的 AudioRecord)捕獲麥克風音頻。
- 預處理:關鍵技術包括:
- 回聲消除(AEC,Acoustic Echo Cancellation):消除揚聲器播放的聲音被麥克風重新采集導致的回聲。
- 噪聲抑制(NS,Noise Suppression):過濾背景噪聲(如鍵盤聲、環境雜音)。
- 自動增益控制(AGC,Automatic Gain Control):平衡不同距離下的音量(避免離麥克風近時聲音過大)。
- 靜音檢測(VAD,Voice Activity Detection):檢測是否有有效語音,節省帶寬。
- 編解碼:支持 OPUS(默認,低延遲、高音質,適合實時通信)、G.711、G.722 等編碼格式,其中 OPUS 在窄帶(8kHz)到寬帶(48kHz)下均有優異表現。
- 混音:多人通話時將多路音頻混合為一路(客戶端或服務器端實現)。
-
視頻引擎(Video Engine)
處理視頻的采集、處理、編解碼和渲染,核心功能包括:- 采集:通過系統 API(如 iOS 的 AVCaptureSession、Android 的 Camera2)捕獲攝像頭畫面或屏幕內容(屏幕共享)。
- 預處理:
- 自動曝光、自動對焦(基于硬件能力)。
- 美顏、濾鏡(可選,通常由上層應用實現)。
- 分辨率 / 幀率調整(根據網絡狀況動態適配)。
- 編解碼:支持 VP8(開源,默認)、VP9(更高壓縮率,適合 4K)、H.264(與傳統設備兼容性好)、H.265(HEVC,高分辨率下帶寬更優)等,編碼決策會根據網絡帶寬動態調整(如丟包時降低碼率)。
- 傳輸優化:
- 抖動緩沖(Jitter Buffer):接收端緩存一定量視頻幀,解決網絡抖動導致的播放卡頓。
- 丟包補償(FEC,Forward Error Correction):發送冗余數據,接收端可恢復部分丟失的幀。
- 重傳機制(NACK,Negative Acknowledgment):對關鍵幀請求重傳(非關鍵幀可能直接丟棄以保證實時性)。
-
渲染:將解碼后的視頻幀通過系統 API(如 iOS 的 Metal、Android 的 OpenGL ES)渲染到屏幕。
1.2、傳輸引擎(Transport Engine)
負責媒體數據(音視頻)和非媒體數據(如文本、文件)的實時傳輸,核心是P2P 連接建立和可靠 / 實時傳輸協議。
- 連接建立:ICE/STUN/TURN
WebRTC 的 P2P 連接依賴 ICE(Interactive Connectivity Establishment,交互式連接建立)框架,解決 NAT(網絡地址轉換)和防火墻導致的端到端連接難題:- STUN(Session Traversal Utilities for NAT):客戶端向 STUN 服務器發送請求,獲取自己在公網中的 IP 和端口(NAT 映射地址),用于生成 “ICE 候選者”(Candidate)。
- TURN(Traversal Using Relays around NAT):當 P2P 連接失敗(如對稱 NAT 環境)時,作為中繼服務器轉發數據(犧牲部分實時性,保證連接可用性)。
- ICE 候選者交換:雙方通過信令服務器交換各自的 ICE 候選者,ICE 框架會測試所有候選者(優先直連,其次中繼),選擇最優連接路徑。
- 媒體傳輸:RTP/RTCP
音視頻數據通過 RTP(Real-time Transport Protocol,實時傳輸協議)傳輸,特點是輕量、低延遲,不保證可靠性(優先實時性):- RTP:封裝媒體數據(如視頻幀、音頻幀),包含時間戳(同步音視頻)、序列號(檢測丟包)等信息。
- RTCP(RTP Control Protocol):與 RTP 配合,傳輸控制信息(如丟包率、帶寬估算),用于發送端動態調整碼率(如網絡變差時降低發送速率)。
- 數據通道:SCTP over DTLS
除了音視頻,WebRTC 還支持通過RTCDataChannel傳輸非媒體數據(如文本消息、文件),底層依賴:- SCTP(Stream Control Transmission Protocol):提供可靠傳輸(保證數據有序、不丟失)和部分可靠傳輸(按需配置),適合不同類型數據(如游戲控制指令需可靠,實時消息可容忍丟失)。
- DTLS(Datagram Transport Layer Security):對 SCTP 和 RTP 數據進行加密(基于 TLS 1.3),確保傳輸安全性。
1.3、 會話管理(Session Management)
負責兩端媒體能力協商和會話描述,核心是SDP 協議:
SDP(Session Description Protocol):一種文本格式,用于描述本地媒體能力(如支持的編解碼器、分辨率、IP / 端口等)。
協商流程:雙方通過信令服務器交換 SDP(本地發送 “offer”,對方回復 “answer”),最終確定共同支持的媒體參數(如編解碼器、傳輸端口),建立媒體會話。
二、API 層(WebRTC APIs)
為了方便開發者集成,WebRTC 提供了跨平臺的 API,屏蔽底層復雜邏輯。
2.1、瀏覽器 API(JavaScript)
WebRTC 標準化的瀏覽器 API,主要包括:
getUserMedia():訪問用戶攝像頭和麥克風,獲取本地媒體流(MediaStream)。
RTCPeerConnection:核心 API,負責創建 P2P 連接、處理 ICE 候選者交換、SDP 協商、媒體流傳輸。
RTCDataChannel:創建數據通道,傳輸非媒體數據。
2.2、原生 API(移動應用)
針對 iOS 和 Android 平臺,提供原生語言接口:
iOS:通過GoogleWebRTC庫提供 Objective-C/Swift 接口(如RTCPeerConnection、RTCMediaStream),與系統音視頻框架(AVFoundation)集成。
Android:提供 Java 接口(如PeerConnection、MediaStream),與 Camera、AudioManager 等系統服務交互。
三、支撐服務層(Supporting Services)
WebRTC 本身不包含這些服務,但實際應用中必須依賴它們才能完成通信。
3.1、信令服務器(Signaling Server)
作用:WebRTC 的 P2P 連接需要交換 “信令信息”(SDP、ICE 候選者),但 WebRTC 未定義信令協議,因此需要信令服務器作為中介轉發這些信息。
特點:不參與媒體數據傳輸,僅負責 “牽線搭橋”,可基于 WebSocket、HTTP 等協議實現(如使用 Node.js、Java 搭建)。
3.2、STUN/TURN 服務器
STUN 服務器:幫助客戶端獲取公網 IP 和端口(解決 NAT 映射問題),常用開源實現有coturn、libjingle。
TURN 服務器:在 P2P 連接失敗時作為中繼,轉發媒體數據,確保通信不中斷(需注意帶寬成本)。
3.3、媒體服務器(可選,多人場景)
一對一通信可直接 P2P,但多人場景(如視頻會議)通常需要媒體服務器中轉,實現:
- 媒體混合(將多路視頻合成為一個畫面)。
- 選擇性轉發(只向用戶發送其需要的視頻流)。
- 錄制、轉碼(適配不同設備能力)。
- 常用開源媒體服務器:Mediasoup、Kurento、Janus。
四、安全層(Security)
WebRTC 強制要求加密傳輸,核心安全機制包括:
DTLS:對所有媒體數據(RTP)和數據通道(SCTP)進行加密,防止竊聽。
證書驗證:SDP 交換時包含證書指紋,確保通信雙方身份合法。
權限控制:訪問攝像頭 / 麥克風需用戶授權(瀏覽器或系統層面)。
五、WebRTC 源碼功能模塊
WebRTC 實現了基于網頁的視頻會議,標準是 WHATWG 協議,目的是通過瀏覽器提供簡單的 javascript 就可以達到實時通訊(Real-Time Communications (RTC))能力。
5.1、視頻相關
① 視頻采集—video_capture
源代碼在 webrtc\modules\video_capture\main 目錄下, 包含接口和各個平臺的源代碼。
在 windows 平臺上,WebRTC 采用的是 dshow 技術,來實現枚舉視頻的設備信息和視頻數據的采集,這意味著可以支持大多數的視頻采集設備;對那些需要單獨驅動程序的視頻采集卡(比如海康高清卡)就無能為力了。
視頻采集支持多種媒體類型,比如 I420、YUY2、RGB、UYUY 等,并可以進行幀大小和幀率控制。
② 視頻編解碼—video_coding
源代碼在 webrtc\modules\video_coding 目錄下。
WebRTC 采用 I420/VP8 編解碼技術。VP8 是 google 收購 ON2 后的開源實現,并且也用在 WebM 項目中。VP8 能以更少的數據提供更高質量的視頻,特別適合視頻會議這樣的需求。
③ 視頻加密—video_engine_encryption
視頻加密是 WebRTC 的 video_engine 一部分,相當于視頻應用層面的功能,給點對點的視頻雙方提供了數據上的安全保證,可以防止在 Web 上視頻數據的泄漏。
視頻加密在發送端和接收端進行加解密視頻數據,密鑰由視頻雙方協商,代價是會影響視頻數據處理的性能;也可以不使用視頻加密功能,這樣在性能上會好些。
④ 視頻媒體文件—media_file
源代碼在 webrtc\modules\media_file 目錄下。
該功能是可以用本地文件作為視頻源,有點類似虛擬攝像頭的功能;支持的格式有 Avi,另外 WebRTC 還可以錄制音視頻到本地文件,比較實用的功能。
⑤ 視頻圖像處理—video_processing
源代碼在 webrtc\modules\video_processing 目錄下。
視頻圖像處理針對每一幀的圖像進行處理,包括明暗度檢測、顏色增強、降噪處理等功能,用來提升視頻質量。
⑥ 視頻顯示—video_render
源代碼在 webrtc\modules\video_render 目錄下。
在 windows 平臺,WebRTC 采用 direct3d9 和 directdraw 的方式來顯示視頻,只能這樣,必須這樣。
⑦ 網絡傳輸與流控
對于網絡視頻來講,數據的傳輸與控制是核心價值。WebRTC 采用的是成熟的 RTP/RTCP 技術。
5.2、音頻相關
WebRTC 的音頻部分,包含設備、編解碼(iLIBC/iSAC/G722/PCM16/RED/AVT、 NetEQ)、加密、聲音文件、聲音處理、聲音輸出、音量控制、音視頻同步、網絡傳輸與流控(RTP/RTCP)等功能。
① 音頻設備—audio_device
源代碼在 webrtc\modules\audio_device\main 目錄下, 包含接口和各個平臺的源代碼。
在 windows 平臺上,WebRTC 采用的是 Windows Core Audio 和 Windows Wave 技術來管理音頻設備,還提供了一個混音管理器。
利用音頻設備,可以實現聲音輸出,音量控制等功能。
② 音頻編解碼—audio_coding
源代碼在 webrtc\modules\audio_coding 目錄下。
WebRTC 采用 iLIBC/iSAC/G722/PCM16/RED/AVT 編解碼技術。
WebRTC 還提供 NetEQ 功能—抖動緩沖器及丟包補償模塊,能夠提高音質,并把延遲減至最小。
另外一個核心功能是基于語音會議的混音處理。
③ 聲音加密—voice_engine_encryption
和視頻一樣, WebRTC 也提供聲音加密功能。
④ 聲音文件
該功能是可以用本地文件作為音頻源,支持的格式有 Pcm 和 Wav。
同樣,WebRTC 也可以錄制音頻到本地文件。
⑤ 聲音處理—audio_processing
源代碼在 webrtc\modules\audio_processing 目錄下。
聲音處理針對音頻數據進行處理,包括回聲消除(AEC)、AECM(AEC Mobile)、自動增益(AGC)、降噪(NS)、靜音檢測(VAD)處理等功能, 用來提升聲音質量。
⑥ 網絡傳輸與流控
和視頻一樣,WebRTC 采用的是成熟的 RTP/RTCP 技術。
總結:WebRTC 架構協同流程
媒體采集:客戶端通過 API(如 getUserMedia)采集本地音視頻,經媒體引擎預處理。
信令交換:雙方通過信令服務器交換 SDP(媒體能力)和 ICE 候選者(網絡地址)。
P2P 連接:ICE 框架基于候選者建立最優連接(優先直連,失敗則用 TURN 中繼)。
媒體傳輸:音視頻通過 RTP 實時傳輸,RTCP 動態調整質量;數據通過 RTCDataChannel 傳輸。
渲染播放:接收端解碼后渲染音視頻,完成實時通信。
這套架構既保證了實時性(低延遲),又通過 P2P 降低了服務器壓力,同時兼顧跨平臺和安全性,是實時音視頻通信的主流技術方案。