Стриминг видео
Viinex позволяет передавать видео в соответствии с спецификациями:
- WebRTC
- HLS
- RTSP
Пример трансляции live-видео, видеоархива и синтетического видеопотока можно увидеть на нашем демонстрационном примере для разработчиков.
WebRTC
Сервер WebRTC реализован в Viinex в феврале 2019 года. Мы уделили ему достаточно большое внимание и слово «реализация» означает, что сервер WebRTC реализован на базе собственного стека технологий, без использования каких-либо готовых программных решений c открытым кодом. Это позволяет рассматривать сервер WebRTC как функциональность, созданную на языке Haskell и полностью развиваемую и управляемую командой разработки нашей компании. Это утверждение касается и другой функциональности работы с видео, включая трансляцию по HLS и RTSP.
С технической точки зрения WebRTC — это довольно обширный набор протоколов и стандартов, среди которых — DTLS для выбора алгоритмов и ключей шифрования, STUN и ICE для установки соединения, SDP для описания всей сессии передачи данных, SRTP для безопасной передачи медиа данных, объединенных для совместной работы (подробнее webrtc.org).
[table td1=»Протокол» td2=»Описание» td3=»RFC»] [td1] DTLS [/td1] [td2] Datagram Transport Layer Security [/td2] [td3] RFC 7983 [/td3] [td1] STUN [/td1] [td2] Session Traversal Utilities for NAT [/td2] [td3] RFC 8489 [/td3][td1] ICE [/td1] [td2] Interactive Connectivity Establishment [/td2] [td3] RFC 8445 [/td3][td1] SDP [/td1] [td2] Session Description Protocol [/td2] [td3] RFC 4566 [/td3][td1] SRTP [/td1] [td2] Secure Real-time Transport Protocol [/td2] [td3] RFC 6904 [/td3][/table]
Большую часть этих протоколов необходимо реализовать и интегрировать друг с другом просто для того, чтобы получить в браузере видеопоток. Все это, к счастью, происходит прозрачно и незаметно для ПО, которое использует 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 становится возможным масштабирование вещания видеоданных от одного источника к неограниченному числу удаленных клиентов.