【发布时间】:2022-02-03 18:31:41
【问题描述】:
我在使用不同网络上的 2 个用户之间的 WebRTC 连接时遇到了一个奇怪的问题。
用户 A 使用手机热点,用户 B 使用我家的 WiFi。
当用户 A 是第一个加入页面时,该用户向用户 B 发送了一个报价和一些 ICE 候选。用户 B 向用户 A 发送了一个答案和一些 ICE 候选,但大约 20 秒后,ICE 连接状态更改为“失败”(safari)或“断开连接”(chrome)。用户 A 和用户 B 无法建立有效的 WebRTC 连接。
但是,当用户 B 是第一个加入页面并创建优惠,并且用户 A 发回答案时,两个用户都可以毫无问题地连接。
在这两种情况下,用户 A 和用户 B 都有正确的 localDescription 和 remoteDescription,但在连接失败的第二种情况下,connectionState 和 ICEConnectionState 是“失败”(safari)或两个用户都“断开连接”(chrome)。
我在 RTCPeerConnection 的配置中同时使用了 TURN 和 STUN 服务器,并使用 Trickle ICE WebRTC example 测试了服务器是否正常工作
我怀疑用户 A 或用户 B 无法查看或使用其他用户的所有可用 ICE 候选者,但我不确定如何最好地解决问题。有没有一种简单的方法可以查看给定RTCPeerConnection 对象的可用/活动 ICE 候选对象?
更新:
查看 chrome://webrtc-internals(如 philipp-hancke 建议的那样)表明
如果用户 B 发送报价:
提供 4 个 ICE 候选对(2 个host、1 个srflx、1 个relay)
为用户 B 选择使用外部 IP 的 ICE 候选对,为用户 A 选择 TURN 服务器中继。连接有效。
如果用户 A 发送报价:
再次有 4 个 ICE 候选对可用(2 个host、1 个srflx、1 个relay),但 ICE 候选对显示 (not connected) 并且没有建立 WebRTC 连接
更新 2: 我已经接受了 Philipp Hancke 的回答,因为它回答了我最初提出的问题,即使我还没有解决我的问题。我问了一个新问题here。
【问题讨论】:
标签: webrtc ice rtcpeerconnection