Стандарт WebRTC, протоколы STUN, TURN, ICE

WebRTC (сокр. от Web Real-Time Communication) – это стандарт, который позволяет интернет-браузерам обмениваться видео и аудио данными, а также произвольным контентом в режиме реального времени. Наиболее частое применение стандарта WebRTC – это передача изображения и голоса в видеоконференциях. Все современные браузеры поддерживают WebRTC и поэтому пользователю не требуется установка каких-либо специальных программ чтобы стать терминалом видеоконференцсвязи.

Для того чтобы представлять как работает видеоконференция по WebRTC необходимо знать принципы и технологии работы IP сетей, а именно:

  • NAT (Network address translation)
  • STUN (Session Traversal Utilities for NAT)
  • TURN (Traversal Using relays around NAT)
  • ICE (Interactive Connectivity Establishment)
  • SDP (Session Description Protocol)

NAT – механизм преобразования IP адресов пакетов, который позволяет устройствам, находящимся в локальной сети, подключаться к интернет и получать информацию. Типичный пример – просмотр web страниц в браузере. Когда клиент с локальным IP адресом отправляет запрос на web сервер, то пакеты проходят через роутер (маршрутизатор) где происходит замена локального IP адреса на внешний маршрутизируемый IP адрес роутера. Ответный пакет от web сервера приходит на роутер и происходит пересылка пакета клиенту с заменой на локальный IP адрес. Так работает самый популярный вариант SNAT (source NAT).

SNAT соединение всегда формируется клиентом и сервер не имеет возможности инициативно обращаться к клиенту, поскольку он только отвечает на запросы. Такой механизм не позволяет сформировать равноправный двусторонний обмен данными.

STUN – технология, позволяющая устройствам, находящимся за NAT определить внешний IP адрес роутера (маршрутизатора). STUN сервер является очень простым сервисом и его задача – «взглянуть» на клиента из сети интернет и сообщить какой внешний IP адрес он использует для выхода в интернет.

TURN – ретранслятор сетевых пакетов, позволяющий решить проблемы установления канала связи между двумя клиентами (peer-to-peer). TURN устанавливает связь с обоими точками (peer) сетевого обмена и обеспечивает транзит всего трафика через себя.

ICE – это специальный протокол обмена двух устройств с целью сбора информации, описывающей оптимальный путь соединения между узлами. Информация передается в объектах, называющихся ICA candidate и содержит данные об IP адресах, протоколах маршрутизации, использовании TURN, поддерживаемых форматах данных и т.п. Вся эта информация передается узлам в протоколе SDP

SDP – это протокол переговоров между узлами, который содержит данные кандидатов ICE, список доступных аудио- и видеокодеков, топологию сети, пропускную способность и другую информацию об устройствах. Обмен SDP пакетами называется SDP SIGNALING, сигнализация или сигнальный уровень.

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

1. Сигнальный уровень SDP SIGNALING

  • Стороны через WebSocket протокол обмениваются специальными SDP пакетами, содержащими информацию о параметрах передачи данных. Сторона-инициатор соединения отправляет SDP пакет, в котором описано что именно передаваться (видео, звук или данные), в каком формате, какие кодеки доступны для использования. Принимающая сторона обрабатывает эти данные и отправляет обратно свой SDP пакет с информацией о том какие у нее есть возможности по обработке информации. На основании запроса и ответа формируется набор правил, удовлетворяющих обе стороны.
  • Параллельно с этим, происходит процесс запросов к STUN и TURN серверам для корректного определения IP адресов сторон и выстраивания наиболее оптимального маршрута передачи потоковых SRTP данных.

После прохождения сигнального уровня считается, что стороны договорились.

2. Потоковый уровень RTCPeerConnection.

После согласования сигнализации начинает работать SRTP часть WebRTC протокола которая обеспечивает непосредственную передачу потоковых данных. Для этих целей выделяется диапазон UDP портов, через которые происходит трансляция.

Стандарт WebRTC, протоколы STUN, TURN, ICE
Стандарт WebRTC, протоколы STUN, TURN, ICE

Преимущества WebRTC

  • Работает во всех современных браузерах и не требует установки дополнительного ПО.
  • Встроенные механизмы выбора качества потока в зависимости от условий соединения
  • Использование современных видео- и аудиокодеков;
  • Автоматическое шумо- и эхоподавление
  • Все соединения зашифрованы согласно протоколам DTLS и SRTP.
  • Встроенный механизм захвата контента, например, рабочего стола.
  • Поддержка HTML5 и JavaScript.
  • Открытый исходный код
  • Кросс-платформенность: WebRTC приложение будет одинаково хорошо работать в любой операционной системе, и на любой платформе десктопной или мобильной, при условии, что браузер поддерживает WebRTC.

Недостатки WebRTC

  • Стандарт WebRTC описывает лишь способы передачи видео и звука. Каждое WebRTC приложение имеет собственную реализацию управления абонентами, статусы, обмен сообщениями и файлами и т.п. Поэтому различные решения на WebRTC несовметимы между собой.
  • Протокол WebRTC не позволяет скрыть реальные IP-адреса абонентов, за исключением схемы с использованием TURN серверов.
  • В WebRTC нет управления рабочим столом. Пользователь может лишь транслировать свой экран как видеопоток, аналогично веб камере

Аудиокодеки в WebRTC

Для сжатия аудиотрафика в WebRTC используются обязательные кодеки (Opus и G.711) и дополнительные (G.722, iLBC, iSAC).

Видеокодеки в WebRTC

В стандарт WebRTC входят кодеки VP8 и H.264. Также существуют реализации необязательных видеокодеков (H.265, VP9, AV1).

Методы отладки

Для проверки работы STUN/TURN серверов существует удобный сервис https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

  1. Добавьте сервер для тестирования
  2. Установите флажок «Acquire microphone/camera permissions» – разрешить браузеру доступ к камере и микрофону (если у браузера не будет доступа, то тест вернет ошибку The server stun:stun.l.google.com:19302 returned an error with code=701)
  3. Нажмите «Gather candidates» – собрать ICE кандидатов

В сети существуют бесплатные STUN серверы, которыми можно воспользоваться:

  • stun:stun.sipnet.ru:3478
  • stun:stun.l.google.com:19302
  • stun:stun.l.google.com:19305

Еще один инструмент отладки WebRTC – страничка в браузере Google Chrome с адресом: chrome://webrtc-internals/

Заключение

Область использования WebRТC очень широкая и перспективная. Наша команда работает с WebRTC в проектах систем унифицированных коммуникаций, англ. Unified communications (UC). Это решения организации рабочего пространства для совместной работы и взаимодействия команд или сотрудников. Видеоконференции, чат, файловое хранилище, совместная работа с документами и прочее.

Добавить комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

Отправить