Webrtc 连接与中继候选人的奇怪行为

Webrtc connection over turn strange behavior with relay candidates

我有两个客户端通过 webrtc 进行通信。 (客户端 A 在 js 中编写,客户端 B 在 Python 中使用 aiortc)。现在碰巧客户端 A 想要从移动网络连接,因此它需要一个转接中继连接。

我已经设置了一个似乎可以完成他的工作的转弯服务器。但现在只有大约 50% 的连接成功。我已经知道他们什么时候成功什么时候失败了:

成功时SDP中继信息:
提供客户 A

a=candidate:3 2 UDP 92217086 172.31.16.8 59986 typ relay raddr 172.31.16.8 rport 59986

响应客户端 B

a=candidate:11 1 UDP 92086015 172.31.16.8 49910 typ relay raddr 172.31.16.8 rport 49910

失败时SDP中继信息:
提供客户 A

a=candidate:7 1 UDP 92151551 172.31.16.8 49871 typ relay raddr 172.31.16.8 rport 49871

响应客户端 B

a=candidate:5820bb1602563a80c76891a80be14933 1 udp 16777215 18.185.84.96 53279 typ relay raddr 172.31.1.103 rport 49244

重要的区别是客户端B的响应中显示的IP地址,在成功的情况下是客户端B所在网络的IP地址,在失败的情况下是turnserver的IP地址(18.185.84.96).

其实我不明白为什么有时给turnserver的IP有时不给,什么意思turnserver的IP地址不能用...

有人知道从哪里开始寻找问题吗?

似乎我们的回合服务器配置错误。
我不知道哪里配置有误,因为遗憾的是我无法访问 turn 服务器的配置。
但是我通过在我的本地机器上部署一些轮流服务器进行了测试,当它们没有正确配置时它们的行为相似。通过查看这些服务器的日志,我看到 401 Unauthorized 一直弹出。所以我更改了配置,直到授权生效。使用此配置,我们部署了一个新服务器,现在可以正常工作了。

关于配置的一些话,供那些在第一个 运行 中遇到问题的人使用,这些是我们放入 /etc/turnserver.conf 并在使用 [=12= 启动服务器时传递的配置]:

listening-port=<port>
alt-listening-port=<port>
listening-ip=<listening-ip>
external-ip=<external-ip>
realm=<realm>
fingerprint
lt-cred-mech
user=<user:pw>

在进行该配置之前,我们犯了一些错误,也许它们对有经验的人来说是讨厌的,但对我们来说却不是:

  1. 我们在配置文件中有 use-auth-secret,使用 user
  2. 时不应启用
  3. 我们遇到了 turn 服务器在 firefox 中可用但在 chrome 或其他服务器中不可用的问题,(无法收集中继候选者),这是为了 realm 未配置配置