JavaScript. WebRTC. Соединение браузеров напрямую без сервера, peer-to-peer

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Рис 1. Одновременная работа в редакторе блок схем с помощью WebRTC
Рис 1. Одновременная работа в редакторе блок схем с помощью WebRTC

WebRTC позволяет браузерам обмениваться информацией напрямую без сервера. Можно передавать видео, звук и данные.

Для соединения браузеры должны обменяться параметрами соединения: SDP и ICECandidate-ами

SDP описывает требования к соединению: что будет передаваться видео/аудио/ текст, какие кодеки поддерживаются. ICECandidate-ы это адреса, куда можно посылать пакеты.

Для WebRTC соединения нужно:

  1. Обменяться требованиями к соединению.

  2. Обменяться адресами.

Рис 2. Установка WebRTC соединения, ICECandidates посылаются отдельно. Открыть схему.
Рис 2. Установка WebRTC соединения, ICECandidates посылаются отдельно. Открыть схему.

Обмен параметрами соединения называется Signaling

Обменяться параметрами можно вручную через мессенджер или сделать сигнальный сервер.

Соединения между браузерами еще нет, но нужно обменяться начальными параметрами - см. Рис 2.

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

Можно автоматизировать. Сделать сигнальный сервер, который будет пересылать параметры между клиентами.

Обмен требованиями к соединению: SDPOffer, SDPAnswer

Требования к соединению зависят от задачи. Например, для видеосвязи браузеры должны выбрать кодек, который оба поддерживают. В браузерах есть API для формирования SDP.

См. Рис 2. “Session descriptors exchange”.

  • Алиса формирует SDPOffer с указанием поддерживаемых кодеков. Отправляет Бобу.

  • Боб получает SDPOffer и на его основе формирует SDPAnswer: выбирает кодек который есть у него и в SDPOffer. Обратите внимание - нельзя сформировать SDPAnswer без SDPOffer. Боб отправляет SDPAnswer Алисе.

  • Алиса устанавливает SDPAnswer: для трансляции будет использоваться кодек из SDPAnswer.

Обмен адресами: ICECandidate-ами

ICECandidate-ов может быть несколько. Например один адрес в локальной сети, другой во внешней. Чтобы узнать свой адрес нужен STUN сервер.

См. Рис 2. “Address exchange”.

Алиса узнает свои адреса по которым она может получать пакеты. И отправляет их Бобу. Боб выбирает из полученных адресов-кандидатов.

У Алисы может быть несколько адресов. Например один адрес в локальной сети, другой во внешней. Если Боб в той же локальной сети, Алиса и Боб соединяться по локальному адресу.

Браузер не знает свой адрес. Чтобы узнать свой адрес браузер делает запрос к специальному STUN серверу. STUN сервер сообщает браузеру его (браузера) внешний адрес. Есть публичные STUN сервера, например у Google.

Хорошая статья про узнавание своих адресов: Просто о WebRTC.

Можно сразу получить все свои ICECandidate-ы и отправить в составе SDP

В этом случае Боб сразу получает все необходимые параметры для соединения. Но, почему то, даже зная все ICECandidate-ы Алисы, не может ответить по WebRTC. Все равно нужно передать SDPAnswer через signaling.

Рис 3. Установка WebRTC соединения, ICECandidates посылаются в составе SDP
Рис 3. Установка WebRTC соединения, ICECandidates посылаются в составе SDP

Обратите внимание: Боб не может отправить SDPAnswer по WebRTC. Пока Алиса не установит SDPAnswer - WebRTC не случится. Почему так - не понятно.

Из-за этого ограничения приходится делать сигнальный сервер. Если бы не ограничение, Алиса могла бы отправить Бобу ссылку с зашитыми параметрами. Боб мог бы получить из ссылки все что нужно и сразу установить WebRTC.

Источник: https://habr.com/ru/articles/762118/


Интересные статьи

Интересные статьи

Привет Хабр!Расширения браузеров – очень удобная штука, они могут решать довольно широкий спектр задач: от банальной блокировки рекламы на веб-ресурсах до планирования задач и организации видео-встреч...
На прошлой неделе эксперты «Лаборатории Касперского» выпустили отчет, в котором проанализировали наиболее часто встречающиеся вредоносные разрешения для браузеров. Примеры вредоносных расширений предв...
По материалам статьи из блога Craig Freedman: Parallel Nested Loops JoinПеревод Ирины НаумовойSQL Server распараллеливает соединение вложенных циклов (Nested Loops Join), распределяя в ...
Привет! Это вторая часть статьи, в которой мы будем разбирать практическое применение платформы Graylog.В первой части мы разобрали как платформу установить и произвести ...
Все чаще к нам обращаются клиенты с просьбой обеспечить доступ в Kubernetes-кластер для возможности обращения к сервисам внутри кластера: чтобы можно было напрямую подключиться к како...