Как исправить ненадежные звонки через 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 ответ

Процесс соединения с WebRTC

Приведенная выше схема взята из этой статьи, которую я написал, в которой подробно рассказывается на эту тему.

Вкратце, проблемы могут появиться на любом из 3 этапов:

  1. сигнализация
  2. обнаружение с использованием STUN/TURN
  3. P2P соединение

Вот что я бы сделал:

  1. Используйте минимальное минимальное разрешение в ограничениях, таких как 320x240, это позволит избежать простых ошибок getUserMedia().
  2. Убедитесь, что передача сигналов осуществляется через порт 80 или 443
  3. Во многих случаях одноранговый узел не может связаться с серверами STUN/TURN, поэтому попробуйте установить связь с STUN/TURN с помощью TCP (stun:stun.l.google.com:19302?transport=tcp) и порт 80 (по умолчанию используется порт UDP 3478 или 19302 для STUN Google, и они могут быть заблокированы вашим маршрутизатором / брандмауэром / прокси / мобильной сетью)
  4. Используйте TrickleICE (с вашим собственным STUN/TURN) и средством устранения неполадок WebRTC на устройствах LTE/WiFi, и вы узнаете много нового о том, как они могут быть подключены к
Другие вопросы по тегам