【发布时间】:2019-10-25 07:23:05
【问题描述】:
我无法使用两个单独的公共 IP 地址在浏览器之间建立 WebRTC 连接,这两个公共 IP 地址位于 NAT 后面(也就是经常通过互联网),它们不允许仅使用 STUN 信息进行连接,而是需要 TURN 服务器协助。
我已经成功地在 LAN 中建立连接,但到目前为止,我还没有遇到任何关于如何使用 javascript webrtc 建立简单的基于 TURN 的连接的说明。似乎所有教程在收到“典型中继”类型的 sdp 并在那里结束时都很高兴。我也从我的 coturn 那里得到了“典型中继”sdp,但是我从来没有让 ICE 使用 TURN over internet 进行连接,而且我没有找到关于这种情况的说明(我认为这应该是非常典型的)。
根据 Firefox 的 about:webrtc -page,我尽最大努力为我提供了 ICE 连接工作,其中 ICE 原始连接的远程和本地候选者都是具有正确 TURN 服务器公共 IP 和 UDP 端口的转接地址。然而,这个 ICE 连接由于我不知道的原因而失败。
另外,我试图找到与 TURN 服务器相关的所有神秘安全要求,但我不确定 Chrome 或 Firefox 究竟需要什么级别的设置。我目前的 coturn 配置如下:
external-ip=13.X.X.X/172.X.X.X
listening-port=3478
log-file=stdout
lt-cred-mech
max-port=36980
min-port=36940
fingerprint
no-cli
realm=example.com
user=usernamehere:passwordhere
verbose
cert=/etc/letsencrypt/live/example.com/cert.pem
pkey=/etc/letsencrypt/live/example.com/privkey.pem
no-sslv2
no-sslv3
我希望看到有人编写了一个简单代码的教程或说明,该代码实际上用于使用 webrtc 和 TURN 服务器在互联网上传递数据。到目前为止,我已经找到了仅使用相同浏览器、使用 websockets 或使用 STUN 信息成功的示例。
只要成功建立 ICE 连接就可以了。
编辑:结果(双关语)我的信号发送方法太慢了。要使用基于 UDP 的 TURN 中继服务器,您需要比我的信令方法(人工复制粘贴到另一个选项卡)更快地传递候选人。 Websocket 提供了一种足够快速地传递信号信息的方法。
【问题讨论】:
-
您仍然可以在同一浏览器中使用现有的“选项卡到选项卡”测试页面测试中继/仅转连接。在您的
RTCIceTransportPolicy对象中,如果您将冰传输策略设置为relay而不是default(即all),那么您当前的 webRTC 会话将尝试仅使用中继/转弯候选人建立,即使他们在同一个网络。 -
这肯定会加快调试速度,谢谢!
-
好的,我使用这个的第一个新错误是 DOMException "Unknown ufrag (121212ff)"
-
嗨@Kridls_834,我面临同样的问题。你能解决这个问题吗?