生活随笔
收集整理的這篇文章主要介紹了
WebRTC通话原理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
WebRTC通話原理
目錄
媒體協(xié)商-音視頻編解碼 網(wǎng)絡(luò)協(xié)商 STUN TURN 媒體協(xié)商+網(wǎng)絡(luò)協(xié)商 數(shù)據(jù)的交換通道 WebRTC API 一對一通話
1. 媒體協(xié)商-音視頻編解碼
比如: Peer-A端可支持VP8、 H264多種編碼格式,而Peer-B端支持VP9、 H264,要保證二端都正確的編解碼,最簡單的辦法就是取它們的交集H264 有一個(gè)專門的協(xié)議 ,稱為Session Description Protocol (SDP),可用于描述上述這類信息,在WebRTC中,參與視頻通訊的雙方必須先交換SDP信息,這樣雙方才能知根知底,而交換SDP的過程,也稱為"媒體協(xié)商"。
2. 網(wǎng)絡(luò)協(xié)商
彼此要了解對方的網(wǎng)絡(luò)情況,這樣才有可能找到一條相互通訊的鏈路 理想的網(wǎng)絡(luò)情況是每個(gè)瀏覽器的電腦都是私有公網(wǎng)IP,可以直接進(jìn)行點(diǎn)對點(diǎn)連接 實(shí)際情況是:我們的電腦和電腦之間或大或小都是在某個(gè)局域網(wǎng)中, 需要NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)
1. STUN
STUN(Session Traversal Utilities for NAT, NAT會話穿越應(yīng)用程序)是一種網(wǎng)絡(luò)協(xié)議,它允許位于NAT(或多重NAT) 后的客戶端找出自己的公網(wǎng)地址(ip+port),查出自己位于哪種類型的NAT之后以及NAT為某一個(gè)本地端口所綁定的Internet端端口。 使用一句話說明STUN做的事情就是:告訴我你的公網(wǎng)IP地址+端口是什么。 問題是: STUN并不是每次都能成功的為需要NAT的通話設(shè)備分配IP地址的, P2P在傳輸媒體流時(shí),使用的本地帶寬,在多人視頻通話的過程中,通話質(zhì)量的好壞往往需要根據(jù)使用者本地的帶寬確定。 TURN可以很好的解決這個(gè)問題。
2. TURN
TURN的全稱為Traversal Using Relays around NAT,是STUN/RFC5389的一個(gè)拓展,主要添加了Relay功能。如果終端在NAT之后, 那么在特定的情景下,有可能使得終端無法和其對等端(peer)進(jìn)行直接的通信,這時(shí)就需要公網(wǎng)的服務(wù)器作為一個(gè)中繼,對來往的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā) 在STUN分配公網(wǎng)IP失敗后,可以通過TURN服務(wù)器請求公網(wǎng)IP地址作為中繼地址。這種方式的帶寬由服務(wù)器端承擔(dān),在多人視頻聊天的時(shí)候,本地帶寬壓力較小。 以上是WebRTC中經(jīng)常用到的2個(gè)協(xié)議, STUN和TURN服務(wù)器我們使用coturn開源項(xiàng)目來搭建 ICE( Interactive Connectivity Establishment,交互式連接建立) 跟STUN和TURN不一樣, ICE不是一種協(xié)議,而是一個(gè)框架(Framework),它整合了STUN和TURN。 coturn開源項(xiàng)目集成了STUN(打洞)和TURN(中繼)的功能。 網(wǎng)絡(luò)信息:放在 candidate
3. 媒體協(xié)商+網(wǎng)絡(luò)協(xié)商 數(shù)據(jù)的交換通道
從上面我們知道了2個(gè)客戶端協(xié)商媒體信息(SDP)和網(wǎng)絡(luò)信息(candidate),那怎么去交換?是不是需要一個(gè)中間商去做交換?所以我們需要一個(gè)信令服務(wù)器(Signal server)(房間服務(wù)器)轉(zhuǎn)發(fā)彼此的媒體信息和網(wǎng)絡(luò)信息。 訪問到的局域網(wǎng),借助信令服務(wù)器,就可以實(shí)現(xiàn)上面提到的SDP媒體信息及Candidate網(wǎng)絡(luò)信息交換。 信令服務(wù)器不只是交換 媒體信息sdp和網(wǎng)絡(luò)信息candidate,比如: 房間管理 人員進(jìn)出房間
4. WebRTC API
MediaStream : MediaStream用來表示一個(gè)媒體數(shù)據(jù)流(通過getUserMedia接口獲取),允許你訪問輸入設(shè)備,如麥克風(fēng)和 Web攝像機(jī),該 API 允許從其中任意一個(gè)獲取媒體流。 RTCPeerConnection : RTCPeerConnection 對象允許用戶在兩個(gè)瀏覽器之間直接通訊 ,你可以通過網(wǎng)絡(luò)將捕獲的音頻和視頻流實(shí)時(shí)發(fā)送到另一個(gè) WebRTC端點(diǎn)。使用這些 Api,你可以在本地機(jī)器和遠(yuǎn)程對等點(diǎn)之間創(chuàng)建連接。它提供了連接到遠(yuǎn)程對等點(diǎn)、維護(hù)和監(jiān)視連接以及在不再需要連接時(shí)關(guān)閉連接的方法。
5. 一對一通話
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔 為你收集整理的WebRTC通话原理 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。