WebRTC簡介


title: WebRTC簡介

categories:[WebRTC]

tags:[音視頻編程]

date: 2021/12/09

作者:hackett

微信公眾號:加班猿


WebRTC簡介

WebRTC (Web Real-Time Communications) 是一項實時通訊技術,它允許網絡應用或者站點,在不借助中間媒介的情況下,建立瀏覽器之間點對點(Peer-to-Peer)的連接,實現視頻流和(或)音頻流或者其他任意數據的傳輸。WebRTC包含的這些標準使用戶在無需安裝任何插件或者第三方的軟件的情況下,創建點對點(Peer-to-Peer)的數據分享和電話會議成為可能。

WebRTC架構

image

顏色標識說明

(1)紫色部分是Web開發者API層;

(2)藍色實線部分是面向瀏覽器廠商的API層

(3)藍色虛線部分瀏覽器廠商可以自定義實現

架構組件介紹

(1) Your Web App

Web開發者開發的程序,Web開發者可以基于集成WebRTC的瀏覽器提供的web API開發基于視頻、音頻的實時通信應用。

(2)Web API

面向第三方開發者的WebRTC標準API(Javascript),使開發者能夠容易地開發出類似于網絡視頻聊天的web應用。

這些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三類,詳細的API說明可以看這里。

Network Stream API

MediaStream:MediaStream用來表示一個媒體數據流。

MediaStreamTrack在瀏覽器中表示一個媒體源。

RTCPeerConnection

RTCPeerConnection: 一個RTCPeerConnection對象允許用戶在兩個瀏覽器之間直接通訊。

RTCIceCandidate :表示一個ICE協議的候選者。

RTCIceServer:表示一個ICE Server。

Peer-to-peer Data API

DataChannel:數據通道( DataChannel)接口表示一個在兩個節點之間的雙向的數據通道 。

(3)WebRTC Native C++ API

本地C++ API層,使瀏覽器廠商容易實現WebRTC標準的Web API,抽象地對數字信號過程進行處理。

(4)Transport / Session

傳輸/會話層

會話層組件采用了libjingle庫的部分組件實現,無須使用xmpp/jingle協議

a. RTP Stack協議棧

Real Time Protocol

b. STUN/ICE

可以通過STUN和ICE組件來建立不同類型網絡間的呼叫連接。

c. Session Management

一個抽象的會話層,提供會話建立和管理功能。該層協議留給應用開發者自定義實現。

重要API

WebRTC原生APIs文件是基于WebRTC規格書撰寫而成,這些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三類。

Network Stream API

  • MediaStream:MediaStream用來表示一個媒體數據流。
  • MediaStreamTrack在瀏覽器中表示一個媒體源。

RTCPeerConnection

  • RTCPeerConnection:一個RTCPeerConnection對象允許用戶在兩個瀏覽器之間直接通訊。
  • RTCIceCandidate:表示一個ICE協議的候選者。
  • RTCIceServer:表示一個ICE Server。

Peer-to-peer Data API

  • DataChannel:數據通道(DataChannel)接口表示一個在兩個節點之間的雙向的數據通道。

WebRTC協議介紹

ICE

發送對等方能夠用于通信的方法。

ICE 提供了一個框架,通信對等方可以通過該框架發現和通信其公共 IP 地址,以便其他對等方可以訪問它。

STUN

用于 NAT (STUN) 的會話遍歷實用程序 是一種協議,用于發現您的公共地址并確定路由器中會阻止與對等方直接連接的任何限制。

客戶端將向 Internet 上的 STUN 服務器發送請求,該服務器將回復客戶端的公共地址以及客戶端是否可通過路由器的 NAT 訪問。

image
  • STUN 是一種通信協議工具,用于檢測和遍歷位于兩個通信端點之間的路徑中的網絡地址轉換器
  • STUN 消息在用戶數據報協議(UDP) 數據包中發送。由于 UDP 不提供可靠的傳輸,可靠性是通過應用程序控制的 STUN 請求的重傳來實現的
  • STUN 與三種類型的 NAT 配合使用:全錐 NAT受限錐 NAT端口受限錐 NAT。在受限錐或端口受限錐 NAT 的情況下,客戶端必須先向端點發送數據包,然后 NAT 才會允許從端點到客戶端的數據包。STUN 不適用于大公司網絡中常見的對稱 NAT(也稱為雙向 NAT)。由于STUN 服務器的IP 地址與端點的IP 地址不同,在對稱 NAT 情況下,STUN 服務器的 NAT 映射將與端點不同。TURN使用對稱 NAT 提供更好的結果。

NAT

網絡地址轉換 (NAT)用于為您的設備提供公共 IP 地址。路由器將有一個公共 IP 地址,連接到路由器的每個設備都將有一個私有 IP 地址。請求將從設備的私有 IP 轉換為具有唯一端口的路由器的公共 IP。這樣一來,您就不需要為每臺設備分配一個唯一的公共 IP,但仍然可以在 Internet 上找到它。

網絡地址轉換( NAT ) 是一種通過在數據包通過流量路由設備傳輸時修改數據包IP 標頭中網絡地址信息來將 IP地址空間映射到另一個IP地址空間的方法。

某些路由器會限制誰可以連接到網絡上的設備。這可能意味著即使我們擁有 STUN 服務器找到的公共 IP 地址,也不是任何人都可以創建連接。在這種情況下,我們需要轉向 TURN。

  • 一對一:最簡單的 NAT 類型提供 IP 地址的一對一轉換。
  • 一對多:大多數網絡地址轉換器將多個私有主機映射到一個公開的 IP 地址。一對多 NAT 的額外好處之一是它是IPv4 地址耗盡的實用解決方案。即使是大型網絡也可以使用單個公共 IP 地址連接到 Internet

TURN

一些使用 NAT 的路由器采用稱為“對稱 NAT”的限制。這意味著路由器將只接受來自您之前連接過的對等方的連接。

使用中繼繞過 NAT (TURN)旨在通過打開與 TURN 服務器的連接并通過該服務器中繼所有信息來繞過對稱 NAT 限制。您將創建與 TURN 服務器的連接,并告訴所有對等方將數據包發送到服務器,然后該服務器將轉發給您。這顯然會帶來一些開銷,因此只有在沒有其他選擇的情況下才會使用它。

image

SDP

會話描述協議 (SDP)是用于描述連接的多媒體內容(例如分辨率、格式、編解碼器、加密等)的標準,以便在數據傳輸后雙方可以相互理解。這實質上是描述內容的元數據,而不是媒體內容本身。

那么,從技術上講,SDP 并不是真正的協議,而是一種用于描述設備之間共享媒體的連接的數據格式。

SDP 規范純粹是一種會話描述格式。它旨在根據需要分布在不同的傳輸協議上,包括SAPSIPRTSP。SDP 甚至可以通過電子郵件或作為 HTTP 負載傳輸

SDP offer

由代理發送的 SDP 消息,代理生成會話描述以創建或修改會話。它描述所需媒體通信的各個方面。

SDP answer

應答者響應從提議人收到的提議而發送的 SDP 消息。應答指出了已接受的各個方面。例如,提議中的所有音頻和視頻流是否都被接受。

STUN、TURN 和 ICE 如何協同工作

讓我們來看看兩個對等方 A 和 B 的情況,它們都使用 WebRTC 對等雙向媒體流式傳輸(例如,視頻聊天應用程序)。當 A 想打電話給 B 時會發生什么?

要連接到 B 的應用程序,A 的應用程序必須生成 SDP 提議。SDP 提議包含有關 A 的應用程序要建立的會話的信息,包括要使用的編解碼器、這是音頻會話還是視頻會話等。它還包含 ICE 候選項列表,這些候選項是 B 的應用程序可以嘗試用來連接到 A 的 IP 和端口對。

要構建 ICE 候選項列表,A 的應用程序向 STUN 服務器發出一系列請求。服務器返回發起請求的公有 IP 地址和端口對。A 的應用程序將每個對添加到 ICE 候選項列表中,換句話說,它收集 ICE 候選項。一旦 A 的應用程序完成收集 ICE 候選項,它可以返回 SDP。

接下來,A 的應用程序必須通過這些應用程序用于通信的信令通道將 SDP 傳遞給 B 的應用程序。WebRTC 標準中未指定用于此交換的傳輸協議。它可以通過 HTTPS、安全 WebSocket 或任何其他通信協議執行。

現在,B 的應用程序必須生成 SDP 應答。B 的應用程序遵循 A 在上一步中使用的相同步驟:收集 ICE 候選項等。然后,B 的應用程序需要將此 SDP 應答返回給 A 的應用程序。

晚于A 和 B 交換 SDP,然后執行一系列連接性檢查。每個應用程序中的 ICE 算法從它在另一方的 SDP 中收到的列表中獲取候選項 IP/端口對,并向其發送 STUN 請求。如果從另一個應用程序返回響應,發起方應用程序會認為檢查成功,并將該 IP/端口對標記為有效的 ICE 候選項。

在所有 IP/端口對上完成連接性檢查后,應用程序協商并決定使用剩余的有效對之一。當選擇一個對時,媒體開始在應用程序之間流動。

如果其中一個應用程序找不到通過了連接性檢查的 IP/端口對,它們將向 TURN 服務器發出 STUN 請求以獲取媒體中繼地址。中繼地址是一種公有 IP 地址和端口,用于將接收的數據包轉發到應用程序或從應用程序中轉發收到的數據包,以設置中繼地址。然后,將該中繼地址添加到候選項列表中,并通過信令通道進行交換。

這里對WebRTC整體做一個總結備忘。

如果你覺得文章還不錯,可以給個"三連",文章同步到個人微信公眾號[加班猿]

我是hackett,我們下期見

參考文檔:

WebRTC

WebRTC協議介紹

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容