【问题标题】:WebRTC Mobile - Audio not working unless on same wifiWebRTC Mobile - 除非在同一个 wifi 上,否则音频无法正常工作
【发布时间】:2021-01-07 22:54:27
【问题描述】:

我正在使用 react-native-webrtc 来处理其中的 WebRTC 部分。 我正在使用 Websockets 发出信号并使用 ICE 滴流来跟踪 ICE 候选者。

我将我的 ICE 候选者排队,直到在被调用方调用 setLocalDescription。然后我为队列中的每个候选人添加IceCandidate。

在调用方我正在做同样的事情,并且在调用 setRemoteDescription 之前不处理我的 ICE 候选人。

我只做音频,所以没有使用视频。

当我在同一网络上使用两台移动设备进行测试时,我没有遇到任何问题。

但是,如果我断开一台设备与 WiFi 的连接,通话仍然可以正常连接,只是在任一设备上都听不到音频。

onConnectionStateChange 处理程序仍将返回“已连接”,而 onIceGatheringStateChanged 仍将返回“完成”。

我想也许我需要使用 TURN 服务器来完成这项工作,所以我开始使用 Twilio 的付费 TURN/STUN 服务器,但问题仍然存在。

有什么想法吗?

【问题讨论】:

    标签: node.js react-native websocket webrtc turn


    【解决方案1】:

    背景

    好的,所以您必须了解 RTC 平台上的 P2P 连接的一些背景知识。因此,它开始了(非常简短的版本):

    • 为了建立连接,您必须在两个客户端之间建立直接连接(很明显,我知道)。为了找到这条路线,您需要网络服务器上的帮助。

    • 这就是为什么您设置本地 SDP 并设置我们可以访问的服务器。 ICE、TURN、STUN(您可以找到任何信息,例如this one)。现在 ICE 候选是最明显的一个,因为此服务器端点位于您的本地网络中,这就是为什么您的版本不能与不同的网络一起使用。

    • 对,您必须使用 TURN/STUN 来查找 NAT 并纠正对等点之间的路由。大多数 TURN 服务器都是私有且付费的,但对于负载较少的应用程序,您可能会使用公共 STUN 服务器,这就足够了。

    你可以在那里找到很多可用的。一个前。 is here.

    stun.l.google.com:19302
    stun1.l.google.com:19302
    stun2.l.google.com:19302
    

    解决方案

    现在来解决您的问题。如果您认为您已将设备与信号连接起来,这并不意味着您已连接设备。 (澄清一下,如果您的设备上没有媒体,您的 RTC 连接将无法建立,而不仅仅是音频)。

    在您的设备上使用它的 TURN/STUN 服务器时出现问题,您必须跟踪在 setRemoteDescription 期间建立的 SDP 并检查服务器是否包含在内。此外,总有一个 Google demo 运行良好。

    更新

    为了跟踪如何设置远程 SDP 和建立连接,oyu 必须打印将用于设置的候选项。为此,您必须打印候选人在 setLocalDescription 和 setRemoteDescription 期间收集的信息。

    在您收集候选人的地方添加日志以打印信息。您必须看到,STUN,TURN 候选人将在那里。下面是 Java 中的 ex。 ICE这个词不应该打扰你,因为它只是意味着在ICE遍历之后会找到候选人。

    // Listen for local ICE candidates on the local RTCPeerConnection
    peerConnection.addEventListener('icecandidate', event => {
        if (event.candidate) {
            // Here should be your part where you are sending this candidate to your signaling channel
    
            // Add logging to print entire candidate information. You should see some data related to ICE, TURN. 
        }
    });
    

    【讨论】:

    • 嗨 Genesa,我正在使用 Twilio 的付费 STUN/TURN 服务器。 (3 TURN 和 1 STUN 服务器)建立我的 RTCPeerConnection 时。您能否详细说明您的意思:“在您的设备上使用 TURN/STUN 服务器的问题,您必须跟踪在 setRemoteDescription 期间建立的 SDP 并检查服务器是否包含在内。”
    • @mocode10 1. 在这种情况下请跳过使用 TURN 服务器,因为在使用私有 TURN 服务器时可能会有一些注意事项。上面的问题是关于路由 2 不同网络之间的对等连接。 2.需要调试SDP信息,在setRemoteDescription期间本地设置。只需将其打印到日志中即可查看 SDP 内是否有 STUN/TURN 服务器。
    • Genesa 能否提供一个示例,说明 STUN/TURN 服务器如何出现在 SDP 对象中?
    • c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:oC9F a=ice-pwd 是我所拥有的,但我没有看到我的实际眩晕服务器端点。
    • @mocode10 我希望你能真正解决你的问题。因为如果它与 STUN 服务器无关(并且它们被提供给 SDP),那么问题可能会更复杂。无论如何,请随时查看 WebRTC 示例。
    猜你喜欢
    • 2021-05-17
    • 2015-06-08
    • 2011-04-09
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多