tcp - TURN 服务器 webrtc tcp 中继
问题描述
我在连接中coturn
用作TURN
中继服务器WebRTC
。我想要实现的是TCP
基于连接而不是 UDP。
我尝试过的:在 coturn 配置中,我只设置no-udp
并no-udp-relay
强制TCP
基于连接。
# Uncomment if no UDP client listener is desired.
# By default UDP client listener is always started.
#
no-udp
# Uncomment if no UDP relay endpoints are allowed.
# By default UDP relay endpoints are enabled (like in RFC 5766).
#
no-udp-relay
每当我尝试建立连接时,我都会得到turn server may be broken
.
可能有用的细节,A 和 B 正在尝试交流
- 在机器上
A
,我得到 3 个 UDP 候选者和 3 个 TCP 候选者 - 在 machine 上
B
,我只得到 3 个 UDP 候选者。 - 两者都在使用 Firefox 当我阅读Firefox 文档时,我看到
TCP
ice 候选类型没有任何relay
或TURN
连接。这会是失败的原因吗?
问题是,失败的原因可能是什么?
编辑:这是来自 Chromium 页面的最新一期https://bugs.chromium.org/p/chromium/issues/detail?id=1201700#c5
解决方案
即使存在 TURN 扩展以获得 TCP 分配,WebRTC 也不支持 TURN TCP 中继,仅支持 UDP。但是,它支持使用 TCP 或 TLS 连接 TURN 服务器。
这个原因是假定 TURN 服务器位于具有工作 UDP 连接的不受限制的网络上。由于 TCP 对实时流量有不好的特性,它应该只是最后的后备方案,并且在双方都没有 UDP 连接的极端情况下,他们可以通过 TCP 连接到 TURN 服务器,TURN 服务器之间的流量仍然是UDP。