WebRTC(二):工作機制

核心組成

  • GetUserMedia:獲取本地音視頻設備(攝像頭、麥克風)數據流。
  • RTCPeerConnection:實現點對點的媒體流傳輸和網絡連接管理。
  • RTCDataChannel:點對點的任意數據通道(除音視頻外傳輸數據)。

運行流程

信令協商(建立連接前的協商階段)

WebRTC 本身不規定信令方式,通常通過 WebSocket、HTTP、SIP、XMPP 等信令服務器完成:

  • 雙方交換網絡信息(IP、端口等),叫做 ICE Candidate
  • 雙方交換媒體協商信息,叫做 SDP(Session Description Protocol),包括音視頻編碼格式、分辨率、碼率等。

信令通道是 WebRTC 連接建立的必要前提,但它本身不包含在 WebRTC 標準內。

NAT穿越和網絡連接建立

  • WebRTC 使用 ICE(Interactive Connectivity Establishment) 協議。
  • ICE 會收集所有可能的網絡候選地址(本地 IP、STUN 服務器分配的公網 IP、中繼服務器 TURN 分配的地址)。
  • 雙方互相嘗試連接這些地址,最終確定一條可用的點對點路徑。

媒體流捕獲和編碼

  • 通過 getUserMedia 獲取本地攝像頭和麥克風流。
  • 媒體數據經瀏覽器內置編碼器壓縮,支持 VP8/VP9/H.264(視頻),Opus/G.711(音頻)等編碼格式。

點對點媒體流傳輸

  • 利用 RTCPeerConnection,雙方建立點對點的連接。
  • 媒體流(音頻、視頻)和數據流通過這個連接實時雙向傳輸。
  • 支持加密傳輸(DTLS-SRTP),確保通信安全。

RTCPeerConnection調用過程:

在這里插入圖片描述

調用時序圖:

在這里插入圖片描述

數據通道通信

  • RTCDataChannel 允許點對點傳輸任意數據,如文字聊天、文件傳輸、游戲數據等。
  • 基于 SCTP 協議,支持可靠和不可靠數據傳輸。

連接維護和狀態更新

  • WebRTC 會實時監控網絡狀態,自動調整連接路徑。
  • 支持動態帶寬調節、碼率控制和丟包恢復機制,確保流暢通信。

總結

+-----------------------+                           +-----------------------+
|       瀏覽器A          |                           |       瀏覽器B          |
+-----------------------+                           +-----------------------+|                                                       || 1. 獲取本地媒體流 (getUserMedia)                        ||------------------------------------------------------>||                                                       ||<------------------------------------------------------||                                                       || 2. 創建 RTCPeerConnection 對象                         ||                                                       || 3. 創建 Offer SDP(Session Description)               ||------------------------------------------------------>||                                                       ||                                                       | 4. 接收 Offer SDP|                                                       | 5. 創建 RTCPeerConnection|                                                       | 6. 創建 Answer SDP|                                                       |------------------------------------------------------>||                                                       || 7. 接收 Answer SDP                                     ||<------------------------------------------------------||                                                       || 8. 雙方開始交換 ICE Candidates(網絡候選)             ||<-------------------------> (通過信令服務器傳遞)        ||                                                       || 9. ICE 協議測試所有候選路徑,選出最佳連接路徑           ||                                                       || 10. 建立 DTLS-SRTP 加密的點對點連接                     ||                                                       || 11. 雙方通過 RTCPeerConnection 發送音視頻流             ||<--------------------------->                            ||                                                       || 12. RTCDataChannel 傳輸任意數據(如文本、文件等)       ||<--------------------------->                            ||                                                       || 13. 連接維護與狀態更新(動態調節碼率、重連等)           ||                                                       |
  1. 獲取本地媒體流

    • 通過調用 navigator.mediaDevices.getUserMedia() 獲取攝像頭和麥克風的音視頻流。

    • 用戶瀏覽器彈出授權提示,用戶允許后返回本地流。

  2. 創建 RTCPeerConnection 對象

    • 新建一個連接對象,負責管理媒體流和數據通道。
  3. 創建 Offer SDP

    • 發送方創建會話描述(SDP),告知自己支持的音視頻格式、網絡信息等。
  4. 信令交換

    • 發送方將 Offer SDP 發送給接收方。

    • 接收方收到后,創建自己的 RTCPeerConnection。

    • 接收方創建 Answer SDP 并返回發送方。

    • 雙方確認彼此能力和參數。

  5. ICE Candidate 交換

    • 雙方通過信令服務器互相發送所有可用的網絡候選地址(IP + 端口)。

    • 這些地址包括本地網絡地址、STUN 獲取的公網地址、TURN 中繼地址。

  6. ICE 連接檢測

    • 雙方嘗試所有候選路徑,逐個測試連接性。

    • 選擇最佳路徑(最快、最穩定的點對點連接)。

  7. 建立安全連接

    • 通過 DTLS(Datagram Transport Layer Security)加密握手,建立加密的傳輸通道。

    • 媒體通過 SRTP(Secure Real-time Transport Protocol)安全傳輸。

  8. 媒體流傳輸

    • 雙方開始點對點實時傳輸視頻和音頻流。

    • 支持視頻、音頻的編碼解碼和同步。

  9. 數據通道傳輸

    • 通過 RTCDataChannel 發送非音視頻數據,如文本消息、文件數據、游戲狀態等。
  10. 連接維護和狀態更新

    • WebRTC 會自動監測連接狀態,處理網絡變化。

    • 實時調整碼率,保證音視頻質量。

    • 出現連接問題時,自動嘗試重新建立連接。

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

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

相關文章

機器學習+城市規劃第十五期:時空地理加權回歸(STGWR)

機器學習城市規劃第十五期&#xff1a;時空地理加權回歸&#xff08;STGWR&#xff09; 引言 隨著城市化進程的加速&#xff0c;城市規劃面臨越來越多復雜的挑戰。在傳統的城市規劃中&#xff0c;通常會考慮到地理位置的影響&#xff0c;但往往忽略了時間維度。而在現代城市的…

用虛擬機安裝macos系統之后進入Boot Manager頁面

安裝教程&#xff1a;在VMware中安裝macos系統教程 在VMware中安裝macos系統時啟動后進入Boot Manager界面&#xff0c;通常是由于虛擬機的固件類型設置于鏡像不兼容所致。 解決辦法&#xff1a;虛擬機默認使用UEFI啟動模式&#xff0c;但是部分macos鏡像需要切換到BIOS模式才…

基于API的Redis緩存實現

1.使用Redis API 進行業務數據緩存管理 編寫一個進行業務處理的類ApiCommentService,使用Autowired注解注入Redis API中常用的RedisTemplate&#xff08;類似于Java基礎API中的JdbcTemplate&#xff09;&#xff1b; 然后在數據查詢、修改和刪除三個方法中&#xff0c;根據業…

前沿論文匯總(機器學習/深度學習/大模型/搜廣推/自然語言處理)

文章目錄 1 前言2 大模型/自然語言處理2.1 FreeAL&#xff1a;在大模型時代實現無需人工的主動學習2.2 COLD&#xff1a;中文攻擊性語言檢測基準2.3 將詞匯的對比信息融入詞嵌入以實現反義詞-同義詞區分2.4 LogRAG&#xff1a;基于檢索增強生成的半監督日志異常檢測2.5 RankRAG…

PP-OCRv5 ubuntu20.04 OCR識別服務

目錄 說明 使用 效果 下載 說明 PP-OCRv5 ubuntu20.04 OCR識別服務 使用 1、下載后解壓 2、進入目錄、運行程序 效果 1、瀏覽器訪問 2、接口調用 下載 方式1 源碼下載 方式2 通過網盤分享的文件&#xff1a;lw.PP_OCRService.tar.gz 鏈接: https://pan.baidu.com…

VScode打開后一直顯示正在重新激活終端 問題的解決方法

一、問題 本人打開“.py”文件后&#xff0c;同時會出現以下兩個問題。 1、VScode一直循環在”正在重新激活終端“ 2、日志顯示intellicode報錯&#xff1a; Sorry, something went wrong activating IntelliCode support for Python. Please check the “Python” and “VS I…

uniapp 實現騰訊云音視頻通話功能

uniapp 深度集成騰訊云音視頻通話功能實戰指南 一、技術架構解析 騰訊云音視頻解決方案采用IM信令控制層TRTC媒體傳輸層的雙架構設計&#xff0c;實現核心能力解耦&#xff1a; #mermaid-svg-DKBpT4CVDkqU1IBw {font-family:"trebuchet ms",verdana,arial,sans-ser…

linux常見問題之截取文件指定行數

linux常見問題之截取文件指定行數 一、命令概述 在處理大文本文件時&#xff0c;我們打開該文件會非常不方便&#xff0c;比如服務器上的日志文件&#xff0c;于是我們常常需要提取特定的行進行分析。Linux 系統中提供了多個強大的命令行工具&#xff0c;可以幫助我們高效地完…

微前端 - Native Federation使用完整示例

這是一個極簡化的 Angular 使用angular-architects/native-federation 插件的微前端示例&#xff0c;只包含一個主應用和一個遠程應用。 完整示例展示 項目結構 federation-simple/ ├── host-app/ # 主應用 └── remote-app/ # 遠程應用 創建遠程應用 (remote…

無服務器架構的企業級應用深度解析:Serverless技術選型與成本模型

?? 目錄 引言:無服務器架構的興起無服務器架構核心概念主流Serverless平臺技術對比企業級應用場景分析成本模型深度分析私有化部署與云端服務對比決策框架構建最佳實踐與建議未來發展趨勢結論引言:無服務器架構的興起 在云計算快速發展的今天,無服務器架構(Serverless)…

內網有貓和無線路由器,如何做端口映射從而實現外網訪問

內網貓和無線路由器端口映射配置指南 端口映射&#xff08;Port Forwarding&#xff09;是將外網請求引導到內網特定設備和端口的技術&#xff0c;常用于遠程訪問、搭建服務器等場景。以下是配置方法&#xff1a; 基本原理 貓&#xff08;調制解調器&#xff09;&#xff1a…

Spring boot應用監控集成

Spring Boot應用監控集成記錄 背景 XScholar文獻下載應用基于Spring Boot構建&#xff0c;需要接入Prometheus監控系統。應用已部署并運行在服務器上&#xff0c;需要暴露metrics端點供Prometheus采集。 初始狀態 應用信息 框架: Spring Boot 2.x部署端口: 10089服務器: L…

安寶特案例丨又一落地,Vuzix AR眼鏡助力亞馬遜英國倉庫智能化升級!

Vuzix M400智能眼鏡近日落地亞馬遜&#xff08;英國&#xff09;倉庫&#xff0c;通過解放雙手、免提操作優化物流效率。 安寶特&VuzixAR智能眼鏡解決方案為亞馬遜倉庫提供實時決策支持、無縫對接員工-主管-企業管理系統&#xff0c;并加速了新員工培訓流程&#xff0c;優…

ui框架-文件列表展示

ui框架-文件列表展示 介紹 UI框架的文件列表展示組件&#xff0c;可以展示文件夾&#xff0c;支持列表展示和圖標展示模式。組件提供了豐富的功能和可配置選項&#xff0c;適用于文件管理、文件上傳等場景。 功能特性 支持列表模式和網格模式的切換展示支持文件和文件夾的層…

使用QMediaPlayer開發音樂播放器

編譯完成的程序下載:【免費】使用QMediaPlayer開發音樂播放器資源-CSDN文庫 完整源碼:使用QMediaPlayer開發音樂播放器源碼資源-CSDN文庫 需求分析: 1.本地音樂播放器 核心播放功能 支持常見音頻格式本地播放MP3、WAV、FLAC 等 2.播放控制:播放 / 暫停 / 停止 / 上一曲…

Linux-07 ubuntu 的 chrome 啟動不了

文章目錄 問題原因解決步驟一、卸載舊版chrome二、重新安裝chorme三、啟動不了&#xff0c;報錯如下四、啟動不了&#xff0c;解決如下 總結 問題原因 在應用中可以看到chrome&#xff0c;但是打不開(說明&#xff1a;原來的ubuntu系統出問題了&#xff0c;這個是備用的硬盤&a…

【Redis】緩存雪崩、緩存擊穿、緩存穿透

目錄 1、緩存雪崩【1】定義【2】原因【3】解決方案[1]差異化過期時間[2]多級緩存[3]熔斷降級[4]緩存永不過期異步更新 2、緩存擊穿【1】定義【2】原因【3】解決方案[1]互斥鎖[2]邏輯過期[3]熱點數據加載 3、緩存穿透【1】定義【2】原因【3】解決方案[1]緩存空對象[2]布隆過濾器…

【論文閱讀筆記】萬花筒:用于異構多智能體強化學習的可學習掩碼

摘要 在多智能體強化學習&#xff08;MARL&#xff09;中&#xff0c;通常采用參數共享來提高樣本效率。然而&#xff0c;全參數共享的流行方法通常會導致智能體之間的策略同質&#xff0c;這可能會限制從策略多樣性中獲得的性能優勢。為了解決這一關鍵限制&#xff0c;我們提出…

vue2 , el-select 多選樹結構,可重名

人家antd都支持&#xff0c;elementplus 也支持&#xff0c;vue2的沒有&#xff0c;很煩。 網上其實可以搜到各種的&#xff0c;不過大部分不支持重名&#xff0c;在刪除的時候可能會刪錯&#xff0c;比如樹結構1F的1樓啊&#xff0c;2F的1樓啊這種同時勾選的情況。。 可以全…

golang循環變量捕獲問題??

在 Go 語言中&#xff0c;當在循環中啟動協程&#xff08;goroutine&#xff09;時&#xff0c;如果在協程閉包中直接引用循環變量&#xff0c;可能會遇到一個常見的陷阱 - ??循環變量捕獲問題??。讓我詳細解釋一下&#xff1a; 問題背景 看這個代碼片段&#xff1a; fo…