添加 ice candidates 后 WebRTC 连接失败

WebRTC is failing to connect after ice candidates have been added

我正在 JavaScript 中制作一个本地网络聊天应用程序,我可以在任何一台计算机上的两个选项卡之间进行连接,但是当我尝试连接两台计算机(在同一个 wifi 网络上)时,它失败。

有效方法:同一台计算机上的两个选项卡(即使浏览器不同,例如 chrome 选项卡<->firefox 选项卡)。

什么不起作用:两台不同的计算机(例如笔记本电脑<->台式机),即使在同一网络上(如果其中一台设备是页面的主机) ).

我试图从 chrome://webrtc-internals/ 获取信息,这似乎是唯一的主要区别(当它工作时,由斜杠分隔的数字匹配)。 (这是失败案例的冰候选网格 vv)

这是包含故障期间客户端之间交换信息的日志:

这是我正在使用的 STUN/TURN 服务器(以防万一):

const RTC_CONFIG:RTCConfiguration = {
    iceServers:[
        {
            urls: ["turn:turn.anyfirewall.com:443?transport=tcp"],
            credential: "webrtc",
            username: "webrtc"
        },
        {
            urls: ["turn:192.158.29.39:3478?transport=tcp"],
            credential: "JZEOEt2V3Qb0y27GRntt2u2PAYA=",
            username: "28224511:1379330808"
        },
        {
            urls: [
                "stun:stun.l.google.com:19302",
                "stun:stun1.l.google.com:19302",
                "stun:stun2.l.google.com:19302",
                "stun:stun3.l.google.com:19302",
                "stun:stun4.l.google.com:19302",
            ]
        },
    ]
};

编辑(更多信息):

如果 TURN 服务器、STUN 服务器或两者都被删除,代码将继续以同样的方式失败。

这是我连接两个选项卡时的样子:

这是我在同一个 WiFi 网络上连接两台计算机时的样子(失败):

编辑 2(测试进度):

在使用 https(和 wss 信号)设置测试服务器后,LAN 连接仍然无法正常工作,而不同的网络连接工作(例如,同一房间的台式机 <-> 笔记本电脑不工作,笔记本电脑<->phone 在蜂窝网络上确实有效。)

因为客户端和服务器不在同一台机器上, 当您从浏览器访问媒体时,出于安全原因,您必须在服务器上安装 SSL 证书。

问题似乎与谁在与谁连接有关,可以通过将页面托管服务器设置为与任一连接设备不同的设备来解决。

WebRTC 似乎不喜欢页面主机与连接对等设备之一相同的设备。

为清楚起见,以下是不同环境中的设备连接时发生的情况:

Network 1 devices:
 host (webpage host)
 localA
 localB
Network 2 devices:
 remoteA
 remoteB

Connections:
host    <> localA  [fails]
localA  <> localB  [succeeds]
remoteA <> remoteB [succeeds]