2015-04-01 560 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