Есть аналогичный вопрос Сервер Coturn - Relay не работает, но это неприменимо, так как серверы Amazon находятся за 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
У нас заканчиваются идеи, что еще мы могли бы попробовать. Мы даже заменили сервер, чтобы избежать возможных проблем с оборудованием. Мы запускаем это в контейнере Docker на Alpine. Чего мы не пробовали, так это использовать Ubuntu 16.04LTS.
Кто-нибудь может увидеть, что не так, или есть идеи, что еще мы могли бы попробовать?
Дополнительная информация:
Покопавшись дальше, мы обнаружили, что иногда реле работает отлично, иногда нет. Хотя в США это работает нормально, кажется, что проблемы возникают, когда звонят пользователю из ЕС. Я подозреваю, что провайдеры ЕС скрывают кандидатов prflx, форсируя ретрансляционное соединение, которое затем терпит неудачу. Даже там, где он обычно не работает, он работает в редких случаях, и когда я принудительно ретранслирую соединение из своего местоположения в США, потоки ретранслируются просто отлично. Когда это работает, пропускная способность, используемая в котурне, почти одинакова для входа и выхода, но когда это не удается, входящая пропускная способность намного выше, чем исходящая, как видно на этом изображении.
Я не могу добавить сюда полный дамп, но я разместил его на https://fippo.github.io/webrtc-dump-importer/ и извлек соответствующую часть, показывающую установление соединения и пары кандидатов.
chrome://webrtc-internals/
и вставить его сюда? - person Mariusz Beltowski   schedule 27.04.2019=>
, и если это занимало слишком много времени, а поворот был слишком быстрым, он не получал всех кандидатов. Странно, что что-то подобное может привести к потере пакетов на coturn, но это произошло. @PhilippHancke еще раз спасибо за то, что указали мне правильное направление. Напишите ответ, если хотите, чтобы я мог его принять. - person Oliver Hausler   schedule 11.05.2019