WebRTC始终在局域网之外使用TURN

时间:2018-10-18 13:21:29

标签: webrtc stun turn coturn

我的问题:

我写了一个基于WebRTC的视频聊天应用程序。当两个客户端连接到我们的局域网内时, 他们总是获得对等连接。但是,当来自我们局域网的客户端与 局域网之外的客户端始终是点对点连接。当移动设备连接时 彼此之间通常是TURN-TO-TURN。

我的期望:

我知道对称NAT问题,并且希望所有连接中有20%到30%需要TURN连接。但是到目前为止 我从未在我们的局域网之外找到任何两个客户端来建立对等连接-这似乎是错误的。

我的设置:

我在Chrome,Firefox,Electron,Android和iOS设备上进行了测试。

我将 Coturn 服务器用作STUN / TURN服务器。该服务器可通过互联网访问。

我通过peerConnection.getStats()检查有以下物品 item.type === 'googCandidatePair' && item.googActiveConnection === 'true'并查看其 item.googLocalCandidateTypeitem.googRemoteCandidateType。如果类型类似于relay,则按TURN 连接。

我的分析

当我的系统显示涉及TURN服务器并且我停止了 Coturn 时,视频冻结了-所以我想我的应用程序是 反馈是真的。

我看到双方都有hostsrflxrelay ICE候选人。因此,我的应用程序的STUN / TURN配置似乎正确。

我什至在我的应用程序中构建了一个测试设置,该应用程序尝试通过视频和 音频已禁用,并尝试通过peerConnection数据通道来回发送数据。然后,我按照说明检查统计数据 以上,但其行为相同:我们局域网中的点对点。总是在外面转。

在测试期间,我发现peerConnection.oniceconnectionstatechange花费了很长时间(约12秒)才能从 connectedcompleted。但是同样,只有局域网之外的同伴,而不是内部的同伴。但是,数据通道打开 更早的工作。在致电completed之前等待getStats()不会改变我的结果。 AFAIK仅 呼叫者的状态为completed

我的希望:

是否有人暗示我可以更改或如何改善或扩展支票?哪个组件可能是 问题(应用代码,网络,STUN服务器,TURN服务器)?

0 个答案:

没有答案