为什么我的 WebRTC 连接卡在连接状态?

问题描述 投票:0回答:1

我正在开发一个使用 webRTC 的 Angular 应用程序。该应用程序的目的是显示来自在 Google Cloud Platform VM 上运行的软件并通过 WebRTC 传输的视频流。 我在信令阶段使用 WebSocket,因为该软件提供了 WebRTC 功能,并且该功能包含用于信令阶段的 WebSocket 服务器。 当我在本地运行它时(即在 GCP 虚拟机上运行 Web 应用程序),它运行良好(建立了 webRTC 连接并且我收到了视频)。

当我在另一个网络上运行网络应用程序时,问题就出现了。 我知道WebRTC依赖于STUN和TURN服务器。在我的具体情况下,STUN 服务器不应该工作,因为 GCP 虚拟机没有外部(公共)IP 地址。 在这种情况下我需要一个 TURN 服务器,对吗?

出于测试目的,我使用公共 TURN 服务器:

iceServers = [
    { urls : turn:freeturn.net:3478, 
      username : "free", 
      credential : "free"
    }
]

但是问题来了: 当我尝试与另一台计算机(不是 GCP VM)上运行的 Web 应用程序建立 webRTC 连接时,连接陷入“连接”状态,并且ice候选状态为“检查”。几秒钟后,连接超时。我不明白我做错了什么(当然我在 WebRTC 连接的配置中添加了 TURN 服务器)。

最后一件重要的事情是,由于我的虚拟机没有外部 IP,我必须找到一种解决方法来成功建立信令阶段的 webSocket 连接。此解决方法是一个简单的 SSH SOCKS 代理。也许这个代理可能是我的连接被卡住的原因?

我当然尝试过调试这个混乱,显然 Web 应用程序想要使用 TURN 服务器作为 ICE 候选服务器(正如它应该的那样),但看起来服务器没有选择这个 TURN 服务器。

您知道我的连接为何卡住吗?我可以提供您需要的任何东西,只需询问即可。

我尝试过使用 TURN 服务器和不使用 TURN 服务器,但它没有改变任何事情。我还检查了 TURN 服务器是否使用 TrickleICE 工作(https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/)并且它似乎正在工作。唯一的小细节是,每次我将其添加到我的配置中时,我都会收到icecandidateerror 701,如果我正确理解了我读到的所有不同内容,这不一定是致命的。

谢谢!

google-cloud-platform websocket webrtc socks turn
1个回答
0
投票

更新:也许这会对某人有所帮助,但问题是所有公共 STUN/TURN 服务器都无法正常工作。我使用 Coturn 实现了自己的服务器,现在它运行完美!

© www.soinside.com 2019 - 2024. All rights reserved.