WebRTC 學(xué)習(xí)資料整理一

官網(wǎng)永遠(yuǎn)是最重要,但同時(shí)也是最容易忽略的學(xué)習(xí)途徑。So you should look official websites firtsly.

先看一看基礎(chǔ)概念的解釋
WebRTC 相關(guān)縮寫名詞簡(jiǎn)介

推薦一種方式,打開官方給的例子,然后通過瀏覽器調(diào)試,定位到控制到就能夠看到這個(gè)流程了。WebRTC samples
如下:

  • Offer/Answer 與 Signal Channel 是什麼?

WebRTC 必須透過某種中介伺服器才能建立連線,而我們稱這種媒介為「訊號(hào)通道 (Signal Channel)」。也就是說,在建立連線之前,會(huì)先透過訊號(hào)通道交換建立連線所需的資訊。

我們所要交換的資訊就是「Offer」與「Answer」,而其內(nèi)容就是上述的 SDP。

當(dāng) Peer A 設(shè)立連線時(shí),就會(huì)建立 Offer。接著會(huì)透過選定的訊號(hào)通道將此 Offer 傳送給 Peer B。在 Peer B 收到訊號(hào)通道傳來的 Offer 之後,就會(huì)建立 Answer,並透過同樣的訊號(hào)通道將 Answer 回傳給 Peer A。

  • ICE Candidate 是什麼?

如上所述,Offer/Answer 與 SDP 用以交換多媒體的格式內(nèi)容;ICE candidate 則用以交換網(wǎng)路連線的建立方式,並可說明端點(diǎn)溝通的方法 (直接通訊,或透過 TURN 伺服器通訊)。

概述

一、WebRTC 直播時(shí)代

二、A Closer Look Into WebRTCwebkit添加新內(nèi)容

相關(guān)

一、音視頻云聲網(wǎng)Agora:從demo到實(shí)用,中間還差1萬個(gè)WebRTC

WebRtc協(xié)議棧



在這個(gè)例子中,我們將使用SIP-over-WebSocket(SIPoWS)作為信令棧。HTTP協(xié)議用于瀏覽器下載HTML5/JavaScript程序內(nèi)容;NAT棧解決P2P連接問題;媒體棧用于發(fā)送和接收RTC的音頻和視頻。

二、為什么要有打洞服務(wù)

  • IPv4用完
  • 私有地址一致,用了同一網(wǎng)段,不能用內(nèi)網(wǎng)地址,需要用外網(wǎng)地址。
  • 在有防火墻和地址轉(zhuǎn)換時(shí)P2P需要UDP打洞:NAT后不能直接向廣域網(wǎng)那樣IP直接連接
  • 不是所有 NAT 網(wǎng)絡(luò)都能打洞成功,連接就會(huì)建立失敗,只能服務(wù)器中轉(zhuǎn)。

環(huán)境搭建

一、Webrtc服務(wù)器搭建

  • 通話的房間服務(wù)器(Room Server)
  • 通話的信令服務(wù)器(Signaling Server)
  • 防火墻打洞服務(wù)器(STUN/TURN/ICE Server)

二、iOS下音視頻通信-基于WebRTC非常全面的介紹,并且有Demo。大愛,跟著demo走一遍就熟了

嚴(yán)格來說它僅僅是不需要服務(wù)端來進(jìn)行數(shù)據(jù)中轉(zhuǎn)而已。

WebRTC至少有兩件事必須要用到服務(wù)器:

  • 瀏覽器之間交換建立通信的元數(shù)據(jù)(信令)必須通過服務(wù)器。

    • 我們?cè)贏和B需要建立P2P連接的時(shí)候,至少要服務(wù)器來協(xié)調(diào),來控制連接開始建立。而連接斷開的時(shí)候,也需要服務(wù)器來告知另一端P2P連接已斷開。這些我們用來控制連接的狀態(tài)的數(shù)據(jù)稱之為信令,而這個(gè)與服務(wù)端連接的通道,對(duì)于WebRTC而言就是信令通道。
    • 在建立連接之前,客戶端之間顯然沒有辦法傳遞數(shù)據(jù)。所以我們需要通過服務(wù)器的中轉(zhuǎn),在客戶端之間傳遞這些數(shù)據(jù),然后建立客戶端之間的點(diǎn)對(duì)點(diǎn)連接。但是WebRTC API中并沒有實(shí)現(xiàn)這些,這些就需要我們來實(shí)現(xiàn)了。
  • 為了穿越NAT和防火墻。

  • WebRTC主要實(shí)現(xiàn)了三個(gè)API

  1. MediaStream:通過MediaStream的API能夠通過設(shè)備的攝像頭及話筒獲得視頻、音頻的同步流
  2. RTCPeerConnection:RTCPeerConnection是WebRTC用于構(gòu)建點(diǎn)對(duì)點(diǎn)之間穩(wěn)定、高效的流傳輸?shù)慕M件
  3. RTCDataChannel:RTCDataChannel使得瀏覽器之間(點(diǎn)對(duì)點(diǎn))建立一個(gè)高吞吐量、低延時(shí)的信道,用于傳輸任意數(shù)據(jù)。
    其中RTCPeerConnection是我們WebRTC的核心組件。
  • P2P連接的過程
  1. A和B連接上服務(wù)端,建立一個(gè)TCP長(zhǎng)連接(任意協(xié)議都可以,WebSocket/MQTT/Socket原生/XMPP),我們這里為了省事,直接采用WebSocket,這樣一個(gè)信令通道就有了。
  2. A從ice server(STUN Server)獲取ice candidate并發(fā)送給Socket服務(wù)端,并生成包含session description(SDP)的offer,發(fā)送給Socket服務(wù)端。
  3. Socket服務(wù)端把A的offer和ice candidate轉(zhuǎn)發(fā)給B,B會(huì)保存下A這些信息
  4. 然后B發(fā)送包含自己session description的answer(因?yàn)樗盏降氖莖ffer,所以返回的是answer,但是內(nèi)容都是SDP)和ice candidate給Socket服務(wù)端
  5. Socket服務(wù)端把B的answer和ice candidate給A,A保存下B的這些信息。

三、WebRTC(iOS)下載編譯(下載指定版本)

點(diǎn)對(duì)點(diǎn)連接下,會(huì)導(dǎo)致這樣一個(gè)問題:

如果客戶端A想給客戶端B發(fā)送數(shù)據(jù),則數(shù)據(jù)來到客戶端B所在的路由器下,會(huì)被NAT阻攔,這樣B就無法收到A的數(shù)據(jù)了。
但是A的NAT此時(shí)已經(jīng)知道了B這個(gè)地址,所以當(dāng)B給A發(fā)送數(shù)據(jù)的時(shí)候,NAT不會(huì)阻攔,這樣A就可以收到B的數(shù)據(jù)了。這就是我們進(jìn)行NAT穿越的核心思路。

思路:
我們借助一個(gè)公網(wǎng)IP服務(wù)器。a、b都往公網(wǎng)IP/PORT發(fā)包,公網(wǎng)服務(wù)器就可以獲知a,b的IP/PORT,又由于a,b主動(dòng)給公網(wǎng)IP服務(wù)器發(fā)包,所以公網(wǎng)服務(wù)器可以穿透NAT A,NAT B送包給a,b。
所以只要公網(wǎng)IP將b的IP/PORT發(fā)給a,a的IP/PORT發(fā)給b。這樣下次a和b互相消息,就不會(huì)被NAT阻攔了。

基礎(chǔ)概念

一、WebRTC入門教程.md

  • STUN (Session Traversal Utilities for NAT) 只能UDP,告訴我暴露在廣域網(wǎng)的地址IP port ,我通過映射的廣域網(wǎng)地址進(jìn)行P2P數(shù)據(jù)通信。
  • TURN( Traversal Using Relays around for NAT)UDP或TCP, 打洞失敗后,提供服務(wù)器中轉(zhuǎn)數(shù)據(jù),通話雙方數(shù)據(jù)都通過服務(wù)器,占服務(wù)器帶寬較大 - 為了確保通話在絕大多數(shù)環(huán)境下可以正常工作。跨網(wǎng)只能用服務(wù)器中轉(zhuǎn)(測(cè)試發(fā)現(xiàn)的) ,使用TURN這種情況在視頻通話中占10%
  • ICE 網(wǎng)絡(luò)連接服務(wù)

二、WebRtc建立P2P鏈接的總體流程UML類圖非常不錯(cuò)。

  • 鏈接總體流程


  • 時(shí)序圖


  • 類圖


協(xié)議

一、NAT

NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)是1994年提出的。當(dāng)在專用網(wǎng)內(nèi)部的一些主機(jī)本來已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址),但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密)時(shí),可使用NAT方法。這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助于減緩可用的IP地址空間的枯竭。

  • NAT實(shí)現(xiàn)方式:即靜態(tài)轉(zhuǎn)換Static Nat、動(dòng)態(tài)轉(zhuǎn)換Dynamic Nat和端口多路復(fù)用OverLoad
  • NAT穿透方法:目前常用的針對(duì)UDP的NAT 穿透(NAT Traversal)方法主要有:STUN、TURN、ICE、uPnP等。其中ICE方式由于其結(jié)合了STUN和TURN的特點(diǎn),所以使用最為廣泛。針對(duì)TCP的NAT穿透技術(shù)目前仍為難點(diǎn)。實(shí)用的技術(shù)仍然不多。
  • NAT工作原理:NAT將自動(dòng)修改IP報(bào)文的源IP地址和目的IP地址,Ip地址校驗(yàn)則在NAT處理過程中自動(dòng)完成。有些應(yīng)用程序?qū)⒃碔P地址嵌入到IP報(bào)文的數(shù)據(jù)部分中,所以還需要同時(shí)對(duì)報(bào)文的數(shù)據(jù)部分進(jìn)行修改,以匹配IP頭中已經(jīng)修改過的源IP地址。否則,在報(bào)文數(shù)據(jù)部分嵌入IP地址的應(yīng)用程序就不能正常工作。簡(jiǎn)單來講就是通過一個(gè)轉(zhuǎn)換頭,將內(nèi)網(wǎng)地址變?yōu)楣W(wǎng)地址,接收的時(shí)候根據(jù)記錄將公網(wǎng)地址變成內(nèi)網(wǎng),完成傳輸。

二、STUN

是一種網(wǎng)絡(luò)協(xié)議,它一種網(wǎng)絡(luò)協(xié)議,它允許位于NAT(或多重NAT)后的客戶端找出自己的公網(wǎng)地址,查出自己位于哪種類型的NAT之后以及NAT為某一 個(gè)本地端口所綁定的Internet端端口。這些信息被用來在兩個(gè)同時(shí)處于NAT 路由器之后的主機(jī)之間建立UDP通信。。目的就是找到外界連接內(nèi)部地址的所需信息。

STUN是一個(gè)客戶機(jī)-服務(wù)器協(xié)議。一個(gè)VoIP電話或軟件包可能會(huì)包括一個(gè)STUN客戶端。這個(gè)客戶端會(huì)向STUN服務(wù)器發(fā)送請(qǐng)求,之后,服務(wù)器就會(huì)向STUN客戶端報(bào)告NAT路由器的公網(wǎng)IP地址以及NAT為允許傳入流量傳回內(nèi)網(wǎng)而開 通的端口。

以上的響應(yīng)同時(shí)還使得STUN客戶端能夠確定正在使用的NAT類型——因?yàn)椴煌腘AT類型處理傳入的UDP分組的方式是不同的。四種主要類型中有三種是可以使用的:完全圓錐型NAT、受限圓錐型NAT和端口受限圓錐型NAT——但大型公司網(wǎng)絡(luò)中經(jīng)常采用的對(duì)稱型 NAT(又稱為雙向NAT)則不能使用。

三、STUN和TURN技術(shù)淺析 比較全面的分析

STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即簡(jiǎn)單的用UDP穿透NAT,是個(gè)輕量級(jí)的協(xié)議,是基于UDP的完整的穿透NAT的解決方案。它允許應(yīng)用程序發(fā)現(xiàn)它們與公共互聯(lián)網(wǎng)之間存在的NAT和防火墻及其他類型。它也可以讓應(yīng)用程序確定NAT分配給它們的公網(wǎng)IP地址和端口號(hào)。STUN是一種Client/Server的協(xié)議,也是一種Request/Response的協(xié)議,默認(rèn)端口號(hào)是3478。

在現(xiàn)實(shí)Internet網(wǎng)絡(luò)環(huán)境中,大多數(shù)計(jì)算機(jī)主機(jī)都位于防火墻或NAT之后,只有少部分主機(jī)能夠直接接入Internet。很多時(shí)候,我們希望網(wǎng)絡(luò)中的兩臺(tái)主機(jī)能夠直接進(jìn)行通信,即所謂的P2P通信,而不需要其他公共服務(wù)器的中轉(zhuǎn)。由于主機(jī)可能位于防火墻或NAT之后,在進(jìn)行P2P通信之前,我們需要進(jìn)行檢測(cè)以確認(rèn)它們之間能否進(jìn)行P2P通信以及如何通信。這種技術(shù)通常稱為NAT穿透(NAT Traversal)。最常見的NAT穿透是基于UDP的技術(shù),如RFC3489中定義的STUN協(xié)議。

NAT對(duì)待UDP的實(shí)現(xiàn)方式有4種方式、簡(jiǎn)單可以理解為:

  1. 隨便搞,沒搞過的也可以搞
  2. 只有搞過的才能搞
  3. 之前帶過套的才能搞
  4. 只有搞得爽的才能搞

TURN,首先在RFC5766中定義,英文全稱是Traversal Using Relays around NAT:Relay Extensions to Session Traversal Utilities for NAT,即使用中繼穿透NAT:STUN的擴(kuò)展。簡(jiǎn)單的說,TURN與STURN的共同點(diǎn)都是通過修改應(yīng)用層中的私網(wǎng)地址達(dá)到NAT穿透的效果,異同點(diǎn)是TURN是通過兩方通訊的“中間人”方式實(shí)現(xiàn)穿透

如果一個(gè)主機(jī)位于NAT的后面,在某些情況下它不能夠與其他主機(jī)點(diǎn)對(duì)點(diǎn)直接連接。在這些情況下,它需要使用中間網(wǎng)點(diǎn)提供的中繼連接服務(wù)。TURN協(xié)議就是用來允許主機(jī)控制中繼的操作并且使用中繼與對(duì)端交換數(shù)據(jù)。TURN與其他中繼控制協(xié)議不同的是它能夠允許一個(gè)客戶端使用一個(gè)中繼地址與多個(gè)對(duì)端連接。

四、WebRTC protocols

五、SDP 協(xié)議分析

SDP 完全是一種會(huì)話描述格式 ― 它不屬于傳輸協(xié)議 ― 它只使用不同的適當(dāng)?shù)膫鬏攨f(xié)議,包括會(huì)話通知協(xié)議(SAP)、會(huì)話初始協(xié)議(SIP)、實(shí)時(shí)流協(xié)議(RTSP)、MIME 擴(kuò)展協(xié)議的電子郵件以及超文本傳輸協(xié)議(HTTP)。SDP協(xié)議是也是基于文本的協(xié)議,這樣就能保證協(xié)議的可擴(kuò)展性比較強(qiáng),這樣就使其具有廣泛的應(yīng)用范圍。SDP 不支持會(huì)話內(nèi)容或媒體編碼的協(xié)商,所以在流媒體中只用來描述媒體信息。

六、試驗(yàn)UDP打洞穿透NAT

比較全面的介紹了。備有例子

七、tun turn ice等穿越NAT方法大部分理論介紹

代碼分析

一、WebRtc重要概念

二、WebRtc 之P2C的建立

三、WebRtc語音整體框架

四、 webrtc android ios系列教程,五十多節(jié),內(nèi)容有點(diǎn)多。可以慢慢看

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

推薦閱讀更多精彩內(nèi)容