WebRTC — это трендовая технология потокового видео, которая работает в браузере пользователя без установки дополнительного ПО и использует видео кодек VP8, оптимизированный для использования в сети Интернет.

Сегодня каждый Android Chrome браузер поддерживает эту технологию и тем самым мы получаем миллионы устройств, готовых к просмотру трансляции без установки какого-либо дополнительного ПО или специальных конфигураций.

Камера для этого обзора была подобрана самая простая из тех, что поддерживали протокол RTSP и кодеки H.264 и G.711 для совместимости с WebRTC Media & Broadcasting Server.

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

После этого загорелится зеленая лампочка. Камера самостоятельно взяла IP адрес по DHCP и в web интерфейсе роутера и мы увидели Dlink 2103 IP 192.168.1.35.

Теперь можно зайти в веб интерфейс с правами администратора. Пароль отсутствует. http://192.168.1.35

Камера работает и исправно отображает видео в административном интерфейсе. И звук тоже передается правильно.

Заходим в настройки Setup — Network и отключаем Authentication поставив его в Disabled. Тем самым мы убираем запрос пароля при попытке доступа к камере. RTSP порт, как видно из настроек, 554 — это порт, используемый в RTSP по умолчанию.

live1.sdp и live2.sdp — это профили — предопределенные конфигурации потоков, которые будут определять формат передаваемого видео.

Мы используем стандартный профиль live1.sdp, т.к. он удовлетворяет нашим требованиям H.264 + G.711, 25 кадров в секунду. При необходимости можно его подредактировать.

Теперь проведем простой тест нашей камеры и заберем ее видео поток при помощи VLC плеера. Для этого в VLC открываем “Open URL” и вводим RTSP адрес камеры: rtsp://192.168.1.35/live1.sdp

Поток снова отображается и на этот раз в стороннем VLC плеере через RTSP. Это означает, что камера протестирована и готова к вещанию через сервер.

В локальной сети нет проблем забрать поток, если ваш VLC плеер находится в одной сети с камерой. В глобальной сети могут быть проблемы с NAT и брандмауэрами.

Поэтому в случае каких-либо сетевых проблем, обратитесь к администратору сети или в техподдержку Интернет-провайдера.

В нашем случае провайдером выступал Ростелеком. Все заработало сразу, т.к. или IP адрес оказался статическим, или NAT более гуманным.

Внешний IP адрес был определен за пару минут, как 177.41.122.23, с помощью одного обращения к сайту myip.ru.

Теперь осталось сказать роутеру чтобы при обращении на RTSP порт 554 он отправлял входящие запросы на IP камеру по адресу 192.168.1.35. Что и было проделано в настройках маршрутизатора.

Для того, чтобы убедиться в том, что 554 порт действительно отвечает, мы выполнили команду telnet 177.41.122.23 554 и убедились, что кто-то уже отвечает на этом порту. Осталось запустить сервер и подключиться через него к камере.

В качестве сервера использовали виртуальный сервер на Centos 64 bit от digitalocean в дата-центре Европы.

Результатом заказа сервера стал доступ к SSH консоли и мы вошли туда через SSH клиент Putty

Процесс установки медиа сервера подробно описан в документации к WebRTC Media & Broadcasting Server и сводится к выполнению нескольких команд из командной строки Linux. На всякий случай скопировали его сюда под спойлер.

1. Скачали установочный архив сервера:

$wget https://flashphoner.com/download-wcs5-server.tar.gz

2. Развернули:

$tar -xzf download-wcs5-server.tar.gz

3. Установили:

$cd FlashphonerWebCallServer

$./install.sh

В процессе установки ввели IP адрес сервера: XXX.XXX.XXX.XXX

4. Активировали лицензию:

$cd /usr/local/FlashphonerWebCallServer/bin

$./activation.sh

5. Запустили сервер:

$service webcallserver start

6. Проверили логи:

$tail - f /usr/local/FlashphonerWebCallServer/logs/flashphoner_manager.log

7. Убедились, что сервер стартовал и готов к работе:

$ps aux | grep Flashphoner

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

Открываем страницу http://host:9091 Demo / Streaming Min в Chrome браузере, устанавливаем соединение и вводим rtsp-адрес rtsp://177.41.122.23/live1.sdp

177.41.122.23 — это внешний IP адрес камеры. Маршрутизатор будет перенаправлять RTSP запросы на 192.168.1.35 в соответствии с правилами трансляции сетевых адресов NAT на примере выше.

Если у вас динамический IP, он может постоянно меняться, поэтому есть смысл получить бесплатный домен для динамических адресов, например с помощью сервиса no-ip.com.

В этом случае адрес вашего потока будет выглядеть например так: rtsp://my-webrtc-rtsp.noip.me и будет постоянным.

Для того, чтобы началось воспроизведение потока, мы передаем как имя потока rtsp://177.41.122.23/live1.sdp — URL потока. WebRTC Media & Broadcasting Server запросит потоки с камеры, обработает их и отдаст браузеру на воспроизведение по WebRTC.

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

Остается только создать WebRTC сессию и подключиться к уже существующему потоку.

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

Соединение установлено и зритель видит поток на экране, а так же уникальную ссылку, по которой другие Интернет-пользователи смогут увидеть этот же видео поток. Теперь пользователь может отправить ссылку кому-то другому, остановить воспроизведение потока или включить полноэкранный режим, пользуясь контролами в правом нижнем углу.

Стоит отметить достаточно низкую задержку. Пинг до дата-центра составляет около 100 миллисекунд и задержка не различима глазом. Можно предположить, что реальная задержка составляет те же 100 плюс минус столько же миллисекунд на время буферизации.

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

Сервер достаточно прост в установке и настройке и для его запуска не требуется каких-либо серьезных навыков. Разве что необходимы знания Linux на уровне продвинутого пользователя, умеющего выполнять команды из консоли через ssh и пользоваться текстовым редактором.