WebRTC PeerConnection无法启动

时间:2016-08-04 13:59:28

标签: android webrtc voip

主要是WebRTC工作正常,但有时候,一些调用失败了。例如,未建立20个呼叫中的一个,因为PeerConnection无法开始工作。

让我们看看来电者方面的正确工作流程。

-> create offer
-> (sdp observer) getting SDP
-> (peer observer) start gathering candidates
-> (peer observer) adding candidates to SDP
-> set local description with type - offer
-> (signaling) sending SDP
   **** accepting call in other side ****
-> (signaling) receive answer SDP
-> set remote description with type - answer
-> (establishing call)
-> ...................

为了澄清事情,我想展示一下Callee方面的呼叫流程。但我认为每个WebRTC应用程序都是相同的流程,而不仅仅是我的问题。

-> (signaling) receiving  SDP offer
    *****  accepting call  ****
-> set remote description type offer
-> create answer 
-> (sdp observer) getting SDP
-> (peer observer) start gathering candidates
-> (peer observer) adding candidates to SDP
-> set local description with type - answer
-> (signaling) sending SDP answer
-> ...................

现在,我们对正确的呼叫流程充满信心。这是问题所在。 WebRTC不时调用失败,因为PeerConnection.Observer没有接收到onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState)。因此,当呼叫失败并且成功时,我从设备收到相同的日志,只有一个区别。 如果呼叫失败,PeerConnection.Observer状态,没有将状态从NEW更改为CHECKING!为什么会这样?

正如我之前所说,它只是时间发生。但还是不明白有什么不对?因为调用之间只有一个区别,所以它的PeerConnection改变了观察者状态。也许我只使用单个RELAY候选人来建立电话,也许我这么快就收集候选人?

1 个答案:

答案 0 :(得分:1)

正如@Mattm已经提到的,这与ICE有很大关系。你有STUN/TURN服务器吗?如果没有,请尝试here。创建一个帐户,并在创建peerconnection时使用numb.viagenie.ca:3478作为ICE服务器。

在本地网络之外,您必须处理更严格的防火墙,STUN服务器可以“打孔”#34; (开放端口)允许客户端之间的对等连接。在生产中使用WebRTC时,您需要一个。不要担心有很多公共场所,或者如果你愿意,你可以自己主持一个。

当在严格NAT后面的客户端之间建立连接时(在蜂窝和学校/公司网络上发生很多事情),您通常无法将它们与点对点连接起来。那就是TURN进来的地方,它是一个中继服务器,允许所有客户端通过它发送数据/媒体。

TURN协议还实现了STUN协议,因此如果您使用单个TURN服务器,那么您就可以了。当您扩展到大量客户端时,您可能需要考虑托管多个客户端。