Как исправить ненадежные звонки через WebRTC?
Звонки через WebRTC не надежны в нашем приложении. Иногда мы видим черный экран, иногда мы вообще не видим начала вызова, а иногда наблюдаются огромные задержки или рассинхронизация в аудио / видео.
Настроить:
- Общедоступный сервер Google STUN
stun:stun.l.google.com:19302
; - TURN сервер
Coturn
размещен на лазурном в докере; - Сигнальный сервер - это настраиваемый https://github.com/andyet/signalmaster который использует экспресс в качестве веб-сервера.
- На клиенте используется JS, с
simplewebrtc
как клиент; - Для поддержки iOS используется плагин Cordova - https://github.com/eface2face/cordova-plugin-iosrtc
Почти на 100% воспроизводится проблема звонков от одного клиента по LTE к другому по Wi-Fi. В этом случае мы видим черный экран на обоих устройствах, однако по умолчанию bg-color белый, так что по крайней мере что-то происходит на стороне WebRTC.
Что было сделано для решения проблем:
- Проверенные журналы Котурна... Иногда мы видим там "Несанкционированные" ошибки, но трудно сказать, влияют ли они на что-либо;
- Проверял трафик Котурна: в сценариях Wi-Fi и Wi-Fi он низкий, поэтому одноранговое соединение действительно установлено. Если есть LTE, мы видим нагрузку около 40–120 КБ / с (не слишком ли это мало для аудио / видео?), Поэтому TURN, похоже, работает;
- Проверил логи клиентского приложения, ничего особенного;
Пожалуйста, предложите любой возможный способ исследования или исправления, чтобы сделать WebRTC максимально надежным.
1 ответ
Приведенная выше схема взята из этой статьи, которую я написал, в которой подробно рассказывается на эту тему.
Вкратце, проблемы могут появиться на любом из 3 этапов:
- сигнализация
- обнаружение с использованием STUN/TURN
- P2P соединение
Вот что я бы сделал:
- Используйте минимальное минимальное разрешение в ограничениях, таких как 320x240, это позволит избежать простых ошибок getUserMedia().
- Убедитесь, что передача сигналов осуществляется через порт 80 или 443
- Во многих случаях одноранговый узел не может связаться с серверами STUN/TURN, поэтому попробуйте установить связь с STUN/TURN с помощью TCP (
stun:stun.l.google.com:19302?transport=tcp
) и порт 80 (по умолчанию используется порт UDP 3478 или 19302 для STUN Google, и они могут быть заблокированы вашим маршрутизатором / брандмауэром / прокси / мобильной сетью) - Используйте TrickleICE (с вашим собственным STUN/TURN) и средством устранения неполадок WebRTC на устройствах LTE/WiFi, и вы узнаете много нового о том, как они могут быть подключены к