我花了几天时间寻找连接问题,但没有任何运气。我正在尝试使用 Kurento 实现一个相对简单的 one2one 调用。
下面你会看到一个Kurento的调试日志,其中有一个可以建立连接的情况和一个连接失败的情况。
如果您需要更多日志(例如客户端、信令服务器、tcpdump 或 Kurento 的跟踪日志,请告诉我,我会提供!)
非常感谢任何帮助或新的输入!
问题描述:
在大约 30% 的情况下,无法建立 WebRTC 连接。不幸的是,当可以建立连接时,我缺乏任何类型的模式,而当不能建立时,它似乎完全是随机的。我在同一个网络中,使用相同的设备,使用相同的 TURN 服务器,使用相同的信令协议,但在 30% 的情况下无法建立连接。
当我在本地运行应用程序时,它似乎更可靠地工作,几乎可以 100% 的时间建立连接(或者甚至可能 100% 的时间,我已经测试了很多次,我失去了轨道)。我使用 docker 在本地设置基础设施,并在不同的网络中运行不同的容器(TURN、Kurento、Signalling)以模拟生产部署。
我们在开发和生产环境中遇到相同的行为。在我们的开发环境中,我们绝对没有防火墙,所以这似乎不是问题。
我试图找到问题的原因:
大多数情况下,我一直在比较有效案例和无效案例的日志,但我没有发现它们之间有任何显着差异可以指出我的问题。
我已经通过 TURN 服务器(使用 Firefox 和 force_relay 标志)和直接通过 Kurento 测试了 WebRTC 连接,但在这两种情况下,大约 30% 的情况下连接失败。
我尝试过滤所有不是接力候选人的 ICE 候选人。
我已经嗅探了我们的信令服务器(也控制 Kurento)和 Kurento 之间的流量,以查看交换的 JSON RPS 消息的任何差异,但它们似乎基本相同。
我已经使用这个工具测试了我们的 STUN 和 TURN 服务器:https : //webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 我得到了看起来正确的 serverreflexive 和 relay 候选
我已经嗅探了成功和不成功连接的客户端的流量,但可以发现显着差异
我已经简化了 Kurento 媒体管道(没有录制,没有集线器),但行为是一样的
我使用了不同的浏览器(Chrome、Firefox 和原生 iOS 实现),但行为是相同的
可以建立连接的情况的Kurento调试日志:
https://gist.github.com/omnibrain/2bc7ad54f626d278d3c8bac29767ac4c
无法建立连接的Kurento调试日志:
https://gist.github.com/omnibrain/f7caee04a5c6d77ea22a9ccfa95dd825