WebRTC – стандарт, позволяющий организоваться передачу аудио, видео и данных от браузера к браузеру в режиме реального времени.
По сути, WebRTC представляет собой набор API JavaScript, при помощи которых можно получить доступ к различным медиа устройствам (микрофон, камера) и организовать передачу данных удаленному клиенту по технологии Р2Р.
Для установления сессии между двумя клиентами, посредством WebRTC используется сервер сигнализации (SIP, XMPP), взаимодействие с сигнальным сервером, ввиду их вариативности остается на усмотрение разработчика, но зачастую используется Web Socket (WS) или защищенный Web Socket (WSS). На данный момент поддержка WebRTC интегрирована в браузеры Mozilla Firefox и Google Chrome, в последних версиях браузеров сайтам не может быть предоставлен доступ к медиа-устройствам, если взаимодействие с ним производится не по защищенному каналу HTTPS, что в свою очередь исключает возможность использовать незащищенный Web Socket (WS). После установления сессии, обмен медиа-данными браузеры осуществляют напрямую.
В общих чертах схема взаимодействия WebRTC приложений выглядит вот так:
Однако в этом кроется и основная опасность использования WebRTC. Для передачи данных друг другу двум клиентам (браузерам) необходимо обменяться локальными и реальными IP адресами, что нивелирует настройки анонимности сети. Этот процесс реализован настолько открыто и прямолинейно, что запросить адрес можно с помощью простого скрипта на JavaScript. Полностью защититься от этой угрозы можно, отключив встроенную в браузер поддержку WebRTC. В интернете большое количество статей, описывающих как это сделать, например,
https://thesafety.us/ru/what-is-webrtc
Тем не менее, следует отметить, также и положительные стороны данного стандарта, к очевидным преимуществам относятся:
1. Использование из браузера.
Приложения, использующие данную технологию встраиваются в веб страницу, таким образом, для начала их использования, достаточно просто открыть браузер. На данный момент поддержка WebRTC встроена в браузеры Opera, Mozilla Firefox и Google Chrome, таким образом нет необходимости в установке дополнительного программного обеспечения.
2. WebRTC — обеспечивает высокий уровень безопасности благодаря передаче данных в зашифрованном виде.
Установление соединения с сервером сигнализации осуществляется посредством HTTPS и обмен медиа данными между браузерами при помощи STRP, что обеспечивает защиту пакетов при обмене между узлами.
3. Проект с открытым исходным кодом.
Как понятно из описания, основным направлением приложений, использующих WebRTC является установление аудио и видео соединений, т.е. это могут быть приложения для звонков из браузера, использующие SIP телефонию и SIP сервер в качестве сигнального, например, SipML5 (инструкция по установке и настройке есть на данном сайте) или же различные видео конференции, например, приложение TrueConf.
Рассмотрим принцип работы приложения на WebRTC.
Для трансляции потоковых видео и аудио данных используются HTML5 теги "audio" и "video".
Сам по себе WebRTC насчитывает больше десятка JavaScript интерфейсов, но для установления соединения используются
RTCPeerConnection - Представляет собой WebRTC-соединение между локальным компьютером и удаленным узлом. Используется для обработки успешной передачи данных между двумя узлами.
RTCSessionDescription - Представляет параметры сессии. Каждый RTCSessionDescription содержит описания типа, показывающего какую часть (предложение/ответ) процесса переговоров он описывает, и SDP-дескриптор сессии.
getUserMedia – предоставляет доступ к медиа устройствам.
RTCIceCandidate - Представляет собой кандидата internet connectivity establishment (ICE) для установления RTCPeerConnection.
Технология ICE позволяет подключиться пользователям, находящимся за межсетевым экраном. Она включает в себя четыре спецификации:
• RFC 5389: Session Traversal Utilities for NAT (STUN).
• RFC 5766: Traversal Using Relays around NAT (TURN): Relay Extensions to STUN.
• RFC 5245: Interactive Connectivity Establishment (ICE): A Protocol for NAT Traversal for Offer/Answer Protocols.
• RFC 6544: TCP Candidates with Interactive Connectivity Establishment (ICE)
STUN — клиент-серверный протокол, который активно применяется для VoIP. STUN-сервер здесь считается приоритетным поскольку он позволяет маршрутизировать UDP-траффик.
Реализация клиента для ICE-серверов в WebRTC уже предустановлена, так что мы можем просто указать несколько серверов STUN или TURN. Более того, для этого при инициализации достаточно просто передать объект с соответствующими параметрами.
Проследим за установлением SIP соединения в приложении SipML5
Используемый сигнальный сервер Asterisk имеет встроенный веб сервер с поддержкой Web Socket, в том числе защищенных (WSS). Напомню, что взаимодействие с сервером для передчи медиа данных возможно только по HTTPS.
После заполнения полей, необходимых для регистрации на сервере, веб-клиент отправляет, посредством WSS пакет REGISTER
Который принимается и обрабатывается сервером
Далее, инициатор, используя метод RTCPeerConnection.createOffer() создает “предложение”, в котором передает всю, необходимую для установления соединения информацию, об IP адресах (определенных при помощи интерфейса RTCIceCandidate), поддерживаемых кодеках и т.д., используя метод RTCPeerConnection.setLocalDescription(). Для идентификации звонка, оба клиента устанавливают уникальный идентификатор – токен (token).
На другой стороне второй клиент сохраняет эту информацию посредством метода RTCPeerConnection.setRemoteDescription(), и откликается "ответом", используя метод RTCPeerConnection.createAnswer(). Таким образом, оба клиента имею всю, необходимую для начала обмена медиа данными информацию.
Схема обмена данными выглядит примерно так:
API WebRTC позволяют создавать гибкие приложения а передача траффика в зашифрованном виде защищает его при прохождении по сети, однако, наличие проблем с безопасностью, проявляющейся в отображении IP адресов, делает использование таких приложений целесообразной и безопасной только в замкнутых корпоративных сетях, без выхода «во внешний мир». Хотя Google обещает в скором времени исправить эти проблемы, что может дать ощутимый толчок перспективной технологии.