WebRTC PeerConnection 没有启动
Posted
技术标签:
【中文标题】WebRTC PeerConnection 没有启动【英文标题】:WebRTC PeerConnection doesn't start 【发布时间】:2016-08-04 13:59:28 【问题描述】:主要是 WebRTC 工作正常,但有时,某些调用会失败。例如,二十个调用中的一个没有建立,因为 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)
-> ...................
为了澄清事情,我想展示被叫方的呼叫流程。但我认为每个 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 候选人来建立呼叫,也许我这么快收集候选人?
【问题讨论】:
您使用的是香草冰(不是涓流冰)?故障有时会发生在具有相同网络条件(特别是 NAT)的相同端点还是不同端点? @mattm 在设备中使用 vanilla Ice 和相同的 EndPoint。 【参考方案1】:正如@Mattm 已经提到的,这很有可能与ICE
有关。你有STUN/TURN
服务器吗?如果没有,请尝试here。创建一个帐户并在创建peerconnection
时使用numb.viagenie.ca:3478
作为ICE
服务器。
在您的本地网络之外,您必须处理更严格的防火墙,STUN
服务器可以“打孔”(打开端口)以允许客户端之间的点对点连接。在生产中使用WebRTC
时,您需要一个。不用担心有很多公共的,或者如果您愿意,您可以自己托管一个。
当在严格的NAT
后面的客户端之间建立连接时(在蜂窝网络和学校/公司网络上经常发生),您通常无法将它们点对点连接。这就是TURN
的用武之地,它是一个中继服务器,允许所有客户端通过它发送他们的数据/媒体。
TURN
协议也实现了STUN
协议,因此如果您使用单个TURN
服务器就可以了。当您扩展到大量客户端时,您可能需要考虑托管多个客户端。
【讨论】:
我已经在使用 Google 示例 STUN 服务器了。无论如何,我认为这是另一个原因问题。 @GensaGames STUN 服务器还是 TURN 服务器?您需要一个 TURN 服务器来覆盖所有网络类型。 嗨,也许这里还有问题。我只使用 Google STUN URI。 但是我以前是怎么打电话的。如果我的连接支持通话中的切换和切换网络。以上是关于WebRTC PeerConnection 没有启动的主要内容,如果未能解决你的问题,请参考以下文章
WebRTC Native M96数据统计-- 使用PeerConnection::GetStats获取WebRTC实时统计信息
WebRTC系列(3):PeerConnection通信建立流程
WebRTC Native M96数据统计-- 使用PeerConnection::GetStats获取WebRTC实时统计信息