Webrtc что это такое


Станьте экспертом!

Быстрый переход к настройке браузеров

WebRTC (сокращенно от Web real-time communications) – это технология, которая позволяет передавать аудио и видео потоковые данные между браузерами и мобильными приложениями.

Разработка этой технологии составляет конкуренцию Skype. WebRTC можно использовать для организации видеоконференций напрямую в браузере. Проект имеет открытый исходный код и активно продвигается компанией Google и в частности командой разработки браузера Google Chrome.

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

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

Технология WebRTC поддерживается всеми популярными браузерами Mozilla Firefox, Opera, Google Chrome (и всеми браузерами на базе Google Chrome), а также мобильными приложениями на базе Android и iOS.

Опасность WebRTC

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

Анонимный VPN сервис решает данную проблему и скрывает реальный IP адрес. Максимум, что может быть обнаружено – это локальный IP адрес, присвоенный пользователю VPN сетью. Это не опасно, так как такие же локальные IP адреса будут показываться, если вы используете роутер для раздачи Интернета.

Если вы используете прокси, тогда WebRTC сможет определить ваш реальный IP адрес за прокси или IP адрес VPN сервера, если вы используете цепочку VPN + прокси.

WebRTC также определяет ваш реальный IP адрес при использовании сети Tor.

Самое лучшее решение – отключить технологию WebRTC, если вы этим не пользуетесь.

Быстрая навигация по этой странице.

Mozilla Firefox

Opera

Google Chrome

Яндекс Браузер

SRWare Iron и другие на базе Google Chrome

Internet Explorer, Microsoft Edge

Safari на macOS

Safari на iOS

Google Chrome на Android

Браузер Mozilla Firefox - это единственный браузер, позволяющий отключить технологию WebRTC без установки дополнительных плагинов.

Ручная настройка

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

Чтобы отключить технологию WebRTC в Mozilla Firefox необходимо в адресной строке браузера ввести следующий текст и нажать кнопку Enter.

about:config

Нажмите, кнопку Я принимаю на себя риск.

Выполните следующее:

  1. В поисковую строку введите текст и нажмите Enter.
  2. media.peerconnection.enabled
  3. Нажмите правой кнопкой мышки на строку и выберите Переключить. Или дважды кликните по строке.

После этих действий WebRTC будет отключен.

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

Откройте Дополнения.

Выберите:

  1. Раздел Поиск
  2. Введите название плагина в поисковую строку: WebRTC Control
  3. Нажмите кнопку Установить

Активируйте плагин. Иконка плагина должна стать синего цвета для блокировки WebRTC.

Для отключения WebRTC в браузере Opera перейдите в галерею Расширений.

Выполните следующие действия:

  1. Введите название плагина в поисковой строке: WebRTC Control
  2. Нажмите на плагин

Нажмите Добавить в Opera.

Активируйте плагин. Иконка плагина должна стать синего цвета для блокировки WebRTC.

Для отключения WebRTC в браузере Google Chrome перейдите в раздел Расширения.

Пролистайте страницу вниз и нажмите Еще расширения.

Выполните следующие действия:

  1. Введите в поисковую строку название плагина: WebRTC Control
  2. Нажмите кнопку Установить.

Нажмите Установить расширение.

Активируйте плагин. Иконка плагина должна стать синего цвета для блокировки WebRTC.

Для отключения WebRTC в Яндекс Браузере перейдите в раздел Дополнения.

Пролистайте страницу вниз и нажмите Каталог расширений для Яндекс Браузера.

Выполните действия:

  1. Введите в поисковой строке название плагина: WebRTC Control
  2. Нажмите на плагин для установки.

Нажмите Добавить в Яндекс Браузер.

Нажмите Установить расширение.

Активируйте плагин. Иконка плагина должна стать синего цвета для блокировки WebRTC.

Браузер SRWare Iron сделан на базе Google Chrome.

Установите плагин WebRTC Control по инструкции для Google Chrome.

Браузер Internet Explorer не имеет поддержки технологии WebRTC.

Microsoft Edge использует технологию WebRTC. Для частичного отключения WebRTC в браузере Microsoft Edge выполните следующие шаги:

  1. Введите about:flags в адресной строке браузера
  2. Поставьте галку
  3. Перезапустите браузер

Для отключения WebRTC зайдите в Настройки браузера Safari.

На вкладке Дополнения поставьте галку, чтобы показывать раздел Разработка в меню.

Поставьте галку на элементе Remove Legacy WebRTC API для отключения технологии WebRTC в Safari на macOS.

WebRTC можно отключить только в iOS 11 и ниже. Начиная с версии iOS 12 компания Apple убрала возможность отключения этой функции из настроек.

Зайдите в раздел Настройки в iOS 11 и ниже.

Листайте вниз и найдите пункт Safari.

Нажмите Дополнения.

Нажмите Experimental Features.

Нажмите Remove Legacy WebRTC API для отключения технологии WebRTC на iOS.

Для отключения WebRTC в браузере Google Chrome на Android необходимо в браузере ввести следующий текст в адресную строку:

chrome://flags/#disable-webrtc

Установите параметр в значение enable. Перезапустите Google Chrome и после этого WebRTC будет отключен.

thesafety.us

WebRTC. Видеоконференции в браузере

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

Что такое WebRTC?

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

Что нужно знать про WebRTC?

Лев Якупов, TrueConf, Видео+Конференция 2013

Эволюция стандартов и технологий видеосвязи

Эволюция стандартов и технологий видеосвязиСергей Юцайтис, Cisco, Видео+Конференция 2016

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

На стороне клиента
  • Пользователь открывает страницу, содержащую HTML5 тег .
  • Браузер запрашивает доступ к веб-камере и микрофону пользователя.
  • JavaScript код на странице пользователя контролирует параметры соединения (IP-адреса и порты сервера WebRTC или других WebRTC клиентов) для обхода NAT и Firewall.
  • При получении информации о собеседнике или о потоке со смикшированной на сервере конференцией, браузер начинает согласование используемых аудио и видео кодеков.
  • Начинается процесс кодирования и передача потоковых данных между WebRTC клиентами (в нашем случае, между браузером и сервером).
На стороне WebRTC сервера

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

Схема работы WebRTC сервера

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

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

Преимущества стандарта

  • Не требуется установка ПО.
  • Очень высокое качество связи, благодаря:
    • Использованию современных видео (VP8, H.264) и аудиокодеков (Opus).
    • Автоматическое подстраивание качества потока под условия соединения.
    • Встроенная система эхо- и шумоподавления.
    • Автоматическая регулировка уровня чувствительности микрофонов участников (АРУ).
  • Высокий уровень безопасности: все соединения защищены и зашифрованы согласно протоколам TLS и SRTP.
  • Есть встроенный механизм захвата контента, например, рабочего стола.
  • Возможность реализации любого интерфейса управления на основе HTML5 и JavaScript.
  • Возможность интеграции интерфейса с любыми back-end системами с помощью WebSockets.
  • Проект с открытым исходным кодом — можно внедрить в свой продукт или сервис.
  • Настоящая кросс-платформенность: одно и то же WebRTC приложение будет одинаково хорошо работать на любой операционной системе, десктопной или мобильной, при условии, что браузер поддерживает WebRTC. Это значительно экономит ресурсы на разработку ПО.

Недостатки стандарта

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

Секреты WebRTC: как вендоры извлекают пользу из прорывной веб-технологии

Секреты WebRTCЦахи Левент-Леви, Bloggeek.me, Видео+Конференция 2015

WebRTC для рынка ВКС

Увеличение числа ВКС-терминалов

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

Использование в специализированных решениях

Использование различных JavaScript библиотек и API облачных сервисов с поддержкой WebRTC позволяет легко добавить поддержку видеосвязи в любые веб-проекты. Ранее для передачи данных в реальном времени разработчикам приходилось изучать принципы работы протоколов и использовать наработки других компаний, которые чаще всего требовали дополнительного лицензирования, что увеличивало расходы. Уже сейчас WebRTC активно используется в сервисах вида “Позвонить с сайта”, “Онлайн-чат поддержки”, и т.п.

Ex-пользователям Skype для Linux

В 2014 году Microsoft объявила об прекращении поддержки проекта Skype для Linux, что вызвало большое раздражение у IT-специалистов. Технология WebRTC не привязана к операционной системе, а реализована на уровне браузера, т.е. Linux пользователи смогут увидеть в продуктах и сервисах на основе WebRTC полноценную замену Skype.

Конкуренция с Flash

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

Подробное сравнение технологий WebRTC и Flash.

Видеопрезентации WebRTC

Дмитрий Одинцов, TrueConf, Видео+Конференция октябрь 2017

Кодеки в WebRTC

Аудиокодеки

Для сжатия аудио-трафика в WebRTC используются кодеки Opus и G.711.

G.711 — самый старый голосовой кодек с высоким битрейтом (64 kbps), который чаще всего применяется в системах традиционной телефонии. Основным достоинством является минимальная вычислительная нагрузка из-за использования легких алгоритмов сжатия. Кодек отличается низким уровнем компрессии голосовых сигналов и не вносит дополнительной задержки звука во время общения между пользователями.

G.711 поддерживается большим количеством устройств. Системы, в которых используется этот кодек, более легкие в применении, чем те, которые основаны на других аудиокодеках (G.723, G.726, G.728 и т.д.). По качеству G.711 получил оценку 4.2 в тестировании MOS (оценка в пределах 4-5 является самой высокой и означает хорошее качество, аналогичное качеству передачи голосового трафика в ISDN и даже выше).

Opus — это кодек с низкой задержкой кодирования (от 2.5 мс до 60 мс), поддержкой переменного битрейта и высоким уровнем сжатия, что идеально подходит для передачи потокового аудиосигнала в сетях с переменной пропускной способностью. Opus — гибридное решение, сочетающее в себе лучшие характеристики кодеков SILK (компрессия голоса, устранение искажений человеческой речи) и CELT (кодирование аудиоданных). Кодек находится в свободном доступе, разработчикам, которые его используют, не нужно платить отчисления правообладателям. По сравнению с другими аудиокодеками, Opus, несомненно, выигрывает по множеству показателей. Он затмил довольно популярные кодеки с низким битрейтом, такие, как MP3, Vorbis, AAC LC. Opus восстанавливает наиболее приближенную к оригиналу “картину” звука, чем AMR-WB и Speex. За этим кодеком — будущее, именно поэтому создатели технологии WebRTC включили его в обязательный ряд поддерживаемых аудиостандартов.

Видеокодеки

Вопросы выбора видеокодека для WebRTC заняли у разработчиков несколько лет, в итоге решили использовать H.264 и VP8. Практически все современные браузеры поддерживают оба кодека. Серверам видеоконференций для работы с WebRTC достаточно поддержать только один.

VP8 — свободный видеокодек с открытой лицензией, отличается высокой скоростью декодирования видеопотока и повышенной устойчивостью к потере кадров. Кодек универсален, его легко внедрить в аппаратные платформы, поэтому очень часто разработчики систем видеоконференцсвязи используют его в своих продуктах.

Платный видеокодек H.264 стал известен намного раньше своего собрата. Это кодек с высокой степенью сжатия видеопотока при сохранении высокого качества видео. Высокая распространенность этого кодека среди аппаратных систем видеоконференцсвязи предполагает его использование в стандарте WebRTC.

Компании Google и Mozilla активно продвигают кодек VP8, а Microsoft, Apple и Cisco — H.264 (для обеспечения совместимости с традиционными системами видеоконференцсвязи). И вот тут возникакет очень большая проблема для разработчиков облачных WebRTC решений, ведь если в конференции все участники используют один браузер, то конференцию достаточно микшировать один раз одним кодеком, а если браузеры разные и среди них есть Safari / Edge, то конференцию придётся кодировать два раза разными кодеками, что в два раза повысит системные требования к медиа-серверу и как следствие, стоимость подписок на WebRTC сервисы.

WebRTC API

Технология WebRTC базируется на трех основных API:

  • MediaStream (отвечает за принятие веб-браузером аудио и видеосигнала от камер или рабочего стола пользователя).
  • RTCPeerConnection (отвечает за соединение между браузерами для “обмена” полученными от камеры, микрофона и рабочего стола, медиаданными. Также в “обязанности” этого API входит обработка сигнала (очистка его от посторонних шумов, регулировка громкости микрофона) и контроль над используемыми аудио и видеокодеками).
  • RTCData Channel (обеспечивает двустороннюю передачу данных через установленное соединение).

MediaStream. Прежде чем получить доступ к микрофону и камере пользователя, браузер запрашивает на это разрешение. В Google Chrome можно заранее настроить доступ в разделе “Настройки”, в Opera и Firefox выбор устройств осуществляется непосредственно в момент получения доступа, из выпадающего списка. Запрос на разрешение будет появляться всегда при использовании протокола HTTP и однократно, если использовать HTTPS:

RTCPeerConnection. Каждый браузер, участвующий в WebRTC конференции, должен иметь доступ к данному объекту. Благодаря использованию RTCPeerConnection медиаданные от одного браузера к другому могут проходить даже через NAT и сетевые экраны. Для успешной передачи медиапотоков участники должны обменяться следующими данными с помощью транспорта, например, веб-сокетов:

  • участник-инициатор направляет второму участнику Offer-SDP (структура данных, с характеристиками медиапотока, которые он будет передавать);
  • второй участник формирует “ответ” — Answer-SDP и пересылает его инициатору;
  • затем между участниками организуется обмен ICE-кандидатами, если таковые обнаружены (если участники находятся за NAT или сетевыми экранами).

После успешного завершения данного обмена между участниками организуется непосредственно передача медиапотоков (аудио и видео).

RTCData Channel. Поддержка протокола Data Channel появилась в браузерах сравнительно недавно, поэтому данный API можно рассматривать исключительно в случаях использования WebRTC в браузерах Mozilla Firefox 22+ и Google Chrome 26+. С его помощью участники могут обмениваться текстовыми сообщениями в браузере.

Подключение по WebRTC

Поддерживаемые десктопные браузеры
  • Google Chrome (17+) и все браузеры на основе движка Chromium;
  • Mozilla FireFox (18+);
  • Opera (12+);
  • Safari (11+);
Поддерживаемые мобильные браузеры для Android
  • Google Chrome (28+);
  • Mozilla Firefox (24+);
  • Opera Mobile (12+);
  • Safari (11+).
Системные требования для WebRTC клиента TrueConf →
WebRTC, Microsoft и Internet Explorer

Очень долго Microsoft хранила молчание по поводу поддержки WebRTC в Internet Explorer и в своём новым браузере Edge. Ребята из Редмонда не очень любят давать в руки пользователей технологии, которые они не контролируют, вот такая вот политика. Но постепенно дело сдвинулось с мёртвой точки, т.к. игнорировать WebRTC далее было уже нельзя, и был анонсирован проект ORTC, производный от стандарта WebRTC.

По словам разработчиков ORTC — это расширение стандарта WebRTC с улучшенным набором API на основе JavaScript и HTML5, что в переводе на обычный язык означает, что всё будет то же самое, только контролировать стандарт и его развитие будет Microsoft, а не Google. Набор кодеков расширен поддержкой H.264 и некоторым аудиокодеками серии G.7ХХ, используемыми в телефонии и аппаратных ВКС системах. Возможно появится встроенная поддержка RDP (для передачи контента) и обмена сообщениями. Кстати, пользователям Internet Explorer не повезло, поддержка ORTC будет только в Edge. Ну и, естественно, такой набор протоколов и кодеков малой кровью стыкуется со Skype for Business, что открывает для WebRTC ещё больше бизнес применений.

WebRTC, Apple и Safari

По прогнозам аналитиков WebRTC для Safari уже на подходе, ждём его в 2017 году. По состоянию на июль 2017 года поддержка WebRTC заявлена в мобильной версии ОС iOS 11, которая выйдет этой осенью, а пока рекомендуем использовать и в iOS и в macOS браузер Chrome. Реализация от Apple вероятнее всего будет расширена поддержкой видеокодеков H.264 и H.265, а так же аудиокодеком AAC-ELD, который отвечает за кодирование аудио в FaceTime (приложение для видеозвонков от Apple).

Поддержка технологий в браузерах

БраузерПоддержка WebRTCПоддержка VP8Поддержка H.264Захват экрана
Google Chrome
Mozilla FireFox
Opera
Microsoft Edge
Safari
Internet Explorer

Пример WebRTC конференции с помощью TrueConf

Наше решение TrueConf Server 4.4.2 также поддерживает стандарт WebRTC. С его помощью вы можете проводить групповые конференции размером до 250 участников, в том числе подключенных через браузер. Подробнее о нашем WebRTC-приложении можно узнать здесь.

Полезные ссылки

Официальный сайт WebRTCWebRTC на WikiWebRTC для разработчиковWebRTC в TrueConf

trueconf.ru

Что такое WebRTC и как его отключить

WebRTC - специальный сетевой протокол, который разработан компанией Google. Он используется разработчиками Google Chrome и изначально встроен него, а также в браузеры, созданные на его архитектуре. Так что большинство популярных браузеров использует этот протокол: Opera, Mozilla Firefox, Safari, Yandex Browser. Это касается и мобильных приложений.

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

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

Как происходит утечка IP через WebRTC

Несмотря на преимущества, который предоставляет протокол WebRTC, в нём присутствует один серьёзный минус, который заставит некоторых пользователей отказаться от его использования. Это утечка Ip через WebRTC.  Дело в том, что обмен данными требует прямого подключения и обмена внешними и локальными IP адресами. Из - за того, что передача идёт напрямую, не учитывая сервер, сетевые параметры игнорируются.

Соответственно, технология будет работать в обход прокси, отображая ваш IP адрес, а не адрес прокси-сервера. Сеть Tor также будет бесполезна, поскольку технология будет показывать реальный IP адрес.

Использование VPN позволит решить эту проблему. В этом случае Ip адрес не будет показан, или будет подменён адресом, выданным VPN сетью, который не раскроет ваше местоположение, да и попросту бесполезен для злоумышленников.

Но простейшим решением проблемы станет отключение WebRTC. Проще всего это сделать, используя плагины, например, WebRTC Control, WebRTC leak prevent, WebRTC leak, diasble WebRTC и других. Нужно просто установить плагин и включить или отключить WebRTC нажатием одной кнопки. Или же можно выключить Web RTC вручную.

О том, как отключить WebRTC в популярных браузерах будет рассказано в следующих статьях:

Google Chrome, Mozilla Firefox, Opera, Safari, Yandex Browser.

proxys.io

Как отключить WebRTC в разных браузерах

Плагин WebRTC (Web real-time communication) позволяет организовать аудио- и видеосвязь в браузере без использования плагинов, но при этом раскрывает IP-адрес пользователя. Следующие шаги помогут отключить WebRTC в разных браузерах.

Как отключить WebRTC в Firefox

Отключение WebRTC в Firefox осуществляется наиболее грамотно – на уровне браузера, поэтому рекомендуется использовать именно этот браузер, если для вас это важно. Введите в адресной строке about:config, перед вами появится список настроек:

Найдите параметр media.peerconnection.enabled. Чтобы не искать вручную, можно использовать поиск, просто введя этот параметр. Выставьте в нем значение false.

Как отключить WebRTC в Chrome

К сожалению, браузер Google не позволяет отключение WebRTC штатными средствами, поэтому данный момент можно использовать плагин WebRTC Leak Prevent или Easy WebRTC Block

Как отключить WebRTC в Chrome для Android

В адресной строке браузера Chrome необходимо ввести:

chrome://flags/#disable-webrtc

Далее выставьте значение enable.

Как отключить WebRTC в Yandex и Opera

Для браузеров Yandex и Opera можно установить расширение WebRTC Control, которое подходит для них обоих. Данное дополнение позволяет быстро отключить WebRTC и защитить вас от утечки информации.

Следует учесть, однако, что защита от утечки IP-адреса в WebRTC с помощью плагинов – не самый надежный метод. В некоторых случаях браузер все равно будет передавать IP-адрес. Для дополнительной надежности можно установить плагин NoScript, который блокирует вообще все скрипты в браузере, однако еще правильнее будет использование качественного сервиса виртуальной частной сети (VPN).

whoer.net

Что такое WebRTC?

Звоним через web - браузер

Web real-time communication (WebRTC) стандарт, который появился совсем недавно и нацелен на осуществление общения в реальном времени с помощью веб-браузера с использованием одно ранговой сети.

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

В настоящее время много веб-сервисов используют RTC (связь в режиме реального времени), но при этом требуется установка приложений или специальных плагинов. К примеру – Skype, Facebook (так же работает через Skype) и Google Hangouts (использует плагин Google Talk). Установка и обновление плагинов может быть достаточно трудоёмким и нудным процессом, после которого могут появляться новые ошибки. С этой точки зрения технология WebRTC действительно привносит множество новшеств, таких как:

  • Нет необходимости в лицензировании
  • Интеграция являет собой процесс с использованием стандартных Web API
  • Отсутствие проприетарных плагинов
  • Нет необходимости в скачивании и установке чего-либо, достаточно просто зайти на веб-страницу.

Целями данной технологии являются, главным образом – минимум трудозатрат при связи, поддержка большинства браузеров, поддержка популярных в данный момент сервисов для голосовой или видеосвязи – Skype, WhatsApp и т.д. Главное – уменьшение капитальных затрат и повышение эффективности связи при использовании данной разработки.

Основные моменты

До первой коммуникации браузеры «не знают» о существовании друг друга JavaScript управляет процессом установки соединения через сервер Потоки медиа-данных используют кратчайшие пути с целью уменьшения задержки. На схеме ниже изображен процесс соединения абонентов:

Для веб-приложения WebRTC необходима следующая информация:

  • Получение доступа к потоковой передачи голоса и\или видео данных
  • Получение сетевой информации – сетевой адрес, порт и обмен данной информацией с другими пирами
  • Синхронизация сигнальной информации для открытия и закрытия сессий, выявления ошибок
  • Обмен информацией о совместимости таких параметров как: тип браузера, разрешение и тип кодека
  • Соединение входящего и исходящего потока медиа-данных

Что касается сигнализации при использовании данной технологии, первоначальной идеей было использовать SDP (Session Description Protocol), однако данный подход выявил несколько неразрешимых проблем. IETF принял решение стандартизировать протокол JSEP (Javascript Session Establishment Protocol), что дословно переводится как протокол открытия сессии с помощью Javascript. JSEP предоставляет интерфейс для приложения, позволяющий оперировать локальными и удаленными описаниями сессий. Подход с использованием данного протокола делегирует ответственность по управлению состоянием сигнализации исключительно приложению.

Что же с точки зрения безопасности?

Есть несколько путей, которыми может быть скомпрометировано приложение или плагин RTC:

  1. Незашифрованные медиа-данные могут быть перехвачены между абонентами или между абонентом и сервером
  2. Приложение может записывать звонки и распространять их без ведома пользователя
  3. Вирусы могут установлены вместе с приложением или плагином при установке из неблагонадежного источника

В технологии WebRTC было добавлено несколько функций, которые позволяют избежать вышеописанного:

  1. Реализации WebRTC используют безопасные протоколы, такие как DTLS и SRTP
  2. Шифрование обязательно для всех компонентов WebRTC, включая сигнальные механизмы.
  3. WebRTC не является плагином или отдельной программой – всего компоненты запускаются в браузере, причем не являясь отдельным процессом. Компоненты WebRTC обновляются при обновлении браузера.

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

Преграды для быстрого развития

Необходимость наличия сервера для осуществления четырех задач:

  1. Поиск пользователей
  2. Сигнализация
  3. Механизмы прохождения сигнальной и медиа информации через NAT
  4. Механизмы обеспечения прохождения информации через межсетевой экран

Отсутствие нативных приложений и SDK – WebRTC технология для связи абонентов через браузер, однако нет SDK, позволяющего разработать нативное приложение для IOS и Android

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

Выводы

Стандартизация различных API для WebRTC может снизить цены на связь и позволит использовать WebRTC во многих индустриях – телекоммуникационной, игровой, новостной и так далее. Кроме того, можно с уверенностью сказать, что WebRTC окажет сильное влияние на Интернет в общем – разработки веб-приложений с открытым кодом, на рост совместимости между браузерами и т.д

  • WebRTC
  • web real time communications
  • что такое WebRTC
  • 215
  • 0

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

P.S. Если укажите свою дату рождения, то мы обязательно Вас поздравим и подарим небольшой подарок :)

Эти статьи могут быть вам интересны:
  • Январь 25, 2019
  • Июль 03, 2017
  • Январь 24, 2019
Page 2

Сегодня мы подробно поговорим и модификациях протокола SIP, разработанных специально для взаимодействия телефонных сетей VoIP с сетями PSTN – Public Switched Telephone Network (ТфОП), использующих сигнализацию ОКС-7.

С развитием IP - сетей , преимущества VoIP телефонии становились всё более очевидными, однако подавляющая часть АТС всё ещё имеет дело с сигнализацией ОКС-7, которая используется в таких сетях как ISDN - Integrated Services Digital Network (Цифровая Сеть с Интеграцией Служб), ТфОП – Телефонная Сеть Общего Пользования, а также в Сетях Подвижной Сотовой Связи (СПСС).

В качестве подсистемы, обеспечивающей межстанционную сигнализацию, в данных сетях применяется подсистема ISUP – ISDN User Part. ISUP решает задачи транспортировки сигнальной информации от офисной телефонной станции до станции назначения без обработки данной информации в промежуточных пунктах сигнализации. Прежде всего ISUP необходим для управления установлением соединения.

Протокол ISUP имеет множество типов сообщений, каждое из которых применяется на определенном этапе установления соединения. Запомнить назначение всех этих сообщений не представляется возможным. Мы не будем описывать каждое сообщение в отдельности, а лишь приведём примеры основных, встречающихся в трассировках любого вызова по протоколу ISUP.

  1. IAM (Initial Address Message) - Самое первое сообщение. Служит для информирования АТС об установлении соединения. Содержит такие параметры как: номер вызывающего и вызываемого абонента, тип данных (данные, голос и другие).
  2. ACM (Address Complete Message) - Сообщение о приеме полного номера. Отправляется вызываемой АТС, когда был найден необходимый для установления соединения абонент. В этот момент телефонный аппарат вызываемого абонента начинает звонить, а вызывающий абонент слышит КПВ (Контроль Посылки Вызова)
  3. ANM (Answer Message) - Отправляется вызываемой АТС, когда вызывающий абонент снимает трубку. Занимаются двухсторонние разговорные каналы.
  4. REL (Release) - Отправляется одной из АТС, когда абонент инициирует завершение соединения (кладёт трубку).
  5. RLC (Release complete) - Подтверждение разрыва соединения. Отправляя данное сообщение, АТС уведомляет о том, что разговорный канал свободен и может вновь быть использован.

Очевидно, что для сопряжения сетей VoIP с сетями, работающими по сигнализации ОКС-7, необходимо реализовать механизмы прозрачной передачи сообщений ISUP по IP. Для решения данной задачи ITU-T и IETF независимо разработали модификации к протоколу SIP - SIP- I (Internetworking) и SIP – T (Telephony)( RFC 3372) соответственно.

При разработке данных модификаций, были учтены следующие требования:

  1. Возможность прозрачной передачи сообщений протокола ISUP
  2. Возможность маршрутизации сообщения протокола SIP на основе параметров ISUP
  3. Возможность передачи транспортной информации при установлении соединения.

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

Итак, от теории к практике. Рассмотрим простейший пример установления соединения в сети с разнотипной сигнализацией. Допустим, что а Абонент A - пользователь ТфОП, его телефонный аппарат находится за неким узлом связи, Абонент B использует IP Phone, работающий по протоколу SIP. За трансляцию сообщений ISUP в SIP будет отвечать некий многофункциональный шлюз IMG (Integrated Media Gateway) Задержки в сети

Как видно из рисунка инициатором вызова выступает Абонент A, на шлюз отправляется сообщение IAM, содержащее номера телефонов, а также дополнительные параметры соединения, IMG в свою очередь инкапсулирует сообщение IAM протокола ISUP, в уже известное нам INVITE протокола SIP.

Далее легко проследить каким ещё сообщениям протокола SIP соответствуют некоторые запросы ISUP.

Стоит также заметить, что протокол ISUP на этапе разговора открывает некий двухсторонний разговорный канал, идентификатор которого находится в сообщении IAM и называется CIC (Circuit Identification Code).

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

  • Протокол сигнализации SIP
  • SIP и PSTN
  • 510
  • 29

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

P.S. Если укажите свою дату рождения, то мы обязательно Вас поздравим и подарим небольшой подарок :)

Эти статьи могут быть вам интересны:
  • Май 17, 2017
  • Январь 22, 2016
  • Февраль 13, 2016
Page 3

В сегодняшней статье мы поговорим об одном из первых протоколов, получивших широкое применения в сетях VoIP – H.323.

Первая реализация H.323 была представлена ITU-T (International Telecommunication Union - Telecommunications) еще в 1996 и предназначалась для использования в видеоконференциях, ограниченных LAN (Local Area Network). Однако, протокол был быстро адаптирован для передачи голосовых данных в других типах IP сетей, таких как WAN (Wide Are Network) и Интернет.

H.323 чаще всего называют “протоколом”, хотя на самом деле, это целый стек протоколов, которые объединены одной задачей – поддержание передачи аудио- и видео-данных через сеть с коммутацией пакетов.

Протокол H.323

Как видно из данного рисунка передача аудио и видео осуществляется по стекам G.xxx/RTP/UDP/IP и H.xx/RTP/UDP/IP, за статистическую информацию о сессии отвечает RTCP.

Протокол H.255 RAS (Registration, Admission, Status) отвечает за взаимодействие оконечных устройств с привратником или контроллером зоны.

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

Процесс установления и завершения звонков через IP сеть осуществляется по средствам протокола H.255.0, сигнальные сообщения которого, позаимствованы у Q.931, использующегося в ISDN.

Архитектура H.323 имеет клиент-серверную модель и включает в себя следующие элементы:

- Терминал

Это основное устройство в системе H.323, обеспечивающее передачу видео- и аудио данных. Терминал обязательно должен поддерживать все протоколы, входящие в стек H.323, для обеспечения сервисов IP телефонии. Выполняется как в виде простого IP телефона, так и в виде сложного устройства с дополнительными функциями.

- Шлюз (Gateway)

Данный элемент присутствует только тогда, когда необходимо обеспечить сопряжение сети H.323 с сетью другого типа, например ISDN (Integrated Services Digital Network) или PSTN (Public Switched Telephone Network). Стоит отметить, что с помощью шлюзов можно обеспечить взаимодействие H.323 и с сетями мобильной связи третьего поколения (3G), которые используют протокол H.324.

- Привратник (Gatekeeper)

Также как и шлюз, привратник является опциональным элементом сети H.323. В число функций привратника входят: регистрация терминалов, управление полосой пропускания, трансляция адреса, аутентификация пользователей.

Привратник работает в двух режимах: direct routed и gatekeeper routed

Наиболее эффективным и широко распространенным является режим direct routed, поскольку в этом режиме оконечные устройства (терминалы), по средствам протокола RAS узнают IP адрес удаленного устройства и соединение происходит напрямую.

В режиме же gatekeeper routed соединение всегда происходит через привратник, что конечно же требует от него дополнительных вычислительных мощностей.

Совокупность устройств, подключенных к одному привратнику называется зоной (zone), поэтому привратник часто называют контроллером зоны.

- Устройство управления конференциями (Multipoint Control Unit)

Данное устройство является сервером, в функции которого входит поддержание аудио- и видео- конференций между тремя или более H.323 терминалами. Сервер управляет ресурсами конференции, определяет аудио- и видео-потоки, проводит согласование терминалов по возможности обработки аудио- и видео-данных.

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

В следующей статье мы более подробно рассмотрим работу некоторых протоколов из стека H.323, а также изучим возможные варианты сценариев установления соединения. Кроме того, мы научимся разбираться в сигнальных сообщениях протокола Q.931, что поможет нам в понимании не только H.323, но и ISDN.

  • телефон h.323
  • Протокол H.323
  • h423 gatekeeper
  • 430
  • 15

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

P.S. Если укажите свою дату рождения, то мы обязательно Вас поздравим и подарим небольшой подарок :)

Эти статьи могут быть вам интересны:
  • Январь 06, 2016
  • Июнь 29, 2018
  • Июнь 15, 2018
Page 4

Продолжаем рассказ про рекомендацию ITU

Мы продолжаем изучать один из важнейших протоколов IP телефонии H.323 и в сегодняшней статье рассмотрим возможные сценарии установления соединения, а также углубимся в суть сигнальных сообщений, использующихся в данном протоколе.

Итак, что же происходит прежде чем Вы слышите в трубке голос собеседника, когда соединяетесь по H.323?

Давайте рассмотрим временную диаграмму установления и разъединения связи между парой терминалов под управлением привратника. Для простоты восприятия, сигнальные сообщения протоколов выделены разными цветами.

Как видно из диаграммы на первом этапе установления соединения (SETUP) работают протоколы RAS (Registration, Admission, Status) и H.225.0 .

Терминал 1 по протоколу RAS посылает Привратнику сообщение ARQ (Admission Request), которое содержит информацию о вызываемом абоненте и требования к пропускной способности будущей сессии. Привратник отвечает сообщением ACF (Admission Confirmation), содержащее номер порта TCP для будущего сигнального канала.

Получив номер порта, Терминал 1 инициирует установление TCP-сессии, и, по протоколу H.225.0, посылает сообщение SETUP Терминалу 2. Стоит напомнить, что SETUP, как и все остальные сообщения протокола H.225.0, является разрешенным для использования в VoIP сообщением протокола Q.931, использующегося в ISDN.

SETUP содержит такую информацию как IP адрес, порт и alias, вызываемого абонента. Alias – это адрес по формату напоминающий e-mail адрес, в первой части которого находится уникальный идентификатор терминала, а во второй имя домена, которому он принадлежит, например: [email protected] или [email protected] .

Терминал 2 отвечает сообщением CALL PROCEEDING, означающее, что все данные получены. Для того, что бы взаимодействовать с Привратником Терминал 2 также проходит процедуру регистрации, обмениваясь сообщениями ARQ и ACF. Наконец, по протоколу H.225 (Q.931 ) Терминал 2 посылает вызывающей стороне сообщение ALERTING. В этот момент вызывающий абонент слышит контроль посылки вызова.

Согласование

Далее начинается фаза согласования дополнительных параметров с использованием протокола H.245, информация которого передаются внутри сообщений FACILITY протокола H.225.0.

Протокол H.245 осуществляет следующие процедуры:

  1. Определение ведущего и ведомого сессии (Master/Slave Determination).
  2. Данное определение выявляет какой из терминалов будет решать потенциальные разногласия. Например в случае несогласования какого-либо параметра ведущий (Master) может этот параметр отклонить.

  3. Согласование функциональных возможностей терминалов (Terminal Capability Set)
  4. Терминалы обмениваются списком поддерживаемых аудио и видео кодеков. Ведущий выбирает по какому кодеку будет проходить вызов.

  5. Открытие логических каналов (Open Logical Channel)
  6. Окончательное согласование всех необходимых параметров будущей RTP – сессии перед ее непосредственным открытием.

После того как все параметры согласованы и абонент Терминала 2 принимает вызов, в сторону вызывающего терминала отсылается сообщение CONNECT. На этом фаза установления соединения заканчивается и начинается фаза разговора.

Между терминалами устанавливается RTP/RTCP – сессия и начинается обмен речевой информацией.

Далее абонент Терминала 2 инициирует завершение соединения, посылкой сообщений CloseLogicalChannel и EndSessionCommand, на что получает соответствующие CLC ACK и ESC ACK от Терминала 1. Далее по протоколу H.225.0 соединение закрывается окончательно сообщением RELEASE COMPLETE. Терминалы, по протоколу RAS, извещают Привратник об освобождении ресурсов сообщениями DRQ Disenagae Request. Привратник подтверждает освобождение полосы пропускания сообщением Disengage Confirmation.

H.323 был одним из первых протоколов IP – телефонии, поэтому понимание принципов его работы является крайне важным фактором при изучении более новых и современных протоколов VoIP.

  • Протокол H.323
  • Сигнализация H.323
  • h423 voip
  • 820
  • 40

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

P.S. Если укажите свою дату рождения, то мы обязательно Вас поздравим и подарим небольшой подарок :)

Эти статьи могут быть вам интересны:
  • Январь 28, 2016
  • Январь 18, 2018
  • Январь 26, 2016

wiki.merionet.ru

Просто о WebRTC

Дмитрий Костромин, 31 Октября 2015

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

Введение

WebRTC – технология, ориентированная на браузеры, которая позволяет соединить два клиента для видео-передачи данных. Основные особенности – внутренняя поддержка браузерами (не нужны сторонние внедряемые технологии типа adobe flash) и способность соединять клиентов без использования дополнительных серверов – соединение peer-to-peer (далее, p2p).

Установить соединение p2p – довольно трудная задача, так как компьютеры не всегда обладают публичными IP адресами, то есть адресами в интернете. Из-за небольшого количества IPv4 адресов (и для целей безопасности) был разработан механизм NAT, который позволяет создавать приватные сети, например, для домашнего использования. Многие домашние роутеры сейчас поддерживают NAT и благодаря этому все домашние устройства имеют выход в интернет, хотя провайдеры интернета обычно предоставляют один IP адрес. Публичные IP адреса - уникальны в интернете, а приватные нет. Поэтому соединиться p2p - трудно.

Для того, чтобы понять это лучше, рассмотрим три ситуации: оба узла находятся в одной сети (Рисунок 1), оба узла находятся в разных сетях (один в приватной, другой в публичной) (Рисунок 2) и оба узла находятся в разных приватных сетях с одинаковыми IP адресами (Рисунок 3).

Рисунок 1: Оба узла в одной сети

Рисунок 2: Узлы в разных сетях (один в приватной, другой в публичной)

Рисунок 3: Узлы в разных приватных сетях, но с численно равными адресами

На рисунках выше первая буква в дву-символьных обозначениях означает тип узла (p = peer, r = router). На первом рисунке ситуация благоприятная: узлы в своей сети вполне идентифицируются сетевыми IP адресами и поэтому могут подключаться к друг другу напрямую. На втором рисунке имеем две разные сети, у которых похожие нумерации узлов. Здесь появляются маршрутизаторы (роутеры), у которых есть два сетевых интерфейса – внутри своей сети и вне своей сети. Поэтому у них два IP адреса. Обычные узлы имеют только один интерфейс, через который они могут общаться только в своей сети. Если они передают данные кому-то вне своей сети, то только с помощью NAT внутри маршрутизатора (роутера) и поэтому видимы для других под IP адресом роутера – это их внешний IP адрес. Таким образом, у узла p1 есть внутренний IP = 192.168.0.200 и внешний IP = 10.50.200.5, причем последний адрес будет внешним также и для всех других узлов в его сети1. Похожая ситуация и для узла p2. Поэтому их связь невозможна, если использовать только их внутренние (свои) IP адреса. Можно воспользоваться внешними адресами, то есть адресами роутеров, но, так как у всех узлов в одной приватной сети один и тот же внешний адрес, то это довольно затруднительно. Это проблема решается с помощью механизма NAT

Что же будет, если мы все-таки решим соединить узлы через их внутренние адреса? Данные не выйдут за пределы сети. Для усиления эффекта можно представить ситуацию, изображенную на последнем рисунке – у обоих узлов совпадают внутренние адреса. Если они будут использовать их для коммуникации, то каждый узел будет общаться с самим собой.

WebRTC успешно справляется с такими проблемами, используя протокол ICE, который, правда, требует использования дополнительных серверов (STUN, TURN). Обо всем этом ниже.

Две фазы WebRTC

Чтобы соединить два узла через протокол WebRTC (или просто RTC, если связываются два iPhone‘a) необходимо провести некие предварительные действия для установления соединения. Это первая фаза – установка соединения. Вторая фаза – передача видео-данных.

Сразу стоит сказать, что, хоть технология WebRTC в своей работе использует множество различных способов коммуникации (TCP и UDP) и имеет гибкое переключение между ними, эта технология не имеет протокола для передачи данных о соединении. Не удивительно, ведь подключить два узла p2p не так-то просто. Поэтому необходимо иметь некоторый дополнительный способ передачи данных, никак не связанный с WebRTC. Это может быть сокетная передача, протокол HTTP, это может быть даже протокол SMTP или Почта России2. Этот механизм передачи начальных данных называется сигнальным. Передавать нужно не так много информации. Все данные передаются в виде текста и делятся на два типа – SDP и Ice Candidate. Первый тип используется для установления логического соединения, а второй для физического3. Подробно обо всем этом позже, а пока лишь важно помнить, что WebRTC даст нам некую информацию, которую нужно будет передать другому узлу. Как только мы передадим всю нужную информацию, узлы смогут соединиться и больше наша помощь нужна не будет. Таким образом, сигнальный механизм, который мы должны реализовать отдельно, будет использоваться только при подключении, а при передаче видео-данных использоваться не будет.

Итак, рассмотрим первую фазу – фазу установки соединения. Она состоит из нескольких пунктов. Рассмотрим эту фазу сначала для узла, который инициирует соединение, а потом для ожидающего.

  • Инициатор (звонящий – caller):
    1. Получение локального (своего) медиа потока и установка его для передачи (getUserMediaStream)
    2. Предложение начать видео-передачу данных (createOffer)
    3. Получение своего SDP объекта и передача его через сигнальный механизм (SDP)
    4. Получение своих Ice candidate объектов и передача их через сигнальный механизм (Ice candidate)
    5. Получение удаленного (чужого) медиа потока и отображение его на экране (onAddStream)
  • Ожидающий звонка (callee):
    1. Получение локального (своего) медиа потока и установка его для передачи (getUserMediaStream)
    2. Получение предложения начать видео-передачу данных и создание ответа (createAnswer)
    3. Получение своего SDP объекта и передача его через сигнальный механизм (SDP)
    4. Получение своих Ice candidate объектов и передача их через сигнальный механизм (Ice candidate)
    5. Получение удаленного (чужого) медиа потока и отображение его на экране (onAddStream)

Отличие лишь во втором пункте.

Несмотря на кажущуюся запутанность шагов здесь их на самом деле три: отправка своего медиа потока (п.1), установка параметров соединения (пп.2-4), получение чужого медиа потока (п.5). Самый сложный – второй шаг, потому что он состоит из двух частей: установление физического и логического соединения. Первая указывает путь, по которому должны идти пакеты, чтобы дойти от одного узла сети до другого. Вторая указывает параметры видео/аудио – какое использовать качество, какие использовать кодеки.

Мысленно этап createOffer или createAnswer следует соединить с этапами передачи SDP и Ice candidate объектов.

Далее будут рассмотрены некоторые сущности подробнее, а именно – медиапоток (MediaStream), дескриптор сессии (SDP) и кандидаты (Ice candidate).

Основные сущности

Основной сущностью является медиа поток, то есть поток видео и аудио данных, картинка и звук. Медиа потоки бывают двух типов – локальные и удаленные. Локальный получает данные от устройств входа (камера, микрофон), а удаленный по сети. Таким образом у каждого узла есть и локальный, и удаленный поток. В WebRTC для потоков существует интерфейс MediaStream и также существует подинтерфейс LocalMediaStream специально для локального потока. В JavaScript можно столкнуться только с первым, а если использовать libjingle, то можно столкнуться и со вторым.

В WebRTC существует довольно запутанная иерархия внутри потока. Каждый поток может состоять из нескольких медиа дорожек (MediaTrack), которые в свою очередь могут состоять из нескольких медиа каналов (MediaChannel). Да и самих медиа потоков может быть тоже несколько.

Рассмотрим все по порядку. Для этого будем держать в уме некоторый пример. Допустим, что мы хотим передавать не только видео себя, но и видео нашего стола, на котором лежит листок бумаги, на котором мы собираемся что-то писать. Нам понадобится два видео (мы + стол) и одно аудио (мы). Ясно, что мы и стол стоит разделить на разные потоки, потому что эти данные, наверное, слабо зависят друг от друга. Поэтому у нас будет два MediaStream‘a – один для нас и один для стола. Первый будет содержать и видео, и аудио данные, а второй – только видео (Рисунок 4).

Рисунок 4: Два различных медиа потока. Один для нас, один для нашего стола

Сразу ясно, что медиа поток как минимум должен включать в себя возможность содержать данные разных типов — видео и аудио. Это учтено в технологии и поэтому каждый тип данных реализуется через медиа дорожку MediaTrack. У медиа дорожки есть специальное свойство kind, которое и определяет, что перед нами – видео или аудио (Рисунок 5)

Рисунок 5: Медиа потоки состоят из медиа дорожек

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

Но как мы различим медиа потоки на другом конце соединения? Для этого каждый медиа поток имеет свойство label – метка потока, его название (Рисунок 6). Такое же свойство имеют и медиа дорожки. Хотя на первый взгляд кажется, что видео от звука можно отличить и другими способами.

Рисунок 6: Медиа потоки и дорожки идентифицируются метками

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

Таким образом, если мы хотим, чтобы наши слова, наши эмоции на лице и наш листочек бумаги воспроизводились одновременно, то стоит использовать один медиа поток. Если это не столь важно, то выгодней использовать разные потоки – картинка будет более гладкой4.

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

В конце стоит подумать о стерео звуке. Как известно стерео звук – это два разных звука. И передавать их надо тоже отдельно. Для этого используются каналы MediaChannel. Медиа дорожка звука может иметь много каналов (например, 6, если нужен звук 5+1). Внутри медиа дорожки каналы, разумеется тоже синхронизированы. Для видео обычно используется только один канал, но могут использоваться и несколько, например, для наложения рекламы.

Резюмируя: мы используем медиа поток для передачи видео и аудио данных. Внутри каждого медиа потока данные синхронизированы. Мы можем использовать несколько медиа потоков, если синхронизация нам не нужна. Внутри каждого медиа потока есть медиа дорожки двух видов – для видео и для аудио. Дорожек обычно не больше двух, но может быть и больше, если нужно передавать несколько разных видео (собеседника и его стола). Каждая дорожка может состоять из нескольких каналов, что используется обычно только для стерео звука.

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

Дескриптор сессии (SDP)

У разных компьютеров всегда будут разные камеры, микрофоны, видеокарты и прочее оборудование. Существует множество параметров, которыми они обладают. Все это необходимо скоординировать для медиа передачи данных между двумя узлами сети. WebRTC делает это автоматически и создает специальный объект – дескриптор сессии SDP. Передайте этот объект другому узлу, и можно передавать медиа данные. Только связи с другим узлом пока нет5.

Для этого используется любой сигнальный механизм. SDP можно передать хоть через сокеты, хоть человеком (сообщить его другому узлу по телефону), хоть Почтой России. Всё очень просто – Вам дадут уже готовый SDP и его нужно переслать. А при получении на другой стороне – передать в ведомство WebRTC. Дескриптор сессии хранится в виде текста и его можно изменить в своих приложениях, но, как правило, это не нужно. Как пример, при соединении десктоп↔телефон иногда требуется принудительно выбирать нужный аудио кодек.

Обычно при установке соединения необходимо указывать какой-то адрес, например URL. Здесь в этом нет необходимости, так как через сигнальный механизм Вы сами отправите данные по назначению. Чтобы указать WebRTC, что мы хотим установить p2p соединение нужно вызвать функцию createOffer. После вызова этой функции и указания ей специального callback‘a будет создан SDP объект и передан в этот же callback. Все, что от Вас требуется – передать этот объект по сети другому узлу (собеседнику). После этого на другом конце через сигнальный механизм придут данные, а именно этот SDP объект. Этот дескриптор сессии для этого узла чужой и поэтому несет полезную информацию. Получение этого объекта – сигнал к началу соединения. Поэтому Вы должны согласиться на это6 и вызвать функцию createAnswer. Она – полный аналог createOffer. Снова в Ваш callback передадут локальный дескриптор сессии и его нужно будет передать по сигнальному механизму обратно.

Стоит отметить, что вызывать функцию createAnswer можно только после получения чужого SDP объекта. Почему? Потому что локальный SDP объект, который будет генерироваться при вызове createAnswer, должен опираться на удаленный SDP объект. Только в таком случае возможно скоординировать свои настройки видео с настройками собеседника. Также не стоит вызывать createAnswer и createOffer до получения локального медиа потока – им будет нечего писать в SDP объект7.

Так как в WebRTC есть возможность редактирования SDP объекта, то после получения локального дескриптора его нужно установить. Это может показаться немного странным, что нужно передавать WebRTC то, что она сама нам дала, но таков протокол. При получении удаленного дескриптора его нужно тоже установить. Поэтому Вы должны на одном узле установить два дескриптора – свой и чужой (то есть локальный и удаленный).

После такого рукопожатия узлы знают о пожеланиях друг друга. Например, если узел 1 поддерживает кодеки A и B, а узел 2 поддерживает кодеки B и C, то, так как каждый узел знает свой и чужой дескрипторы, оба узла выберут кодек B (Рисунок 7). Логика соединения теперь установлена, и можно передавать медиа потоки, но есть другая проблема – узлы по-прежнему связаны лишь сигнальным механизмом.

Рисунок 7: Согласование кодеков

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

Итак, соединение уже установлено (логическое соединение), но пока нет пути, по которому узлы сети могут передавать данные. Здесь не всё так просто, но начнем с простого. Пусть узлы находятся в одной приватной сети. Как мы уже знаем, они могут легко соединяться друг с другом по своим внутренним IP адресам (или быть может, по каким-то другим, если используется не TCP/IP).

Через некоторые callback‘и WebRTC сообщает нам Ice candidate объекты. Они тоже приходят в текстовой форме и также, как с дескрипторами сессии, их нужно просто переслать через сигнальный механизм. Если дескриптор сессии содержал информацию о наших установках на уровне камеры и микрофона, то кандидаты содержат информацию о нашем расположении в сети. Передайте их другому узлу, и тот сможет физически соединиться с нами, а так как у него уже есть и дескриптор сессии, то и логически сможет соединиться и данные «потекут». Если он не забудет отправить нам и свой объект кандидата, то есть информацию о том, где находится он сам в сети, то и мы сможем с ним соединиться. Заметим здесь еще одно отличие от классического клиент-серверного взаимодействия. Общение с HTTP сервером происходит по схеме запрос-ответ, клиент отправляет данные на сервер, тот обрабатывает их и шлет по адресу, указанному в пакете запроса. В WebRTC необходимо знать два адреса и соединять их с двух сторон.

Различие от дескрипторов сессии состоит в том, что устанавливать нужно только удаленных кандидатов. Редактирование здесь запрещено и не может принести никакой пользы. В некоторых реализациях WebRTC кандидатов необходимо устанавливать только после установки дескрипторов сессии9.

А почему дескриптор сессии был один, а кандидатов может быть много? Потому что расположение в сети может определяться не только своим внутренним IP адресом, но также и внешним адресом маршрутизатора, и не обязательно одного, а также адресами TURN серверов. Остаток параграфа будет посвящен подробному рассмотрению кандидатов и тому, как соединять узлы из разных приватных сетей.

Итак, два узла находятся в одной сети (Рисунок 8). Как их идентифицировать? С помощью IP адресов. Больше никак. Правда, еще можно использовать разные транспорты (TCP и UDP) и разные порты. Это и есть та информация, которая содержится в объекте кандидата – IP, PORT, TRANSPORT и какая-то другая. Пусть, для примера, используется UDP транспорт и 531 порт.

Рисунок 8: Два узла находятся в одной сети

Тогда, если мы находимся в узле p1, то WebRTC передаст нам такой объект кандидата — [10.50.200.5, 531, udp]. Здесь приводится не точный формат, а лишь схема. Если мы в узле p2, то кандидат таков – [10.50.150.3, 531, udp]. Через сигнальный механизм p1 получит кандидата p2 (то есть расположение узла p2, а именно его IP и PORT). После чего p1 может соединиться с p2 напрямую. Более правильно, p1 будет посылать данные на адрес 10.50.150.3:531 в надежде, что они дойдут до p2. Не важно, принадлежит ли этот адрес узлу p2 или какому-то посреднику. Важно лишь то, что через этот адрес данные будут посылаться и могут достигнуть p2.

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

Перейдем к более сложному случаю. Один узел будет находиться за роутером (точнее, за NAT), а второй узел будет находиться в одной сети с этим роутером (например, в интернете) (Рисунок 9).

Рисунок 9: Один узел за NAT, другой нет

Этот случай имеет частное решение проблемы, которое мы сейчас и рассмотрим. Домашний роутер обычно содержит таблицу NAT. Это специальных механизм, разработанный для того, чтобы узлы внутри приватной сети роутера смогли обращаться, например, к веб-сайтам.

Предположим, что веб-сервер соединен с интернетом напрямую, то есть имеет публичным IP* адрес. Пусть это будет узел p2. Узел p1 (веб-клиент) шлет запрос на адрес 10.50.200.10. Сначала данные попадают на роутер r1, а точнее на его внутренний интерфейс 192.168.0.1. После чего, роутер запоминает адрес источника (адрес p1) и заносит его в специальную таблицу NAT, затем изменяет адрес источника на свой(p1 → r1). Далее, по своему внешнему интерфейсу роутер пересылает данные непосредственно на веб‑сервер p2. Веб-сервер обрабатывает данные, генерирует ответ и отправляет обратно. Отправляет роутеру r1, так как именно он стоит в обратном адресе (роутер подменил адрес на свой). Роутер получает данные, смотрит в таблицу NAT и пересылает данные узлу p1. Роутер выступает здесь как посредник.

А что если несколько узлов из внутренней сети одновременно обращаются к внешней сети? Как роутер поймет кому отправлять ответ обратно? Эта проблема решается с помощью портов. Когда роутер подменяет адрес узла на свой, он также подменяет и порт. Если два узла обращаются к интернету, то роутер подменяет их порты источников на разные. Тогда, когда пакет от веб‑сервера придет обратно к роутеру, то роутер поймет по порту, кому назначен данный пакет. Пример ниже.

Вернемся к технологии WebRTC, а точнее, к ее части, которая использует ICE протокол (отсюда и Ice кандидаты). Узел p2 имеет одного кандидата (свое расположение в сети – 10.50.200.10), а узел p1, который находится за роутером с NAT, будет иметь двух кандидатов – локального (192.168.0.200) и кандидата роутера (10.50.200.5). Первый не пригодится, но он, тем не менее, генерируется, так как WebRTC еще ничего не знает об удаленном узле – он может находиться в той же сети, а может и нет. Второй кандидат пригодится, и, как мы уже знаем, важную роль будет играть порт (чтобы пройти через NAT).

Запись в таблице NAT генерируется только когда данные выходят из внутренней сети. Поэтому узел p1 должен первым передать данные и только после этого данные узла p2 смогут добраться до узла p1.

На практике оба узла будут находиться за NAT. Чтобы создать запись в таблице NAT каждого роутера, узлы должны что-то отправить удаленному узлу, но на этот раз ни первый не может добраться до второго, ни наоборот. Это связано с тем, что узлы не знают своих внешних IP адресов, а отправлять данные на внутренние адреса бессмысленно.

Однако, если внешние адреса известны, то соединение будет легко установлено. Если первый узел отошлет данные на роутер второго узла, то роутер их проигнорирует, так как его таблица NAT пока пуста. Однако в роутере первого узла в таблице NAT появилась нужна запись. Если теперь второй узел отправит данные на роутер первого узла, то роутер их успешно передаст первому узлу. Теперь и таблица NAT второго роутера имеет нужны данные.

Проблема в том, что, чтобы узнать своей внешний IP адрес, нужен узел находящийся в общей сети. Для решения такой проблемы используются дополнительные сервера, которые подключены к интернету напрямую. С их помощью также создаются заветные записи в таблице NAT.

STUN и TURN сервера

При инициализации WebRTC необходимо указать доступные STUN и TURN сервера, которые мы в дальнейшем будем называть ICE серверами. Если сервера не будут указаны, то соединиться смогут только узлы в одной сети (подключенные к ней без NAT). Сразу стоит отметить, что для 3g-сетей обязательно использование TURN серверов.

STUN сервер – это просто сервер в интернете, который возвращает обратный адрес, то есть адрес узла отправителя. Узел, находящий за роутером, обращается к STUN серверу, чтобы пройти через NAT. Пакет, пришедший к STUN серверу, содержит адрес источника – адрес роутера, то есть внешний адрес нашего узла. Этот адрес STUN сервер и отправляет обратно. Таким образом, узел получает свой внешний IP адрес и порт, через который он доступен из сети. Далее, WebRTC с помощью этого адреса создает дополнительного кандидата (внешний адрес роутера и порт). Теперь в таблице NAT роутера есть запись, которая пропускает к нашему узлу пакеты, отправленные на роутер по нужному порту.

Рассмотрим этот процесс на примере.

Пример (работа STUN сервера)

STUN сервер будем обозначать через s1. Роутер, как и раньше, через r1, а узел – через p1. Также необходимо будет следить за таблицей NAT – ее обозначим как r1_nat. Причем в этой таблице обычно содержится много записей от разный узлов подсети – они приводиться не будут.

Итак, в начале имеем пустую таблицу r1_nat.

Internal IP Internal PORT External IP External PORT
       

Таблица 1: Пустая таблица NAT

В таблице 4 столбца. Она задает отображение первых двух столбцов на два последних, то есть каждой паре (IP, PORT), которая адресует узел во внутренней приватной сети, сопоставляется пара (IP, PORT) из внешней публичной сети.

Узел p1 отправляет пакет узлу s1 (STUN серверу). Ниже в таблице указаны четыре интересующие нас поля в заголовке транспортного пакета (TCP или UDP) – IP и PORT источника и приемника. Пусть адреса будут такими:

Src IP Src PORT Dest IP Dest PORT
192.168.0.200 35777 12.62.100.200 6000

Таблица 2: Заголовок пакета

Узел p1 отправляет этот пакет роутеру r1 (не важно каким образом, в разных подсетях могут быть использованы разные технологии). Роутеру необходимо сделать подмену адреса источника Src IP, так как указанный в пакете адрес заведомо не подойдет для внешней подсети, более того, адреса из такого диапазона зарезервированы, и ни один адрес в интернете не имеет такого адреса. Роутер делает подмену в пакете и создает новую запись в своей таблице r1_nat. Для этого ему нужно придумать номер порта. Напомним, что, так как несколько узлов внутри подсети могут обращаться к внешней сети, то в таблице NAT должна храниться дополнительная информация, чтобы роутер смог определить, кому из этих нескольких узлов предназначается обратный пакет от сервера. Пусть роутер придумал порт 888.

Измененный заголовок пакета:

Src IP Src PORT Dest IP Dest PORT
10.50.200.5 888 12.62.100.200 6000

Таблица 3: Роутер подменил адрес источника на свой

Где 10.50.200.5 – это внешний адрес роутера.

Таблица r1_nat:

Internal IP Internal PORT External IP External PORT
192.168.0.200 35777 10.50.200.5 888

Таблица 4: Таблица NAT пополнилась новой записью

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

Настоящий порт, на который узел p1 принимает подключение – это, разумеется, 35777, но сервер шлет данные на фиктивный порт 888, который будет изменен роутером на настоящий 35777.

Итак, роутер подменил адрес и порт источника в заголовке пакета и добавил запись в таблицу NAT. Теперь пакет отправляется по сети серверу, то есть узлу s1. На входе, s1 имеет такой пакет:

Src IP Src PORT Dest IP Dest PORT
10.50.200.5 888 12.62.100.200 6000

Таблица 5: STUN сервер получил пакет

Итого, STUN сервер знает, что ему пришел пакет от адреса 10.50.200.5:888. Теперь этот адрес сервер отправляет обратно. Здесь стоит остановиться и еще раз посмотреть, что мы только что рассматривали. Таблицы, приведенные выше – это кусочек из заголовка пакета, вовсе не из его содержимого. О содержимом мы не говорили, так как это не столь важно – оно как-то описывается в протоколе STUN. Теперь же мы будем рассматривать помимо заголовка еще и содержимое. Оно будет простым и содержать адрес роутера – 10.50.200.5:888, хотя взяли мы его из заголовка пакета. Такое делается не часто, обычно протоколам не важна информация об адресах узлов, важно лишь, чтобы пакеты доставлялись по назначению. Здесь же мы рассматриваем протокол, который устанавливает путь между двумя узлами.

Итак, теперь у нас появляется второй пакет, который идет в обратном направлении:

Src IP Src PORT Dest IP Dest PORT
12.62.100.200 6000 10.50.200.5 888

Таблица 6: STUN сервер отправляет пакет с таким заголовком

Заголовок изменился очень просто – источник и приемник поменялись местами, что логично, так как направление пакета теперь другое.

Таблица 7: STUN сервер отправляет пакет с таким содержимым

Это уже содержание пакета. На самом деле, оно может содержать много информации, но здесь указано лишь то, что важно для понимания работы STUN сервера.

Далее, пакет путешествует по сети, пока не окажется на внешнем интерфейсе роутера r1. Роутер понимает, что пакет предназначен не ему. Как он это понимает? Это можно узнать только по порту. Порт 888 он не использует для своих личных целей, а использует для механизма NAT. Поэтому в эту таблицу роутер и смотрит. Смотрит на столбец External PORT и ищет строку, которая совпадет с Dest PORT из пришедшего пакета, то есть 888.

Internal IP Internal PORT External IP External PORT
192.168.0.200 35777 10.50.200.5 888

Таблица 8: Таблица NAT

Нам повезло, такая строчка существует. Если бы не повезло, то пакет бы просто отбросился. Теперь нужно понять, кому из узлов подсети надо отправлять этот пакет. Не стоит торопиться, давайте снова вспомним о важности портов в этом механизме. Одновременно два узла в подсети могли бы отправлять запросы во внешнюю сеть. Тогда, если для первого узла роутер придумал порт 888, то для второго он бы придумал порт 889. Предположим, что так и случилось, то есть таблица r1_nat выглядит так:

Internal IP Internal PORT External IP External PORT
192.168.0.200 35777 10.50.200.5 888
192.168.0.173 35777 10.50.200.5 889

Таблица 9: Таблица NAT

По порту 888 понятно, что нужный внутренний адрес это 192.168.0.200:35777. Роутер заменяет адрес приемника с

Src IP Src PORT Dest IP Dest PORT
12.62.100.200 6000 10.50.200.5 888

Таблица 10: Роутер подменяет адрес приемника

На

Src IP Src PORT Dest IP Dest PORT
12.62.100.200 6000 192.168.0.200 35777

Таблица 11: Роутер подменил адрес приемника

Пакет успешно приходит к узлу p1 и, посмотрев на содержимое пакета, узел узнает о своем внешнем IP адресе, то есть об адресе роутера во внешней сети. Также он знает и порт, который роутер пропускает через NAT.

Что же дальше? Какая от этого всего польза? Польза – это запись в таблице r1_nat. Если теперь кто угодно будет отправлять на роутер r1 пакет с портом 888, то роутер перенаправит этот пакет узлу p1. Таким образом, создался небольшой узкий проход к спрятанному узлу p1.

Из примера выше можно получить некоторое представление о работе NAT и сути STUN сервера. Вообще, механизм ICE и STUN/TURN сервера как раз и направлены на преодоления ограничений NAT.

Между узлом и сервером может стоять не один роутер, а несколько. В таком случае узел получит адрес того роутера, который является первым выходящим в ту же сеть, что и сервер. Иными словами, получим адрес роутера, подключенного к STUN серверу. Для p2p коммуникации это как раз то, что нам нужно, если не забыть тот факт, что в каждом роутере добавится необходимая нам строчка в таблицу NAT. Поэтому обратный путь будет вновь так же гладок.

TURN сервер – это улучшенный STUN сервер. Отсюда сразу следует извлечь, что любой TURN сервер может работать и как STUN сервер. Однако, есть и преимущества. Если p2p коммуникация невозможна (как например, в 3g сетях), то сервер переходит в режим ретранслятора (relay), то есть работает как посредник. Разумеется, ни о каком p2p тогда речь не идет, но за рамками механизма ICE узлы думают, что общаются напрямую.

В каких случаях необходим TURN сервер? Почему не хватает STUN сервера? Дело в том, что существует несколько разновидностей NAT. Они одинаково подменяют IP адрес и порт, однако в некоторые из них встроена дополнительная защита от “фальсификации”. Например, в симметричной таблице NAT сохраняются еще 2 параметра - IP и порт удаленного узла. Пакет из внешней сети проходит через NAT во внутреннюю сеть только в том случае, если адрес и порт источника совпадают с записанными в таблице. Поэтому фокус со STUN сервером не удается - таблица NAT хранит адрес и порт STUN сервера и, когда роутер получает пакет от WebRTC собеседника, он его отбрасывает, так как он “фальсифицирован”. Он пришел не от STUN сервера.

Таким образом TURN сервер нужен в том случае, когда оба собеседника находятся за симметричным NAT (каждый за своим).

Краткая сводка

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

  • Медиа поток
    • Видео и аудио данные упаковываются в медиа потоки
    • Медиа потоки синхронизируют медиа дорожки, из которых состоят
    • Различные медиа потоки не синхронизированы между собой
    • Медиа потоки могут быть локальными и удаленными, к локальному обычно подключена камера и микрофон, удаленные получают данные из сети в кодированном виде
    • Медиа дорожки бывают двух типов – для видео и для аудио
    • Медиа дорожки имеют возможность включения/выключения
    • Медиа дорожки состоят из медиа каналов
    • Медиа дорожки синхронизируют медиа каналы, из которых состоят
    • Медиа потоки и медиа дорожки имеют метки, по которым их можно различать
  • Дескриптор сессии
    • Дескриптор сессии используется для логического соединения двух узлов сети
    • Дескриптор сессии хранит информацию о доступных способах кодирования видео и аудио данных
    • WebRTC использует внешний сигнальный механизм – задача пересылки дескрипторов сессии (sdp) ложится на приложение
    • Механизм логического соединения состоит из двух этапов – предложения (offer) и ответа (answer)
    • Генерация дескриптора сессии невозможна без использования локального медиа потока в случае предложения (offer) и невозможна без использования удаленного дескриптора сессии в случае ответа (answer)
    • Полученный дескриптор надо отдать реализации WebRTC, причем неважно, получен ли этот дескриптор удаленно или же локально от той же реализации WebRTC
    • Имеется возможность небольшой правки дескриптора сессии
  • Кандидаты
    • Кандидат (Ice candidate) – это адрес узла в сети
    • Адрес узла может быть своим, а может быть адресом роутера или TURN сервера
    • Кандидатов всегда много
    • Кандидат состоит из IP адреса, порта и типа транспорта (TCP или UDP)
    • Кандидаты используются для установления физического соединения двух узлов в сети
    • Кандидатов также нужно пересылать через сигнальный механизм
    • Кандидатов также нужно передавать реализации WebRTC, однако только удаленных
    • В некоторых реализациях WebRTC кандидатов можно передавать только после установки дескриптора сессии
  • STUN/TURN/ICE/NAT
    • NAT – механизм обеспечения доступа к внешней сети
    • Домашние роутеры поддерживают специальную таблицу NAT
    • Роутер подменяет адреса в пакетах – адрес источника на свой, в случае, если пакет идет во внешнюю сеть, и адрес приемника на адрес узла во внутренней сети, если пакет пришел из внешней сети
    • Для обеспечения многоканального доступа к внешней сети NAT использует порты
    • ICE – механизм обхода NAT
    • STUN и TURN сервера – сервера-помошники для обхода NAT
    • STUN сервер позволяет создавать необходимые записи в таблице NAT, а также возвращает внешний адрес узла
    • TURN сервер обобщает STUN механизм и делает его работающим всегда
    • В наихудших случаях TURN сервер используется как посредник (relay), то есть p2p превращается в клиент-сервер-клиентную связь.
Сноски:

forasoft.github.io


Смотрите также