WebRTC总是在我们的局域网外使用
我的问题: 我编写了一个基于WebRTC的视频聊天应用程序。当两个客户端在局域网内连接时, 他们总是获得点对点连接。但是当我们局域网的客户机与 我们局域网外的客户端始终是对等连接。当移动设备连接时 彼此之间经常是一个接一个的 我的期望: 我知道对称NAT问题,预计20%到30%的连接需要转向连接。但到目前为止 我从来没有在局域网外找到任何两个客户端来获得点对点连接——这似乎是错误的 我的设置: 我在Chrome、Firefox、Electron、Android和iOS设备上进行了测试 我使用Coturn服务器作为眩晕/转身服务器。服务器可以通过internet访问 我通过WebRTC总是在我们的局域网外使用,webrtc,stun,turn,coturn,Webrtc,Stun,Turn,Coturn,我的问题: 我编写了一个基于WebRTC的视频聊天应用程序。当两个客户端在局域网内连接时, 他们总是获得点对点连接。但是当我们局域网的客户机与 我们局域网外的客户端始终是对等连接。当移动设备连接时 彼此之间经常是一个接一个的 我的期望: 我知道对称NAT问题,预计20%到30%的连接需要转向连接。但到目前为止 我从来没有在局域网外找到任何两个客户端来获得点对点连接——这似乎是错误的 我的设置: 我在Chrome、Firefox、Electron、Android和iOS设备上进行了测试 我使用Co
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在大多数情况下建立对等连接的希望。