webRTC入門 推薦經常複習

2021-10-07 21:45:03 字數 2439 閱讀 2930

前言:目錄:正文:

一.webrtc的實現原理。

1.我們從p2p連線模式來講起:

一般我們傳統的連線方式,都是以伺服器為中介的模式:

而點對點的連線恰恰資料通道一旦形成,中間是不經過服務端的,資料直接從乙個客戶端流向另乙個客戶端:

客戶端a⇋客戶端b ... 客戶端a⇋客戶端c ...(可以無數個客戶端之間互聯)

2.webrtc的伺服器與信令。

講到這裡,可能大家覺得webrtc就不需要服務端了麼?這是顯然是錯誤的認識,嚴格來說它僅僅是不需要服務端來進行資料中轉而已。

webrtc提供了瀏覽器到瀏覽器(點對點)之間的通訊,但並不意味著webrtc不需要伺服器。暫且不說基於伺服器的一些擴充套件業務,webrtc至少有兩件事必須要用到伺服器:

瀏覽器之間交換建立通訊的元資料(信令)必須通過伺服器。

為了穿越nat和防火牆。

第1條很好理解,我們在a和b需要建立p2p連線的時候,至少要伺服器來協調,來控制連線開始建立。而連線斷開的時候,也需要伺服器來告知另一端p2p連線已斷開。這些我們用來控制連線的狀態的資料稱之為信令,而這個與服務端連線的通道,對於webrtc而言就是信令通道。

圖中signalling就是往服務端傳送信令,然後底層呼叫webrtcwebrtc通過服務端得到的信令,得知通訊對方的基本資訊,從而實現虛線部分media通訊連線。

當然信令能做的事還有很多,這裡大概列了一下:

用來控制通訊開啟或者關閉的連線控制訊息

發生錯誤時用來彼此告知的訊息

**流元資料,比如像解碼器、解碼器的配置、頻寬、**型別等等

用來建立安全連線的關鍵資料

外界所看到的的網路上的資料,比如ip位址、埠等

在建立連線之前,客戶端之間顯然沒有辦法傳遞資料。所以我們需要通過伺服器的中轉,在客戶端之間傳遞這些資料,然後建立客戶端之間的點對點連線。但是webrtc api中並沒有實現這些,這些就需要我們來實現了。

而第2條中的nat這個概念,我們之前在ios即時通訊,從入門到「放棄」?

,中也提到過,不過那個時候我們是為了應對nat超時,所造成的tcp連線中斷。在這裡我們就不展開去講了,感興趣的可以看看:nat百科

這裡我簡要說明一下,nat技術的出現,其實就是為了解決ipv4下的ip位址匱乏。舉例來說,就是通常我們處在乙個路由器之下,而路由器分配給我們的位址通常為192.168.0.1 、192.168.0.2如果有n個裝置,可能分配到192.168.0.n,而這個ip位址顯然只是乙個內網的ip位址,這樣乙個路由器的公網位址對應了n個內網的位址,通過這種使用少量的公有ip 位址代表較多的私有ip 位址的方式,將有助於減緩可用的ip位址空間的枯竭。

但是這也帶來了一系列的問題,例如這裡點對點連線下,會導致這樣乙個問題:

如果客戶端a想給客戶端b傳送資料,則資料來到客戶端b所在的路由器下,會被nat阻攔,這樣b就無法收到a的資料了。

但是a的nat此時已經知道了b這個位址,所以當b給a傳送資料的時候,nat不會阻攔,這樣a就可以收到b的資料了。這就是我們進行nat穿越的核心思路。

於是我們就有了以下思路:

我們借助乙個公網ip伺服器,a,b都往公網ip/port發包,公網伺服器就可以獲知a,b的ip/port,又由於a,b主動給公網ip伺服器發包,所以公網伺服器可以穿透nat a,nat b送包給a,b。

所以只要公網ip將b的ip/port發給a,a的ip/port發給b。這樣下次a和b互相訊息,就不會被nat阻攔了。

而webrtc的nat/防火牆穿越技術,就是基於上述的乙個思路來實現的:

建立點對點通道的乙個常見問題,就是nat穿越技術。在處於使用了nat裝置的私有tcp/ip網路中的主機之間需要建立連線時需要使用nat穿越技術。以往在voip領域經常會遇到這個問題。目前已經有很多nat穿越技術,但沒有一項是完美的,因為nat的行為是非標準化的。這些技術中大多使用了乙個公共伺服器,這個服務使用了乙個從全球任何地方都能訪問得到的ip位址。在rtcpeeconnection中,使用ice框架來保證rtcpeerconnection能實現nat穿越

這裡提到了ice協議框架,它大約是由以下幾個技術和協議組成的:stun、nat、turn、sdp,這些協議技術,幫助ice共同實現了nat/防火牆穿越。

小夥伴們可能又一臉懵逼了,一下子又出來這麼多名詞,沒關係,這裡我們暫且不去管它們,等我們後面實現的時候,還會提到他們,這裡提前感興趣的可以看看這篇文章:webrtc protocols

WebRTC入門學習之初識WebRTC

引言 先宣告本人只是小小實習生一枚,若有不正確的,希望大家幫忙指正。一 webrtc基本架構 二 w3c提供的webrtc api 英文api 個人建議看英文版 中文api 版 三個主要api rtcdatachannel 用以任意應用資料通訊 學習重點 offer answer狀態機變化和ice狀...

WEBRTC開發入門

webrtc結構 首先,從web rtc方面分析webrtc在瀏覽器上的介面結構,在瀏覽器端,webrtc主要實現了三個介面 rtcdatachannel,在peerconnection之上,傳輸自定義資料。mediastream rtcpeerconnection rtcpeerconnectio...

webrtc快速入門

2.rtcpeerconnection 一旦信令過程成功,就可以直接進行caller和callee之間p2p的資料流傳輸了。十.rtcpeerconnection rtcpeerconnection是webrtc的元件,用來穩定高效的處理端對端的資料流通訊。下圖是webrtc的架構圖,標明了rtcp...