Сервис позволяет приобрести камеру в Интернет-магазине и добавить ее в личный кабинет, указав уникальный идентификатор камеры и параметры авторизации: логин и пароль от камеры. После успешного добавления пользователь может бесплатно просматривать LIVE-видео с камеры в веб-интерфейсе личного кабинета и управлять поворотным механизмом камеры, если он поддерживается камерой. Оформив подписку на один из тарифов, пользователь получает доступ к записываемому с камеры видеоархиву в течение ограниченного времени. Подключенные к сервису камеры отображаются на карте мира в публичном (если подключена услуга) и приватном разделах сайта. Для отображения камер на карте используется картографический сервис Google Maps. В личном кабинете возможно предоставить гостевой доступ к камере для просмотра LIVE-видео и записей из архива другим пользователям сервиса.
Платные услуги.
- Публичный доступ к камере — для неавторизованных пользователей доступно LIVE-видео с камеры. Камеры отображаются на карте мира и в разделе публичных камер.
- Оповещения о событиях камеры.
- Запись и хранение видеоархива с камеры в течение ограниченного времени в зависимости от выбранного тарифа.
- Дополнительный месяц архива — плюс 30 дней к текущему тарифному плану.
Для оплаты услуг сервиса используется платежный агрегатор Robokassa.
Плагин Timeline для видео плеера VideoJS
Для видеоплеера VideoJS разработан плагин Timeline. Плагин предоставляет возможность масштабирования временной шкалы (часы, дни, недели, месяцы), прокрутки шкалы по всей длине записанного видеоархива, просмотра фрагментов видео на шкале в разных часовых поясах.
На временной шкале отображаются фрагменты видеоархива длиной до одного часа и события камеры (онлайн/оффлайн). При клике по фрагменту на временной шкале начинается воспроизведение видео. При этом на временной шкале отображается маркер текущей позиции, синхронизированный со временем воспроизведения видео. С помощью маркера можно перемотать видео к произвольному участку в рамках воспроизводимого фрагмента. Данный функционал дублирует стандартную возможность плеера, делая ее более удобной в совокупности с возможностью масштабирования временной шкалы.
Модуль P2P для видеокамеры Zodiak
Для доступа к API управления поворотным механизмом, авторизации на камере и захвата видеопотока требуется пробитие NAT, так как у камеры нет статического IP-адреса. Кроме того, камера может эксплуатироваться в условиях различных сетевых конфигураций, например, может находиться за несколькими коммутаторами.
Для видеокамеры Zodiak разработан P2P-модуль на языке С. Пробитие NAT осуществляется с помощью COTURN-сервера по протоколу ICE/TURN. COTURN-сервер является координирующим звеном, обеспечивающим взаимодействие между веб-сервисом Zodiak и медиасервером EVO Stream с одной стороны, и камерой Zodiak — с другой.
Получая входящее подключение от камеры, COTURN-сервер производит диагностику сетевого подключения, определяет тип NAT, в зависимости от типа NAT выбирает способ пробития NAT, открывает туннель к камере, сообщает камере параметры подключения (хост и порт). Далее P2P-модуль отправляет полученные параметры подключения на веб-сервис Zodiak и поддерживает открытый туннель в активном состоянии, отправляя пакеты keep-alive на COTURN-сервер.
Управляющий канал протокола RTSP при захвате видеопотока с камеры осуществляется по следующей цепочке: RTSP Stream Камеры ⇔ Zodiak P2P-модуль на камере ⇔ COTURN-сервер ⇔ EVO Stream.
- Веб-сервис Zodiak формирует URI для захвата видеопотока с камеры, используя полученные параметры открытого камерой подключения к COTURN-серверу (rtsp://<coturn-host>:<coturn-port>/streamuri), отправляет управляющую команду на медиасервер EVO Stream для захвата видео с камеры.
- Медиасервер EVO Stream обращается к камере через COTURN-сервер по указанному URI по RTSP-протоколу.
- COTURN-сервер транслирует полученные TCP-пакеты на камеру по открытому туннелю.
- P2P-модуль на камере в рамках RTSP-протокола подменяет адрес хоста и порт на локальный в TCP-пакетах запроса, транслируя их на камеру. Получив ответ от камеры, подменяет адрес хоста и порт в TCP-пакетах ответа на адрес COTURN-сервера, транслируя их на COTURN-сервер по открытому туннелю.
- Медиасервер EVO Stream в рамках управляющего канала RTSP сообщает камере адрес, на который следует отправлять видеопоток по протоколу RTP.
Авторизация на камере при добавлении в личный кабинет и управление поворотным механизмом камеры осуществляется по цепочке: HTTP API Камеры ⇔ Zodiak P2P ⇔ COTURN-сервер ⇔ Веб-сервис Zodiak.
- Веб-сервис Zodiak формирует URI для вызова доступного HTTP API метода на камере, используя полученные параметры открытого камерой подключения к COTURN-серверу (http://<coturn-host>:<coturn-port>/api?params=...), отправляет запрос на COTURN-сервер.
- COTURN-сервер транслирует полученные TCP-пакеты на камеру по открытому туннелю.
- P2P-модуль на камере в рамках HTTP-протокола подменяет адрес хоста и порт на локальный в TCP-пакетах запроса, транслируя их на камеру. Получив ответ от камеры, подменяет адрес хоста и порт в TCP-пакетах ответа на адрес COTURN-сервера, транслируя их на COTURN-сервер по открытому туннелю.
- Веб-сервис Zodiak получает от COTURN-сервера HTTP-ответ, сформированный на стороне камеры.
P2P-модуль реализован с использованием библиотек PJLIB и PJNATH. При разработке модуля возникли следующие сложности.
- Toolchain, предоставленный производителями камер, содержал компилятор достаточно старой версии, не поддерживающий современные стандартны языка С. В результате для успешной компиляции реализуемого P2P-модуля пришлось вносить множество правок в исходный код библиотеки PJLIB и PJNATH.
- Библиотека PJNATH не предоставляет готовых модулей для туннелирования HTTP и RTSP-трафика, данные модули пришлось реализовывать с нуля, используя готовые инструменты для туннелирования TCP-трафика. Наибольшие сложности возникли при туннелировании RTSP-трафика, поскольку данный протокол более сложен по сравнению с HTTP.
- На камерах слишком мало аппаратных ресурсов, что потребовало дополнительного времени на оптимизацию P2P модуля.