WebRTC(一):整體架構

架構總覽

在這里插入圖片描述

模塊劃分

媒體采集模塊

  • 使用瀏覽器 API:getUserMedia()
  • 采集攝像頭(video)、麥克風(audio)。
  • 通過 MediaStreamTrack 管理單軌道。

媒體處理與編解碼

  • 編碼器(發送端):
    • 音頻:Opus、G.711。
    • 視頻:VP8、VP9、H.264、AV1。
  • 解碼器(接收端):
    • 支持上述編解碼格式。
  • 其他處理:
    • AEC(回聲消除)、AGC(自動增益)、NS(降噪)等。

RTCPeerConnection 連接管理

核心對象:RTCPeerConnection

  • 管理媒體軌道、協商 SDP、控制網絡連接。
  • 與遠端建立加密媒體通道。
  • 支持 addTrack() / addTransceiver() 管理軌道。

傳輸與安全模塊

協議棧(底層網絡):

協議作用
ICENAT 穿透候選路徑收集和選擇
STUN獲取公網地址,打洞
TURN中繼服務器
DTLS建立加密通道
SRTP安全傳輸媒體流
SCTP數據通道的基礎協議

媒體傳輸:

  • 使用 RTP/RTCP 發送音視頻流。
  • 支持 NACK、PLI、FEC、REMB、TCC 等反饋機制提升媒體質量。

數據通道(RTCDataChannel)

  • 基于 SCTP over DTLS over ICE 實現。
  • 用于傳輸非媒體數據,類似 WebSocket,但具備 P2P 優勢。

信令機制(自定義實現)

WebRTC 不定義信令協議,常用方案:

  • WebSocket
  • HTTP POST/REST
  • MQTT

信令交換內容包括:

  • SDP(Session Description Protocol):音視頻能力協商。
  • ICE Candidate:網絡地址候選信息。
                        +----------------------+|    JavaScript 應用層  |+----------------------+|        |        |+----------+        |        +------------------+|                   |                           |+------------------+  +----------------+         +------------------+| getUserMedia()   |  | PeerConnection | <-----> |  DataChannel     |+------------------+  +----------------+         +------------------+|                   |+------+-------------------+-------+|      |           |              |
+-------------+ +----------------+ +--------------+
| 音視頻采集  | | 編碼/解碼      | | 傳輸協議棧   |
+-------------+ +----------------+ +--------------+| STUN/TURN/ICE || DTLS/SRTP/SCTP|

通信流程

[用戶A]                                    [用戶B]|                                           || getUserMedia()                            || 采集本地音視頻                              ||                                           || createOffer()                             || setLocalDescription(offer)                ||------------------>  信令服務器  ------------------->||                                setRemoteDescription(offer)|                                createAnswer()|                                setLocalDescription(answer)|<------------------  信令服務器  <-------------------|| setRemoteDescription(answer)                        ||                                           || ICE candidate gathering and exchange      ||<------------------->STUN/TURN<------------------>||                                           ||       DTLS 握手,SRTP 密鑰協商              ||                                           ||       媒體傳輸(RTP+ 控制(RTCP||<=========================================>|

服務端組件架構

雖然 WebRTC 是 P2P,但實際場景常常需要以下服務器支撐:

組件作用常見實現
Signaling Server交換 SDP 和 ICE 信息Node.js + WebSocket、Socket.io
STUN Server提供公網地址探測Google STUN、Coturn
TURN Server中繼數據(P2P 失敗時)Coturn
SFU(選擇轉發)多人通話中只轉發媒體流mediasoup、Janus、Jitsi
MCU(混合轉發)多人通話中混合為一路流Kurento、Jitsi MCU

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

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

相關文章

商品中心—1.B端建品和C端緩存的技術文檔二

大綱 1.商品中心的專業術語 2.商品中心的基本業務系統 3.商品中心整體架構設計以及運行流程 4.商品B端—商品編碼生成邏輯 5.商品B端—商品核心數據模型 6.商品B端—轉換建品請求數據為商品模型數據 7.商品B端—商品建品時商品編號補全與審核配置 8.商品B端—商品審核前…

網絡之交換機

定義與作用 交換機是一種為所連接的IT設備提供網絡通信的設備&#xff0c;主要作用是轉發傳輸數據&#xff0c;實現網絡設備之間的通信互聯&#xff0c;還能對網絡進行分段和隔離&#xff0c;劃分多個虛擬網段&#xff0c;提高網絡安全性&#xff0c;以及對不同端口、用戶和應用…

AI不會殺死創作,但會殺死平庸

作為一個敲了8年Java代碼的普通本科程序員&#xff0c;日常主要泡在會議后臺管理系統的開發里。從2023年底被朋友拽著試了第一把AI工具到現在&#xff0c;電腦手機上的AI軟件比外賣App還多——寫代碼的Copilot、畫時序圖的工具、聊天的ChatGPT、Deepseek&#xff0c;基本市面上…

Golang——8、協程和管道

協程和管道 1、協程1.1、進程、線程和協程1.2、goroutine的使用以及sync.WaitGroup1.3、啟動多個協程1.4、設置Golang并行運行的時候占用的cup數量1.5、goroutine統計素數 2、管道2.1、管道的操作2.2、協程和管道協同2.3、單向管道2.4、多路復用之select2.5、解決協程中出現的異…

深入理解Python內置模塊及第三方庫的使用與管理

Python 內置模塊與第三方庫 在 Python 編程中&#xff0c;模塊和庫是幫助開發者高效實現各種功能的基礎工具。Python 提供了豐富的內置模塊以及第三方庫&#xff0c;能夠支持從基礎的文件操作到復雜的數據分析和機器學習等任務。本篇文章將深入介紹 Python 的內置模塊與第三方…

二分查找-P2249 【深基13.例1】查找

文章目錄 參考代碼二分標準模板 題目來源-洛谷網 參考代碼 #include<bits/stdc.h> using namespace std; const int N 1e65; int m,n,a[N],b; int find(int t) {int l1,rn;while(l<r){int mid(lr)/2;//防止溢出 mid l (r-l) /2 ;if(a[mid]>t) rmid;//中間值比…

手寫muduo網絡庫(一):項目構建和時間戳、日志庫

引言 本文作為手寫 muduo 網絡庫系列開篇&#xff0c;聚焦項目基礎框架搭建與核心基礎工具模塊設計。通過解析 CMake 工程結構設計、目錄規劃原則&#xff0c;結合時間戳與日志系統的架構&#xff0c;為后續網絡庫開發奠定工程化基礎。文中附完整 CMake 配置示例及模塊代碼。 …

NLP學習路線圖(三十二): 模型壓縮與優化

一、 核心壓縮與優化技術詳解 1. 知識蒸餾:智慧的傳承(Knowledge Distillation, KD) 核心思想:“師授徒業”。訓練一個龐大、高性能但笨重的“教師模型”(Teacher Model),讓其指導訓練一個輕量級的“學生模型”(Student Model)。學生模型學習模仿教師模型的輸出行為(…

vue前端字典映射

1.界面展示 2.圖中狀態字段接收的數據如下 3.代碼轉換&#xff0c;添加計算屬性代碼 再在綁定屬性的地方做轉換 computed: {statusMap() {return {"-1": "已退號",1: "掛號",2: "接診",3: "已完診",};},},<m-input:spa…

基于 llama-factory進行模型微調

# GLM4-9B-chat Lora 微調. 介紹如何基于 llama-factory 框架&#xff0c;對 glm-4-9b-chat 模型進行 Lora 微調。Lora 是一種高效微調方法&#xff0c;深入了解其原理可參見博客&#xff1a;[知乎|深入淺出 Lora](https://zhuanlan.zhihu.com/p/650197598)。 ## 環境配置 在完…

不到 2 個月,OpenAI 火速用 Rust 重寫 AI 編程工具。尤雨溪也覺得 Rust 香!

一、OpenAI 用 Rust 重寫 Codex CLI OpenAI 已用 Rust 語言重寫了其 AI 命令行編程工具 Codex CLI&#xff0c;理由是此舉能提升性能和安全性&#xff0c;同時避免對 Node.js 的依賴。他們認為 Node.js “可能讓部分用戶感到沮喪或成為使用障礙”。 Codex 是一款實驗性編程代理…

Go 并發編程深度指南

Go 并發編程深度指南 Go 語言以其內置的并發原語而聞名&#xff0c;通過 goroutine 和 channel 提供了一種高效、安全的并發編程模型。本文將全面解析 Go 的并發機制及其實際應用。 核心概念&#xff1a;Goroutines 和 Channels 1. Goroutines (協程) Go 的輕量級線程實現&…

vue和uniapp聊天頁面右側滾動條自動到底部

1.vue右側滾動條自動到底部 <div ref"newMessage1"></div> <!-- 定義<div ref"newMessage1"></div>與<div v-for”item in list“>循環同級定義-->定義方法 scrollToBottomCenter(){this.$nextTick(() > {this.$re…

iOS 項目怎么構建穩定性保障機制?一次系統性防錯經驗分享(含 KeyMob 工具應用)

崩潰、內存飆升、后臺任務未釋放、頁面卡頓、日志丟失——穩定性問題&#xff0c;不一定會立刻崩&#xff0c;但一旦積累&#xff0c;就是“上線后救不回來的代價”。 穩定性保障不是某個工具的功能&#xff0c;而是一套貫穿開發、測試、上線全流程的“觀測分析防范”機制。 …

JMeter函數整理

"_csvRead"函數 csvRead函數是從外部讀取參數&#xff0c;csvRead函數可以從一個文件中讀取多個參數。 下面具體講一下如何使用csvread函數&#xff1a; 1.新建一個csv或者text文件&#xff0c;里面保存要讀取的參數&#xff0c;每個參數間用逗號相隔。每行表示每一組…

深入理解 React Hooks

在當今的 React 開發中,Hooks 已經成為構建函數組件的核心工具。自 React 16.8 版本引入以來,Hooks 徹底改變了開發者編寫 React 組件的方式,使得狀態管理和副作用處理變得更加簡潔和直觀。本文將全面介紹 React 提供的各種 Hooks,從基礎的 useState 和 useEffect,到高級的…

Doris-2:單虛擬機上非docker化安裝Doris實驗環境

Doris-2:單虛擬機上非docker化安裝Doris實驗環境 1.安裝1.1.環境說明1.2.基礎準備1.2.1.JDK1.2.2.操作系統配置(使用root或者有權賬戶)1.2.2.1.修改環境變量1.2.2.2.修改虛擬內存區域1.2.2.3.關閉swap1.2.2.4.關閉防火墻1.2.2.5.創建用戶和組1.3.安裝doris1.3.1.解壓1.3.2.配置…

C# SqlSugar:依賴注入與倉儲模式實踐

C# SqlSugar&#xff1a;依賴注入與倉儲模式實踐 在 C# 的應用開發中&#xff0c;數據庫操作是必不可少的環節。為了讓數據訪問層更加簡潔、高效且易于維護&#xff0c;許多開發者會選擇成熟的 ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;SqlSugar 就是其中備受…

Razor編程中@Helper的用法大全

文章目錄 第一章&#xff1a;Helper基礎概念1.1 Helper的定義與作用1.2 Helper的基本語法結構1.3 Helper與HtmlHelper的區別 第二章&#xff1a;基礎Helper用法2.1 無參數Helper2.2 帶簡單參數的Helper2.3 帶默認值的參數2.4 使用模型作為參數 第三章&#xff1a;高級Helper用法…

Python-正則表達式(re 模塊)

目錄 一、re 模塊的使用過程二、正則表達式的字符匹配1. 匹配開頭結尾2. 匹配單個字符3. 匹配多個字符4. 匹配分組5. Python 代碼示例 三、re 模塊的函數1. 函數一覽表2. Python 代碼示例1&#xff09;search 與 finditer2&#xff09;findall3&#xff09;sub4&#xff09;spl…