Стриминг видео

Viinex позволяет передавать видео в соответствии с спецификациями:

  • WebRTC
  • HLS
  • RTSP

Пример трансляции live-видео, видеоархива и синтетического видеопотока можно увидеть на нашем демонстрационном примере для разработчиков.

WebRTC

Сервер WebRTC реализован в Viinex в феврале 2019 года. Мы уделили ему достаточно большое внимание и слово «реализация» означает, что сервер WebRTC реализован на базе собственного стека технологий, без использования каких-либо готовых программных решений c открытым кодом. Это позволяет рассматривать сервер WebRTC как функциональность, созданную на языке Haskell и полностью развиваемую и управляемую командой разработки нашей компании. Это утверждение касается и другой функциональности работы с видео, включая трансляцию по HLS и RTSP.

С технической точки зрения WebRTC — это довольно обширный набор протоколов и стандартов, среди которых — DTLS для выбора алгоритмов и ключей шифрования, STUN и ICE для установки соединения, SDP для описания всей сессии передачи данных, SRTP для безопасной передачи медиа данных, объединенных для совместной работы (подробнее webrtc.org).

ПротоколОписаниеRFC
DTLS Datagram Transport Layer Security RFC 7983
STUN  Session Traversal Utilities for NAT  RFC 8489 
ICE Interactive Connectivity Establishment RFC 8445
SDP Session Description Protocol RFC 4566
SRTP  Secure Real-time Transport Protocol  RFC 6904

Большую часть этих протоколов необходимо реализовать и интегрировать друг с другом просто для того, чтобы получить в браузере видеопоток. Все это, к счастью, происходит прозрачно и незаметно для ПО, которое использует Viinex.

Помимо своей распространенности и максимальной поддержки браузерами протокол WebRTC обладает несколькими преимуществами при использовании в системах видеонаблюдения:

  • минимальная задержка между регистрацией видео с помощью IP-камеры и отображением его в браузере — например, при использовании реализации WebRTC в Viinex она составляет около 230 миллисекунд при работе с USB-видеокамерой и 300…400 миллисекунд при работе с обычными IP-видеокамерами. WebRTC протокол, активно использующийся в видеоконференцсвязи, можно применять в системах видеонаблюдения для вещания в тех приложениях, где необходимо наблюдать происходящее перед камерой в реальном времени или где предполагается удаленное управление PTZ-камерами в ручном режиме со стороны оператора.
  • безопасная передача видеоданных в сети, т.к в стандарте WebRTC для передачи видеопотоков используется SRTP (Secure Real-time Transport Protocol). Не нужно для этого транскодировать видео, т.к. Viinex не изменяет плейлоад видео, а только шифрует данные. В случае отсутствия в SDP-документах информации о транспорте и шифровании браузер просто выдаст ошибку и не перейдет к следующему шагу. Кроме этого, такой подход лучше подходит для работы с видеоданными, чем организация VPN. SRTP изначально предназначен для работы с видео, потому что в случае потери пакетов при передаче, их не нужно пересылать повторно, что в случае с VPN обычно не так.
  • минимизация затрат на входящий и исходящий трафик на центральном «облачном» сервере для приложения, обеспечивающего удаленный доступ своим клиентам — за счет возможности установки соединения для передачи видео между сервером и клиентом напрямую (даже в том случае, если обе стороны находятся в своих локальных подсетях). Viinex может быть использован для P2P-передачи видео между экземпляром Viinex, который может находиться за NAT, и клиентским браузером, который также, как правило, находится за NAT. В этой ситуации по-прежнему будет нужен центральный сервер или “облачная” служба — для того, чтобы передать инициирующие (сигнальные) HTTP-запросы от клиента к экземпляру Viinex. При этом медиаданные пойдут от WebRTC-сервера Viinex, установленного на периферии, в клиентский браузер уже напрямую, минуя центральный сервер. Это дает возможность собирать решение для видеонаблюдения с большим числом пользователей и камер, которое будет действительно эффективным с точки зрения стоимости эксплуатации такого облачного сервиса. В состав Viinex входит готовый STUN-cервер для использования интегрирующим приложением.

Подробнее об использовании WebRTC в видеонаблюдении можно прочитать в нашем блоге.

HLS

Viinex c 2016 года поддерживает трансляцию по протоколу HLS. Этот протокол был разработан компанией Apple и впервые опубликован в 2009 году, а позднее оформлен в документ RFC 8216. Аббревиатура HLS означает HTTP Live Streaming, то есть транспортным протоколом для доставки видео является в этом случае HTTP. Как следствие, такая система доставки данных хорошо работает в Internet, даже при наличии со стороны клиента NAT, брандмауэров, ограничивающих трафик по портам, и т.п. Этот протокол получил широкое распространение и поддерживается большинством медиаплееров, браузеров и мобильных устройств.

Viinex поддерживает как онлайн-трансляцию, так и трансляцию ранее записанного видеоархива по протоколу HLS. Для этого не используется транскодирование, т.к. Viinex просто оборачивает входящие в реальном времени кодированные видеоданные или ранее записанные видеоархивные данные самим Viinex, в MPEG TS формат для дальнейшей доставки этого видео. Видео сегментируется на фрагменты и создается индексный файл (плейлист M3U8). Механизм видеотрансляции основан на последовательном проигрывании видеофрагментов, которые загружаются по указанным в M3U8-плейлисте ссылкам. Работая как стандартный веб-сервер, Viinex принимает запросы от клиентов и доставляет всё необходимое для воспроизведения. В режиме трансляции запрошенного видеоархива M3U8 содержит ссылки на все фрагменты от первого до последнего. В режиме онлайн-трансляции M3U8 содержит только ссылки на последние несколько фрагментов. Чтобы получить новые фрагменты, приложение в браузере пользователя в рамках спецификации HLS периодически пересчитывает данные в формате M3U8, что обеспечивает пользователя постоянно пополняемым списком видеофрагментов, которые впоследствии клиент собирает для непрерывного воспроизведения видеопотока пользователю.

Использование HLS позволяет проигрывать видеопотоки, транслируемые Viinex в браузерах Apple Safari (в том числе на iOS) и Microsoft Edge – нативно, без дополнительных компонентов. Браузеры Google Chrome и Mozilla Firefox поддерживают часть HTML5-спецификации, называемой Media Streaming Extensions (MSE), что делает возможным проигрывание в них HLS-видеопотока также нативно, за счет исполнения кода на Javascript – например, одним из готовых плееров, таким как hls.js. Таким образом, для проигрывания видеопотока, раздаваемого Viinex, требуется лишь ввести соответствующий URL в адресной строке браузера, либо в javascript-коде направить на этот URL имеющийся на веб-странице тег video. Если стоит задача воспроизведения видео в нативном клиентском приложении (“rich client application”), – одним из решений является внедрение в него компонента с браузером, который будет направлен на нужный URL.

Viinex поддерживает политику совместного использования ресурсов для разных источников (CORS). Если экземпляр выставляются в Интернет для того чтобы транслировать видео напрямую на устройства конечных пользователей, – Viinex имеет минимально возможный сетевой «периметр» – единственный HTTP порт на каждый экземпляр, – на котором доступен лаконичный, полностью документированный программный интерфейс. Протокол HTTP, через который осуществляется взаимодействие с Viinex, может быть перенаправлен через обратный прокси, реализующий TLS, что сделает сетевой транспорт защищенным от подмены и прослушивания. Все вызовы программного интерфейса Viinex требуют аутентификации.

Подробнее об использовании WebRTC в видеонаблюдении можно тоже прочитать в нашем блоге.

RTSP

RTSP существует с 1998 года и уже достаточно давно является де-факто стандартом в видеонаблюдении. Он также является частью стандарта ONVIF, который, в свою очередь, поддерживается практически любым производителем видеокамер на рынке – если, конечно, этот производитель заинтересован в том, чтобы его оборудование поддерживалось другими производителями.

В Viinex помимо RTSP-клиента реализован сервер RTSP. Real Time Streaming Protocol (RFC 2326) или сокращенно RTSP — это протокол уровня приложений, позволяющий осуществлять контролируемую доставку мультимедиа-данных в реальном времени по запросу. При этом источники данных могут включать как потоки данных в реальном времени, так и ранее записанное видео. RTSP также предоставляет инструменты управления доставкой: возможность начать трансляцию, остановить трансляцию, начать с определенного времени, изменить скорость трансляции мультимедиа (2x, 8x и т.д.) и т.п. Дополнительно RTSP предоставляет средства для выбора каналов доставки, таких как UDP, multicast UDP и TCP, а также возможность выбора механизма доставки, основанного на RTP (RFC 1889).

RTSP-сервер Viinex поддерживает RTP с транспортом UDP unicast, multicast и TCP, реализует digest-аутентификацию, что делает Viinex удобным RTSP-прокси к источникам видео. Конечно, RTSP-клиент Viinex совместим с его же собственным RTSP-сервером. Это позволяет передавать видеопоток от одного экземпляра Viinex на другие экземпляры, которые, в свою очередь, могут раздавать полученные данные по протоколу RTSP, HLS или WebRTC. Тем самым, с Viinex становится возможным масштабирование вещания видеоданных от одного источника к неограниченному числу удаленных клиентов.