2015-04-01 563 views

回答

1
  • 在引擎蓋下,webrtc根據可用的網絡連接收集本地候選人以及通過JS API傳遞給它的ice服務器列表。
  • 一旦冰候選人準備好了,它就會通過onicecandidate API提供給JS層。
  • 如果您使用滴流ICE,則可以通過信號路徑立即將候選人發送給遠程對等體。否則,請等待最後一個(空)候選人,按優先順序排列,將它們添加到offer/answer sdp,並通過信號路徑發送offer/answer。這通常由瀏覽器自動完成。
  • 你可能看這裏的握手規格: https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-09
1

對端設備將不能夠將流媒體使用它自己的私有IP其他同行。所以我們需要NAT穿越服務器(ICE服務器)將私有IP映射到公共IP。

因此,客戶端應用程序應該向ICE服務器請求他自己的ICE候選人「哪些是公共ID」。

首先呼叫者要求他的公共IP(ICE候選者)並通過信令服務器將其發送給另一個對等者。

當其他人收到候選人時,他還向ICE服務器詢問了他自己的候選人,並將其發回給主叫方。

當兩個對等體彼此擁有對方候選人(公共IP)時,他們可以進行P2P流傳輸。

enter image description here

ICE問題

20%,ICE服務器 - STUN協議將無法提供公共IP。因爲兩個媒體設備位於對稱NAT後面!或者防火牆阻止P2P流量!

在這種情況下,P2P流將不可靠! 爲了解決這些問題,我們必須使用外部媒體轉發服務器 - TURN服務器是由ICE服務器

enter image description here

0

這裏所支持的協議是一個例子:

connection.onicecandidate = function(newRTCPeerConnectionIceEvent) { 

    // a new candidate has been created 
    var newRTCIceCandidate = newRTCPeerConnectionIceEvent.candidate; 
    // could send this to the remote peer 
}; 

候選人代表的目的地(發送或接收)媒體流和在SDP將看起來像這樣:

a=candidate:1 1 UDP 2130706431 10.0.1.1 8998 typ host