Агент на камере для соединения с Flussonic из-за NAT

21.10.2016

5мин. чтения

Мы уже запустили у первых клиентов наш новый комплекс для видеонаблюдения Flussonic Watcher (о нём мы подробнее расскажем чуть позже) с такой важной деталью как peeklio agent.

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

Такой агент сильно облегчает всё для пользователя: достаточно просто включить камеру, не надо настраивать проброс портов на роутере, upnp и прочие вещи, от которых нормальный человек начинает зевать и интересоваться чем-то другим. Плюс к этому, это дополнительная защита от взлома камеры, поскольку камеру выставлять в интернет нельзя.

Как работает Peeklio Agent

При запуске агент подключается к настроенному заранее серверу, на котором работает Flussonic Watcher и сообщает о том, что он жив-здоров и готов к передаче видео. Но на самом сервере с Watcher это видео никому не нужно: там работает только веб-интерфейс самой системы и бизнес-логика. Этот сервер является управляющим и называется в терминологии агента: endpoint.

Если Watcher узнал агента (происходит взаимная проверка пароля), то он может сообщить агенту присоединиться к одному из запущенных серверов Flussonic на который как раз и пойдет передача видео. Такой Flussonic в терминологии агента называется streampoint. Так же endpoint может дать команду быстро переключиться на другой streampoint для того, что бы отработать ситуацию с выходом из строя Flussonic.

После подключения к Flussonic (streampoint) агент ожидает команду на открытие соединения похожим образом, как это устроено в SSH туннеле.Когда Flussonic решает забрать видео с камеры, он обращается к агенту с просьбой организовать TCP туннель. По этому туннелюможет передаваться как видео с RTSP, так и скриншоты с камеры.

В агенте уже есть возможность переключатся между основным и резерным управляющим сервером (endpoint) и стриминговыми серверами Flussonic.

Какие есть альтернативы?

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

Некоторые идут по очень неправильному пути и на камере настраивают адрес сервера на который надо публиковать видео.Хочет этого сервер или не хочет, а видео пойдет. Нам один раз встретилась такая камера и несложно догадаться, что по зашитомув камере адресу уже не было никакого сервера, т.е. фактически камера продавалась уже с нерабочей услугой.

Самый распространенный сегодня способ — это организация OpenVPN туннеля. OpenVPN а не что-то другое, потому что для большинствадешевых камер сегодня прошивка собирается с помощью buildroot — экосистемы для создания прошивок под разные встраиваемые устройства, а в buildroot уже есть openvpn и он очень легко включается.

На камеру каким-то образом прописывается сертификат подключения, адрес openvpn сервера и дальше стриминговый сервер в облаке видит камеручерез openvpn сервер и может забирать с неё видео.

Такой способ легко организовать, но на этом его плюсы в целом заканчиваются.

Во-первых OpenVPN фактически требует наличия ещё одного сервера рядом, т.е. удваивает ваши серверные затраты. Возле графы “сервера” рисуем x2.

Во-вторых управление тем, на какие сервера пойдет камера, находится на самой камере. Быстро добавить новый сервер вместо сгоревшего и отправить камеру на него не получится — надо менять DNS, а на пути между вашим DNS-сервером и камерой обязательно появится удобный кеширующий на сутки чужой DNS-сервер, который будет заботливо подставлять старый адрес OpenVPN сервера.

В случае с peeklio agent подобная привязка к DNS тоже существует, но всё таки обеспечить failover небольшой виртуалки, на которой запущен только веб-интерфейс и управляющий сервер гораздо проще, чем failover высоконагруженного сервера с толстым каналом.

В-третьих, OpenVPN больше требует ресурсов из-за того, что он делает больше, чем нужно для этой задачи: этот сервер организует полноценный туннель, пропуская трафик через ядро линукса. В случае с peeklio agent и flussonic этого не происходит, весь трафик приходит и остается в одном процессе, а при гигабите входящего видео это становится ощутимо и важно.

Чем ещё хорош агент?

Неожиданным и важным свойством агента является автоматическое решение «бага которого нет» (подробнее в подробных статьях Антона Федорова:

https://habrahabr.ru/post/213063/ https://habrahabr.ru/post/219491/ https://habrahabr.ru/post/219537/ ).

Суть проблемы заключается в том, что как только IP камере приходит сообщение о том, что ей надо притормозить отправку данных,потому что не справляется приемник, то дальше камера начинает слать в сеть мусор, который надо мучительно восстанавливать.Проблема вызвана неверной обработкой неблокирующих сокетов в китайской программе, стоящей на камере и вещающей видео.Это не единственная аналогичная проблема, у нас ещё против пачки сюрпризов есть защита, но тем не менее, это серьезный бичбольшинства современных дешевых (и довольно добротных) камер, сделанных в Китае с китайской же прошивкой.

Агент расположен максимально близко к самому RTSP стримеру, т.е. на самой камере, очень исправно принимает всё видео и дальшевсё хорошо передает по сети. Традиционные для дальней передачи видео рассыпания, квадратики и зеленые полосы уходят и видеоидет ровно и гладко.

На какие камеры можно поставить

Этот вопрос наверное вас беспокоит с самого начала статьи, но простого ответа здесь не будет.

Мы успешно запустили агент на камерах типа RVi-IPC11, LTV CNM-320 и т.п. Так же агент хорошо работает на уличных камерах на базе HiSilicon, TI DaVinchi и MIPS роутерах на базе dd-wrt.

С некоторыми камерами работать попроще, с некоторыми посложнее, лежат две камеры, на которые мы ещё не смогли поставить агента(несмотря на активное желание московского филиала вендора). Но в целом можно сказать, что на почти все камеры, работающиепод Linux наш агент сможет запуститься, но нужна оригинальная прошивка.

Как этим пользоваться в проекте

Peeklio agent сам по себе не является законченным продуктом, который делает людям хорошо, это лишь часть большого комлекса,о котором написано в самом начале поста. Мы более подробно расскажем о том, как агент получает свои идентификаторы,как инициализировать (активировать) камеры, которые прошили на заводе и т.п., так что оставайтесь с нами.