WebRTC总是在我们的局域网外使用

WebRTC总是在我们的局域网外使用,webrtc,stun,turn,coturn,Webrtc,Stun,Turn,Coturn,我的问题: 我编写了一个基于WebRTC的视频聊天应用程序。当两个客户端在局域网内连接时, 他们总是获得点对点连接。但是当我们局域网的客户机与 我们局域网外的客户端始终是对等连接。当移动设备连接时 彼此之间经常是一个接一个的 我的期望: 我知道对称NAT问题,预计20%到30%的连接需要转向连接。但到目前为止 我从来没有在局域网外找到任何两个客户端来获得点对点连接——这似乎是错误的 我的设置: 我在Chrome、Firefox、Electron、Android和iOS设备上进行了测试 我使用Co

我的问题:

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

我的期望:

我知道对称NAT问题,预计20%到30%的连接需要转向连接。但到目前为止 我从来没有在局域网外找到任何两个客户端来获得点对点连接——这似乎是错误的

我的设置:

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

我使用Coturn服务器作为眩晕/转身服务器。服务器可以通过internet访问

我通过
peerConnection.getStats()
检查带有
item.type=='googCandidatePair'&&item.googActiveConnection=='true'
并查看其
item.GoogGlocalCandidateType
item.googRemoteCandidateType
。如果类型类似于
继电器
,则轮到它了 连接

我的分析:

当我的系统说涉及TURN服务器时,我停止了Coturn,视频就会冻结——所以我猜我的应用程序是这样的 反馈是真实的

我看到两侧都有
主机
srflx
中继
ICE候选者。因此,我的应用程序的眩晕/转身配置似乎是正确的

我甚至在我的应用程序中构建了一个测试设置,它试图通过视频和视频连接到指定的机器人对等点 禁用音频并尝试通过
peerConnection
数据通道来回发送数据。然后我检查所述的统计数据 但是它的行为是一样的:在我们的局域网中是对等的。总是在外面转

在测试期间,我发现
peerConnection.oniceconnectionstatechange
需要很长时间(约12秒)才能从
已连接
已完成
。但同样地,只有局域网外的对等方,而不是局域网内的对等方。但是,数据通道会打开 早些时候,他开始工作了。在调用
getStats()
之前等待
completed
不会更改我的结果。阿法伊克 调用者有一个
已完成
状态

我的希望:

有没有人提示我可以改变什么,或者如何改进或延长我的支票?哪个组件可能是
问题(应用程序代码、网络、眩晕服务器、翻转服务器)?

嘿,这正是我在WebRTC应用程序上看到的行为。每一个以局域网外的对等点为目标的连接都会产生一个中继连接。与此同时,您@Tsunamis是否找到了与您的案例相关的任何原因?我还发现,jitsi(作为参考WebRTC应用程序)能够在我的计算机(LAN)和智能手机(移动网络)之间使用中继(prflx,srflx)以外的连接类型创建对等连接。在我的应用程序中,它总是导致继电器连接。很抱歉,我从未找到解决此问题的方法,并且不再为该公司工作。好的。无论如何,谢谢你。与此同时,我发现在我的用例中,连接类型
中继
被正确检测到,因为两个对等方(计算机和移动电话)都是对称NAT(这里是一个识别NAT类型的工具)后面网络的参与者,其中每个目标服务器的源端口都在变化。它以某种方式摧毁了我对WebRTC在大多数情况下建立对等连接的希望。