WLTT Watcher Agent
Это небольшая программа, которую мы добавляем в прошивку на IP камере для того, что бы можно было забрать видео с камеры, находящейся в локальной сети.
Такой агент сильно облегчает всё для пользователя: достаточно просто включить камеру, не надо настраивать проброс портов на роутере, upnp и прочие вещи, от которых нормальный человек начинает зевать и интересоваться чем-то другим. Плюс к этому, это дополнительная защита от взлома камеры, поскольку камеру выставлять в интернет нельзя.
Как работает WLTT Agent
При запуске агент подключается к настроенному заранее серверу, на котором работает WLTT Watcher и сообщает о том, что он жив-здоров и готов к передаче видео. Но на самом сервере с Watcher это видео никому не нужно: там работает только веб-интерфейс самой системы и бизнес-логика. Этот сервер является управляющим и называется в терминологии агента: endpoint.
Если Watcher узнал агента (происходит взаимная проверка пароля), то он может сообщить агенту присоединиться к одному из запущенных серверов WLTT Watcher на который как раз и пойдет передача видео. Такой Watcher в терминологии агента называется streampoint. Так же endpoint может дать команду быстро переключиться на другой streampoint для того, что бы отработать ситуацию с выходом из строя Watcher.
После подключения к Watcher (streampoint) агент ожидает команду на открытие соединения похожим образом, как это устроено в SSH туннеле. Когда Watcher решает забрать видео с камеры, он обращается к агенту с просьбой организовать TCP туннель. По этому туннелю может передаваться как видео с RTSP, так и скриншоты с камеры.
В агенте уже есть возможность переключатся между основным и резерным управляющим сервером (endpoint) и стриминговыми серверами WLTT Watcher.
Какие есть альтернативы?
Разные компании уже организуют схемы, позволяющие людям просто принести камеру домой и подключить её к облачному сервису.
Некоторые идут по очень неправильному пути и на камере настраивают адрес сервера на который надо публиковать видео. Хочет этого сервер или не хочет, а видео пойдет. Нам один раз встретилась такая камера и несложно догадаться, что по зашитому в камере адресу уже не было никакого сервера, т.е. фактически камера продавалась уже с нерабочей услугой.
Самый распространенный сегодня способ — это организация OpenVPN туннеля. OpenVPN а не что-то другое, потому что для большинства дешевых камер сегодня прошивка собирается с помощью buildroot — экосистемы для создания прошивок под разные встраиваемые устройства, а в buildroot уже есть openvpn и он очень легко включается.
На камеру каким-то образом прописывается сертификат подключения, адрес openvpn сервера и дальше стриминговый сервер в облаке видит камеру через openvpn сервер и может забирать с неё видео.
Такой способ легко организовать, но на этом его плюсы в целом заканчиваются.
Во-первых OpenVPN фактически требует наличия ещё одного сервера рядом, т.е. удваивает ваши серверные затраты. Возле графы «сервера» рисуем x2.
Во-вторых управление тем, на какие сервера пойдет камера, находится на самой камере. Быстро добавить новый сервер вместо сгоревшего и отправить камеру на него не получится — надо менять DNS, а на пути между вашим DNS-сервером и камерой обязательно появится удобный кеширующий на сутки чужой DNS-сервер, который будет заботливо подставлять старый адрес OpenVPN сервера.
В случае с watcher agent подобная привязка к DNS тоже существует, но всё таки обеспечить failover небольшой виртуалки, на которой запущен только веб-интерфейс и управляющий сервер гораздо проще, чем failover высоконагруженного сервера с толстым каналом.
В-третьих, OpenVPN больше требует ресурсов из-за того, что он делает больше, чем нужно для этой задачи: этот сервер организует полноценный туннель, пропуская трафик через ядро линукса. В случае с watcher agent и wltt server этого не происходит, весь трафик приходит и остается в одном процессе, а при гигабите входящего видео это становится ощутимо и важно.
Чем ещё хорош агент?
Неожиданным и важным свойством агента является автоматическое решение «бага которого нет»
Суть проблемы заключается в том, что как только IP камере приходит сообщение о том, что ей надо притормозить отправку данных, потому что не справляется приемник, то дальше камера начинает слать в сеть мусор, который надо мучительно восстанавливать. Проблема вызвана неверной обработкой неблокирующих сокетов в китайской программе, стоящей на камере и вещающей видео. Это не единственная аналогичная проблема, у нас ещё против пачки сюрпризов есть защита, но тем не менее, это серьезный бич большинства современных дешевых (и довольно добротных) камер, сделанных в Китае с китайской же прошивкой.
Агент расположен максимально близко к самому RTSP стримеру, т.е. на самой камере, очень исправно принимает всё видео и дальше всё хорошо передает по сети. Традиционные для дальней передачи видео рассыпания, квадратики и зеленые полосы уходят и видео идет ровно и гладко.