还有一个类似的问题Coturn server - Relay is not working,但它不适用于亚马逊,因为它的服务器位于NAT之后,而我们没有。
我们有一台裸机连接到开放的互联网。当我们强制WebRTC连接使用relay
时,交换候选者,并且我们看到relay
候选人,但没有流。
这是配置。我们玩过各种事情,例如设置external-ip
,打开和关闭TLS都无济于事。
listening-ip=<public-address>
listening-port=443
tls-listening-port=443
cert=/etc/star-attach-live-certificate.pem
pkey=/etc/star-attach-live-certificate.key
min-port=49152
max-port=65535
realm=turn.example.com
server-name=servername.example.com
fingerprint
max-bps=550000
use-auth-secret
static-auth-secret=<secret>
check-origin-consistency
userdb=/usr/local/var/db/turndb
realm
指向可能会重定向到该服务器或其他服务器的负载均衡器,但是我想这不是问题。
当我从https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/呼叫服务器时,我得到了所有3位候选人。
https://test.webrtc.org工具为我提供了这一点:
我认为结果是错误的,因为我看到上面的srflx
个候选对象,并且实际上通过srflx
进行的通信有效。
这是chrome:// webrtc-internals的两面。我没有找到候选对。
relay
候选人看起来像这样:
sdpMid: 0, sdpMLineIndex: 0, candidate: candidate:3193418391 1 udp 24846335 95.216.16.200 55992 typ relay raddr 0.0.0.0 rport 0 generation 0 ufrag qW0i network-id 1 network-cost 10
我们没有其他可以尝试的想法。我们甚至交换了服务器以避免潜在的硬件问题。我们在Alpine的Docker容器中运行它。我们没有尝试过使用Ubuntu 16.04LTS。
任何人都可以看到问题所在或有想法我们还可以尝试什么?
其他信息:
深入研究之后,我们发现中继有时会工作得很好,有时却无法奏效。尽管在美国可以正常使用,但似乎在致电欧盟用户时会发生问题。我怀疑欧盟供应商隐藏了prflx候选对象,从而迫使中继连接失败。即使在通常无法正常工作的地方,也很少出现这种情况,并且当我从美国所在地强制进行中继连接时,流的中继就很好了。如上图所示,当它正常工作时,回程使用的带宽几乎相同,但是当失败时,入站带宽要比出站带宽高很多。
我无法在此处添加完整的转储,但我将其发布到https://fippo.github.io/webrtc-dump-importer/中,并提取了显示连接建立和候选对的相关部分。