为 WebRTC 连接获取可用且活跃的 ICE 候选人
Get available and active ICE candidates for WebRTC connection
我在不同网络上的 2 个用户之间的 WebRTC 连接遇到了一个奇怪的问题。
用户 A 正在使用 phone 热点,用户 B 在我家的 WiFi 上。
当用户 A 是第一个加入该页面时,该用户向用户 B 发送了一个报价和一些 ICE 候选。用户 B 向用户 A 发送了一个答案和一些 ICE 候选,但是大约 20 秒后,ICE连接状态更改为“失败”(safari) 或“断开连接”(chrome)。用户 A 和用户 B 无法建立有效的 WebRTC 连接。
但是,当用户 B 第一个加入页面并创建报价,并且用户 A 发回一个答案时,两个用户都可以毫无问题地连接。
在这两种情况下,用户 A 和用户 B 都有正确的本地描述和远程描述,但在连接失败的第二种情况下,connectionState
和 ICEConnectionState
是“两个用户都失败”(Safari)或“断开连接”(chrome)。
我在 RTCPeerConnection
的配置中同时使用了 TURN 和 STUN 服务器,并使用 Trickle ICE WebRTC example
测试了服务器是否正常工作
我怀疑用户 A 或用户 B 无法看到或使用其他用户的所有可用 ICE 候选项,但我不确定如何最好地解决该问题。有没有一种简单的方法可以查看给定 RTCPeerConnection
对象的哪些 ICE 候选人可用/活跃?
更新:
查看 chrome://webrtc-internals(作为 philipp-hancke sugested)表明
如果用户 B 发送报价:
4 个 ICE 候选对可用(2 host
、1 srflx
、1 relay
)
使用用户 B 的外部 IP 和用户 A 的 TURN 服务器中继的 ICE 候选对被选中。连接有效。
如果用户 A 发送报价:
同样有 4 个 ICE 候选对可用(2 host
、1 srflx
、1 relay
),但 ICE 候选对显示 (not connected)
并且没有建立 WebRTC 连接
更新二:
我已经接受了 Philipp Hancke 的回答,因为它回答了我最初提出的问题,即使我还没有解决我的问题。我问了一个新问题 here。
这听起来像 long-standing bug in webrtc。使用 TURN 服务器通常可以解决这个问题,这也解释了为什么这不是任何人都应该优先处理的问题。
chrome://webrtc-internals 是调试此类问题的 one-shop-stop 位置。
我在不同网络上的 2 个用户之间的 WebRTC 连接遇到了一个奇怪的问题。
用户 A 正在使用 phone 热点,用户 B 在我家的 WiFi 上。
当用户 A 是第一个加入该页面时,该用户向用户 B 发送了一个报价和一些 ICE 候选。用户 B 向用户 A 发送了一个答案和一些 ICE 候选,但是大约 20 秒后,ICE连接状态更改为“失败”(safari) 或“断开连接”(chrome)。用户 A 和用户 B 无法建立有效的 WebRTC 连接。
但是,当用户 B 第一个加入页面并创建报价,并且用户 A 发回一个答案时,两个用户都可以毫无问题地连接。
在这两种情况下,用户 A 和用户 B 都有正确的本地描述和远程描述,但在连接失败的第二种情况下,connectionState
和 ICEConnectionState
是“两个用户都失败”(Safari)或“断开连接”(chrome)。
我在 RTCPeerConnection
的配置中同时使用了 TURN 和 STUN 服务器,并使用 Trickle ICE WebRTC example
我怀疑用户 A 或用户 B 无法看到或使用其他用户的所有可用 ICE 候选项,但我不确定如何最好地解决该问题。有没有一种简单的方法可以查看给定 RTCPeerConnection
对象的哪些 ICE 候选人可用/活跃?
更新:
查看 chrome://webrtc-internals(作为 philipp-hancke sugested)表明
如果用户 B 发送报价:
4 个 ICE 候选对可用(2 host
、1 srflx
、1 relay
)
使用用户 B 的外部 IP 和用户 A 的 TURN 服务器中继的 ICE 候选对被选中。连接有效。
如果用户 A 发送报价:
同样有 4 个 ICE 候选对可用(2 host
、1 srflx
、1 relay
),但 ICE 候选对显示 (not connected)
并且没有建立 WebRTC 连接
更新二: 我已经接受了 Philipp Hancke 的回答,因为它回答了我最初提出的问题,即使我还没有解决我的问题。我问了一个新问题 here。
这听起来像 long-standing bug in webrtc。使用 TURN 服务器通常可以解决这个问题,这也解释了为什么这不是任何人都应该优先处理的问题。
chrome://webrtc-internals 是调试此类问题的 one-shop-stop 位置。