Skip to content

Использование протокола WebRTC

WebRTC (Web Real-Time Communications) — это P2P (peer-to-peer) протокол общения между двумя клиентами, регламентирующий двунаправленную безопасную передачу данных в реальном времени.

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

Протокол WebRTC используется для обмена данными между браузерами (без установки плагинов или иных расширений) или другими поддерживающими его приложениями по типу "один-к-одному", или "клиент-клиент". Например, для связи двух браузеров по протоколу WebRTC необходимо зайти на один и тот же сайт в интернете.

У WebRTC есть множество преимуществ, например:

  • сверхнизкая задержка (менее одной секунды),
  • обязательное шифрование по протоколам DTLS и SRTP,
  • стандарт с открытым исходным кодом,
  • не требует установки программного обеспечения, плагинов и т.д.

Чтобы начать коммуникацию между клиентами, или агентами, по WebRTC, необходимо последовательное успешное выполнение четырёх шагов:

1. Сигнализация

Представляет собой процесс выяснения сетевой информации. Описания медиапотоков передаются в формате SDP (Session Description Protocol). Агент, инициирующий соединение, отправляет "предложение", на которое впоследствии "отвечает" агент-получатель. Это так называемая модель "предложения/ответа SDP". В этот момент получатель может отклонить те кодеки, которые он не поддерживает.

SDP-сообщение содержит информацию об IP-адресах и портах, на которых доступен агент (ICE кандидаты), количество видео- и аудиодорожек, которые тот готов передать, какие аудио и видео кодеки поддерживает каждый из агентов и т.д.

Теперь агенты готовы сделать попытку подключения.

2. Подключение

Поиск подходящего маршрута для связи агентов в WebRTC осуществляется с помощью протокола ICE (Interactive Connectivity Establishment). Кандидаты представляют некую комбинацию IP-адреса, порта и транспортного протокола. Они используются для построения маршрута между агентами для получения разрешения на установления связи, обходя NAT (Network Address Translation) и файерволы. Для установления связи используются STUN (Session Traversal Utilities for NAT) и TURN (Traversal Using Relays around NAT) серверы.

3. Защита

WebRTC использует протоколы DTLS и SRTP для обеспечения безопасности связи и шифрования данных.

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

4. Коммуникация

Здесь начинается обмен данными между двумя агентами WebRTC. WebRTC поддерживает 2 аудио (Opus, G.711) и 2 видео (VP8, H.264) кодека.

Что делать, если хочется настроить коммуникацию между тремя и более браузерами или приложениями, поддерживающими WebRTC? Например, начать аудио- или видеоконференцию?

В таком случае понадобится сигнальный сервер. Сигнальный сервер — посредник, который позволяет передавать данные о соединении от одного клиента к другому. Следовательно, соединение из "клиент-клиент" превращается в "клиент-сервер-клиент". С помощью него возможно перейти от "один-к-одному" к "один-ко-многим", предоставляя бо́льшую функциональность.

О публикации по WebRTC на Flussonic

Flussonic Media Server использует WebRTC для публикации видео с клиентского устройства или программы (источника) на Flussonic (приемник). Затем Flussonic выступает в роли источника, чтобы проиграть видео на другом клиенте (приемнике). При этом в обоих случаях Flussonic также играет роль сигнального сервера, помогающего установить соединение.

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

Таким образом, обмен видео по WebRTC через Flussonic Media Server нельзя считать peer-to-peer, правильнее будет называть это публикацией видео на Flussonic Media Server по WebRTC и проигрыванием видео с Flussonic сервера по WebRTC.

На схеме ниже показан процесс обмена данными для установления соединения между Flussonic и клиентским приложением для публикации видео:

WebRTC

Процесс установления соединения для публикации видео и аудио потока во Flussonic Media Server по WebRTC похож на аналогичный для проигрывания видео.

Принцип остается неизменным — стороны должны обменяться SDP через посредника (а это сигнальный сервер - Flussonic), после чего начать передачу данных напрямую. В случае публикации видео инициировать процесс и отправлять приглашение (SDP offer) нужно со стороны клиента (источника).

Cоединение устанавливается по WebSocket, а видео передается по RTP.

Читайте больше в главе Публикация по WebRTC.

О проигрывании по WebRTC с Flussonic

Flussonic Media Server использует WebRTC для проигрывания публикуемого видео с сервера Flussonic (источника) на клиентском устройстве или в программе (приемник). При этом Flussonic также играет роль сигнального сервера в процессе установления соединения, через который происходит обмен данными о соединении.

Почему мы используем именно WebRTC для обмена медиа-данными между двумя клиентами? Данный механизм позволяет нам достигнуть сверхнизкой задержки.

Таким образом, обмен видео по WebRTC через Flussonic Media Server нельзя считать peer-to-peer, правильнее будет называть это публикацией видео на Flussonic Media Server по WebRTC и проигрыванием видео с Flussonic сервера по WebRTC.

На схеме ниже показан процесс обмена данными для установления соединения между Flussonic и клиентским приложением, для проигрывания видео:

WebRTC Проигрывание

Стороны должны обменяться SDP через посредника (а это сигнальный сервер - Flussonic), после чего начать передачу данных напрямую. В случае проигрывания видео инициировать процесс и отправлять приглашение (SDP offer) нужно со стороны сервера Flussonic (источника).

Cоединение устанавливается по WebSocket, а видео передается по RTP.

Читайте больше в главе Проигрывание по WebRTC.