【问题标题】:Get available and active ICE candidates for WebRTC connection为 WebRTC 连接获取可用和活跃的 ICE 候选者
【发布时间】: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,但在连接失败的第二种情况下,connectionStateICEConnectionState 是“失败”(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


    【解决方案1】:

    这听起来像long-standing bug in webrtc。使用 TURN 服务器通常可以解决问题,这解释了为什么这不是任何人都可以优先处理的问题。

    chrome://webrtc-internals 是调试此类问题的一站式地点。

    【讨论】:

    • (可能应该在我最初的问题中提到这一点,但是:) 我已经在我的 RTCPeerConnection 配置中同时使用了 STUN 和 TURN 服务器,但是如果用户 A 建立了连接,连接仍然会以某种方式失败. 这就是为什么我认为并非所有 ICE 候选人都能接触或被其他用户使用
    • 查看 chrome://webrtc-internals,实际上看起来两个用户都看到了相同的 4 个 ICE 候选对象,但如果用户 A 发起信令,则没有选择 ICE 候选对象对
    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多