webrtc整體架構

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 降低了服務器壓力,同時兼顧跨平臺和安全性,是實時音視頻通信的主流技術方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90526.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺析PCIe 6.0 ATS地址轉換功能

在現代高性能計算和虛擬化系統中,地址轉換(Address Translation)是一個至關重要的機制。隨著 PCIe 設備(如 GPU、網卡、存儲控制器)直接訪問系統內存的能力增強,設備對虛擬內存的訪問需求日益增長。 為了提升性能并確保安全訪問,Address Translation Services(ATS) 應…

【前端】ikun-pptx編輯器前瞻問題二: pptx的壓縮包結構,以及xml正文樹及對應元素介紹

文章目錄PPTX文件本質:一個壓縮包核心文件解析1. 幻燈片內容文件 (ppt/slides/slideX.xml)2. 元素類型解析文本框元素 (p:sp)圖片元素 (p:pic)單位系統開發注意事項參考工具pptx渲染路線圖PPTX文件本質:一個壓縮包 PPTX文件實際上是一個遵循Open XML標準…

分布式任務調度實戰:XXL-JOB與Elastic-Job深度解析

告別傳統定時任務的局限,擁抱分布式調度的強大與靈活 在現代分布式系統中,高效可靠的任務調度已成為系統架構的核心需求。面對傳統方案(如Timer、Quartz)在分布式環境下的不足,開發者急需支持集群調度、故障轉移和可視…

Windows 11下純軟件模擬虛擬機的設備模擬與虛擬化(僅終端和網絡)

Windows 11下用GCC的C代碼實現的虛擬機需要終端輸入/輸出(如串口或虛擬控制臺)和網絡連接,但不需要完整的硬件設備(如磁盤、顯卡、USB 等)。在終端輸入/輸出方面,參考qemu的源代碼,但不調用qemu…

CCF-GESP 等級考試 2025年6月認證Python六級真題解析

1 單選題(每題 2 分,共 30 分)第1題 下列哪一項不是面向對象編程(OOP)的基本特征?( )A. 繼承 (Inheritance) B. 封裝 (Encapsul…

C++中的deque

1. 什么是 Deque? 核心概念: Deque 是 “Double-Ended Queue”(雙端隊列)的縮寫。你可以把它想象成一個可以在兩端(頭部和尾部)高效地進行添加或刪除操作的線性數據結構。關鍵特性: 雙端操作&am…

GNU到底是什么,與Unix和Linux是什么關系

GNU(發音為 /ɡnu?/,類似“革奴”)是一個自由軟件操作系統項目,由理查德斯托曼(Richard Stallman)于1983年發起,目標是創建一個完全由自由軟件組成的類Unix操作系統。它的名字是一個遞歸縮寫&a…

雙指針算法介紹及使用(下)

在上一篇文章中我們已經對雙指針有了一定了解,接下來我們通過題目來對雙指針進行更好的理解。 1. leetcode 202. 快樂數 這道題使用的方法是快慢指針, 比如說一個數X,那么創建兩個變量X1和X2,然后X1每次變化兩次,X2變化…

Elasticsearch整合:Repository+RestClient雙模式查詢優化

Elasticsearch整合:RepositoryRestClient雙模式查詢優化Elasticsearch 雙模式查詢優化:Repository RestClient 整合指南一、架構設計:雙模式協同工作流二、Repository 模式:快速開發最佳實踐2.1 基礎配置2.2 高級特性&#xff1a…

Elasticsearch 高級查詢語法 Query DSL 實戰指南

目錄 1、DSL 概述 1.1 DSL按照查詢的結構層次劃分 1.2 DSL按照檢索功能的用途和特性劃分 1.3 示例數據準備 2、match_all ——匹配所有文檔 3、精確匹配 3.1 term——單字段精確匹配查詢 3.2 terms——多值精確匹配 3.3 range——范圍查詢 3.4 exists——是否存在查詢…

DNS 服務正反向解析與 Web 集成實戰:從配置到驗證全流程

DNS 服務正反向解析配置全流程指南 一、前言 在網絡環境中,DNS(Domain Name System)服務起著至關重要的作用,它負責將域名解析為 IP 地址,以及將 IP 地址反向解析為域名。本文將詳細介紹如何配置 DNS 服務的正反向解析…

2025.07.25【宏基因組】|PathoScope 安裝與使用指南

PathoScope 安裝與使用指南:微生物組數據分析利器 作為一名生物信息工程師,在微生物組數據分析中,我們常常需要高效、準確的工具來鑒定和量化樣本中的微生物組成。PathoScope 正是這樣一款強大的工具,它能夠幫助我們從高通量測序…

AI結對編程:分布式團隊的集體記憶外腦

AI結對編程:分布式團隊的集體記憶外腦 “當新人通過AI瞬間掌握三年積累的業務規則時,傳統‘傳幫帶’模式正式宣告過時——分布式團隊最珍貴的資產不再是代碼,而是被AI固化的集體經驗。” 一、人腦的帶寬困局 柏林新人加入新加坡支付團隊,面臨恐怖的知識迷宮: - …

棧----1.有效的括號

20. 有效的括號 - 力扣(LeetCode) /** 括號特性: 左括號必定先出現,每個左括號都需要一個右括號與之匹配,后出現的左括號先匹配 解法: 依據后出現的左括號先匹配,很容易聯想到棧,即后進先出 遍歷字符串,遇到左括號就在棧中添加一個對應的右括號 遇到右括…

數據報表怎么自動填寫內容?總結了幾個方法

你有沒有遇到過這種情況?月底趕銷售報告,Excel里密密麻麻的數據要往Word里搬,光是復制粘貼就折騰半小時,好不容易搞完,老板突然說數據有更新…得,全白干!更崩潰的是,這種重復勞動每個…

構造函數是否可以聲明成虛函數?

構造函數(constructor)不能被聲明為虛函數。? 原因解釋 構造函數的主要職責是創建并初始化對象本身,而虛函數機制是基于 虛表指針(vptr) 的,它只有在對象構造完成之后才會起作用。 所以: 在構造…

【Rust線程池】如何構建Rust線程池、Rayon線程池用法詳細解析

?? 歡迎大家來到景天科技苑?? 🎈🎈 養成好習慣,先贊后看哦~🎈🎈 🏆 作者簡介:景天科技苑 🏆《頭銜》:大廠架構師,華為云開發者社區專家博主,…

CAN總線網絡的參數協同:從一致性要求到容差邊界

CAN總線網絡的參數協同:從一致性要求到容差邊界 一、引言:CAN總線的“隱形契約”二、CAN通信的核心參數:不止于波特率三、參數一致性的必要性:為何波特率相同仍會失敗?四、容差范圍的科學界定:從理論計算到…

Activity 啟動模式

如何指定 Activity 的啟動模式&#xff1f;在 AndroidMainfest.xml 中通過給 <activity> 標簽指定 android:lauchMode 來選擇啟動模式。4種啟動模式standard&#xff08;默認&#xff09;&#xff1a;每當啟動一個 Activity&#xff0c;都會創建一個新的實例壓入返回棧。…

7·22勝算云AI日報:OpenAI再擴容且與英國政府簽訂三年AI計劃、字節GR-3、微軟Culture計劃、國數局數據基地

OpenAI Oracle&#xff1a;4.5 GW「Stargate II」再擴容&#xff0c;AI 電力版圖重排 7 月 22 日&#xff0c;OpenAI 與 Oracle 聯合公布“Stargate II”計劃&#xff1a;雙方將在美國多地追加 4.5 GW 超算級電力與冷卻配套&#xff0c;使 Stargate 系列園區總規模躍升至 5 GW…