【问题标题】:RTCPeerConnection fails when peers on different networks当不同网络上的对等点时,RTCPeerConnection 失败
【发布时间】:2021-10-30 07:23:01
【问题描述】:

我有一个原型网络应用程序,它使用 WebRTC Javascript API 进行(单向)实时视频流传输(使用 RTCPeerConnection API),旨在从桌面网络应用程序流式传输到 iOS 混合应用程序。

在当前状态下,当两个设备处于同一 WiFi 连接时,应用程序成功地流式传输视频。但是,当我为 iOS 对等端关闭 WiFi,并使用移动数据/4G 连接,然后尝试重新协商 RTCPeerConnection 时,RTCPeerConnection 以失败状态结束。

我正在向 RTCPeerConnection 实例提供 Google 的公共 STUN 服务器。

        const config: RTCConfiguration = {
            'iceServers': [
                {
                    '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',
                    ]
                },
            ]
        }
        let peer = new RTCPeerConnection(config)

我不确定还有哪些其他代码可以帮助调试它。同样,当对等方位于同一个 WiFi 网络上时,它会按预期工作。如果我将第二个对等点(iOS 设备)从 WiFi 中取出并使用移动数据,它会停止工作,并且 RTCPeerConnection 最终具有 ICE 连接状态failed。如果设备都在 WiFi 上,但在不同的 WiFi 网络上,我无法测试会发生什么。

如果有人对调试有任何建议,我也将不胜感激。我附加了一些事件处理程序来尝试调试。

        peer.oniceconnectionstatechange = (ev: Event) => {
            console.log('RTCPeerConnection ICE state change', peer.iceConnectionState, JSON.stringify(ev))
        }

        peer.onicecandidateerror = (ev: RTCPeerConnectionIceErrorEvent) => {
            console.log('ice candidate error', JSON.stringify(ev))
        }

从第一个,我得到这个日志行:

RTCPeerConnection ICE state change disconnected {"isTrusted":true}

然而,后一个,on error handler,永远不会被调用。

【问题讨论】:

    标签: typescript webrtc stun


    【解决方案1】:

    1/ STUN 服务器不保证可以建立连接。需要 TURN 服务器以获得更高的成功率。

    2/ onicecandidate 错误仅处理与收集本地候选人相关的错误,而不是未能建立与对等点的连接,这是预期的。

    【讨论】:

      猜你喜欢
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2016-12-28
      相关资源
      最近更新 更多