Как работает WebRTC изнутри?

Voice over Internet Protocol (VoIP) – сегодня это один из самых популярных стандартов для голосовых и видеозвонков в мире Интернет. В этой заметке я попробую на простых примерах рассказать, как работают голосовые и видеозвонок.

Почти каждый день мы с вами используем голосовые либо видеозвонка в различных приложениях, таких как Skype, Viber, Telegram, WhatsApp, Facebook Messenger или Webitel 🙂 В общем, передача аудио либо видео зависит от того, как приложение передаст медиапоток между двумя клиентами. И в большинстве случаем для потоковой передачи мультимедиа мы используем WebRTC.

WebRTC – это стандарт c открытым исходным кодом, который предоставляет браузеры и мобильные приложения возможности взаимодействовать в реальном времени (RTC) через простые API. Все компоненты WebRTC были оптимизированы именно для работы мультимедиа в различных сетях интернет.

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

  • Сигнальный протокол
  • STUN
  • TURN

Что такое сигнализация?

Чтобы установить соединение между двумя клиентами, оба клиента должны понимать друг другу, говорить на одном языке. Именно с помощью сигнального протокола наши клиенты договариваются об используемых кодеках, о наборе функций, о переводах и завершениях вызова… В большинстве случаем для сигнализации используется WebSocket соединение.

Да, в webitel мы используем сигнальный протокол verto.

После того, как наши клиенты договорились о всем необходимом для соединения, нам нужен IP-адрес обоих клиентов, а для получения последнего, мы используем STUN-сервер.

STUN

STUN Server используется для получения общедоступного IP-адреса.

Зачем нужен общедоступный IP-адрес?

Общедоступный IP-адрес (Public IP) – это IP-адрес, уникальный по всему миру. Только одно устройство может иметь такой IP.

Частный IP-адрес (Private IP) – это IP-адрес, который не является уникальным глобально и может существовать одновременно на разных устройствах. Частный IP-адрес никогда не подключается напрямую к Интернету. Устройства, которые имеют частный IP-адрес, будут находиться в своем собственном уникальном IP-пространстве (например, локальная сеть компании).

Поскольку технология NAT (Network Address Translation) позволяет устройствам с локальным IP-адресами выходить в Интернет под единым общедоступным IP-адресом, нам необходимо его узнать. STUN Server помогает в этом.

Если мы получили публичный IP-адрес клиента, то теперь можем начать мультимедийный вызова через WebRTC.

Но, реальный мир не идеален 🙂

TURN

Что делать, если связь устанавливается, но голос либо видео не проходит? В таких случаях используется TURN сервер. В общем, он берет медиаданные от одного клиента и отправляет другому клиенту. Его задача – ретрансляция медиа. Таким образом, оба клиента начинают общаться между собой.

Все другие данные, не связанные с медиа – отправляются по сигнальному протоколу. Возникает вопрос: Почему WebRTC не может сразу же и быть сигнальным протоколом?

Ответ прост: Чтобы избежать избыточности и стать максимально совместимым, WebRTC описывает только обмен медиа данными между конечными устройствами. А вот сигнальный протокол – каждый пишет под себя, что кому нужно 😉

Leave a Reply

Your email address will not be published. Required fields are marked *