Что такое WebRTC

Что такое WebRTC

t.me/qa_chillout

WebRTC (Web Real-Time Communication) — это технология, которая позволяет передавать звук, видео и данные напрямую между пользователями. Она работает прямо в браузере или уже встроена в мобильные приложения.

Представьте, вы заходите на сайт — и сразу можете:

  • позвонить другу по видеосвязи,
  • отправить файл,
  • поговорить голосом, как в Zoom — но без установки дополнительных программ или плагинов.

Если вы используете браузер, ничего скачивать не нужно — всё работает прямо на сайте.

В мобильных приложениях WebRTC также может применяться для связи в реальном времени — уже на уровне встроенной логики.


Примеры:

  • Видеозвонки через браузер — например, Google Meet, Discord Web или Яндекс Телемост.
  • Кнопка «Позвонить консультанту» на сайте (если звонок происходит прямо в браузере, без перехода в телефон или мессенджер).
  • В онлайн-играх — для передачи голоса или данных между игроками напрямую.
  • Быстрый файлообмен через браузер, без серверов-посредников.
  • Интерактивные доски и инструменты для совместной работы в реальном времени.


Ключевые особенности WebRTC:

  • P2P-связь (peer-to-peer): данные передаются напрямую между клиентами, что снижает задержку и нагрузку на сервер.
  • Поддержка аудио- и видеосвязи: позволяет реализовать видеозвонки, голосовые чаты, трансляции.
  • Передача произвольных данных: можно передавать файлы, текст и другую информацию через RTCDataChannel.


Немного подробнее про peer-to-peer

Представьте, что вы звоните другу:

  • Обычный способ — вы звоните через сотовую вышку, она соединяет вас. Это как будто вы общаетесь через оператора — есть посредник.
  • P2P — это как будто вы и ваш друг протянули провод между телефонами и говорите напрямую, без оператора.

В интернете:

  • Когда вы открываете сайт — вы общаетесь через сервер (он передаёт сообщения между вами).
  • Когда работает P2P — ваш браузер напрямую соединяется с другим браузером. Без сервера посередине.


Как работает WebRTC:

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

  1. Обмениваются информацией о себе (Signaling) — чтобы понять, как связаться.
  2. Устанавливают соединение (NAT Traversal) — несмотря на роутеры и фаерволы.
  3. Передают данные напрямую (Media/Data Channels) — по защищённому каналу.


Рассмотрим подробнее каждый этап:

Signaling (сигнализация)

участники обмениваются через сторонний канал (например, WebSocket или HTTP) следующими данными:

  • SDP-описанием

SDP (Session Description Protocol) — это формат сообщения, в котором участники WebRTC описывают свои параметры связи: какие кодеки поддерживают, как будут передавать звук/видео, на каких портах, и т.д.

  • ICE-кандидатами

Это возможные пути для соединения: IP-адрес (локальный, внешний или от STUN/TURN-сервера), порт и тип соединения (UDP или TCP). Браузер собирает такие варианты, чтобы выбрать наилучший способ подключения и установить прямую связь.

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


NAT Traversal

Браузеры пробуют соединиться напрямую, несмотря на роутеры, IP-шлюзы и фаерволы.

  • STUN — помогает браузеру определить его внешний IP-адрес и порт.
  • TURN — запасной вариант: если напрямую соединиться не удаётся, он пересылает данные между браузерами.


Media/Data Channels

После успешного соединения начинается прямая передача данных между браузерами:

  • звук
  • видео
  • файлы или текстовые сообщения

Канал защищён и зашифрован — никто посторонний не сможет подслушать или вмешаться.


Как WebRTC поддерживает качество связи

WebRTC старается сохранить стабильное соединение даже в сложных условиях — если меняется сеть, сигнал становится слабым или возникают сбои. Для этого браузеры заранее подготавливают несколько вариантов подключения и выбирают наиболее надёжный.


1. Много ICE-кандидатов → выбирается лучший путь

Когда соединение устанавливается, браузер собирает несколько вариантов путей (ICE-кандидатов), по которым можно связаться с другим участником. Это как список маршрутов, по которым можно доехать до одного и того же места.

Примеры таких путей:

  • локальный IP-адрес — если оба браузера находятся в одной сети (например, в офисе);
  • публичный IP через STUN-сервер — чтобы узнать внешний адрес за пределами роутера;
  • TURN-сервер — используется как последний вариант, если прямой связи не получилось.

Как выбирается лучший путь?

  1. Оба браузера обмениваются своими кандидатами.
  2. Тестируют их между собой, посылая пробные сигналы.
  3. Оценивают задержку, стабильность, возможность соединения.
  4. Выбирают самый быстрый и надёжный путь.


2. Мониторинг качества и адаптация (QoS)

Во время звонка WebRTC постоянно следит за качеством связи:

  • сколько теряется пакетов (переданных данных),
  • какова задержка передачи,
  • насколько равномерно приходят пакеты — если задержка «скачет», это называется джиттером.

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


Если WebRTC замечает, что качество ухудшается — он автоматически подстраивается:

  • снижает разрешение видео (например, с HD до SD),
  • уменьшает частоту кадров (движения становятся менее плавными),
  • если совсем плохо — отключает видео и оставляет только звук.

Это называется адаптивная передача. Она помогает избежать зависаний и «рваного» звука, даже если интернет стал хуже.


Браузер не сохраняет ничего в файл, а использует прямо «на лету» — эти показатели помогают WebRTC внутри выбрать подходящий битрейт, кодек, настройки передачи.

То есть все решения принимаются автоматически и мгновенно, чтобы вы этого даже не заметили.


3. Автопереподключение при обрыве

Если соединение неожиданно прерывается (например, пользователь ушёл из Wi‑Fi в мобильную сеть или сигнал временно пропал), WebRTC не завершает звонок, а:

  • автоматически обнаруживает потерю связи,
  • повторно собирает ICE-кандидатов — новые возможные маршруты соединения,
  • пытается восстановить прямую P2P-связь без участия пользователя.

Переход происходит мягко и незаметно для человека — видео/аудио могут немного подзависнуть, но звонок не «обрывается» и не требует переподключения вручную.


4. Защищённые и надёжные каналы

В WebRTC всё, что передаётся между браузерами, обязательно шифруется — и сигнал, и медиа (аудио/видео), и данные.

Что используется для защиты:

DTLS (Datagram Transport Layer Security) — это протокол шифрования, который защищает сигнальные сообщения (в том числе установку соединения, обмен ключами и управление сессией).

  • Похож на TLS (тот, что в HTTPS), но адаптирован для передачи по UDP.

SRTP (Secure Real-time Transport Protocol) — протокол, который шифрует само аудио и видео.

  • Он гарантирует, что никто не сможет «подслушать» или изменить поток во время звонка.

Таким образом, даже если кто-то перехватит трафик — он не сможет его расшифровать или вмешаться в передачу.


5. TURN-сервер как надёжный запасной путь

Иногда браузеры не могут установить прямое P2P-соединение — например, если один из участников сидит за строгим фаерволом или NAT-блоком.

В таких случаях на помощь приходит TURN-сервер (Traversal Using Relays around NAT). Он работает как промежуточная точка: пересылает весь трафик между браузерами через себя, обеспечивая стабильную связь даже в самых сложных сетевых условиях.


Плюсы:

  • соединение почти всегда устанавливается, даже при проблемах с сетью;
  • звонок продолжается, пользователь не замечает технических препятствий.

Минусы:

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

TURN используется только при необходимости — WebRTC всегда сначала пытается установить прямую связь.


Теперь, когда мы разобрались, как WebRTC устанавливает и поддерживает соединение, давайте посмотрим на техническую сторону.

  • Для сигнализации чаще всего используется WebSocket или HTTP(S) POST/GET — на этом этапе идёт обмен SDP и ICE-кандидатами.
  • А вот медиа и данные передаются по UDP-соединениям, напрямую между браузерами, с использованием SRTP и DTLS.
  • Иногда может использоваться TURN-сервер, если прямое соединение невозможно — тогда поток идёт через него, но всё равно зашифрован.

Как это тестировать?

Можно смотреть статистику WebRTC-сессии через инструменты браузера:

В Chrome: chrome://webrtc-internals

Или через getStats() в JS API.


Тестирование проводится с помощью сниферов (Wireshark, Charles).


Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».

Report Page