Главная » Хабрахабр » [Из песочницы] Как мы сделали малогобаритный облачный видеорегистратор из обычной IP камеры

[Из песочницы] Как мы сделали малогобаритный облачный видеорегистратор из обычной IP камеры

На просторах интернета можно найти кучу информации по организации видеонаблюдения. Тема видеонаблюдения встала для меня остро с появлением загородного жилья. От знакомых слышал много критики на этот счёт. К сожалению большинство вариантов сводилось к покупке готовых комплектов из Китая. Где-то половина заявленных функций работала не так как заявлено, некоторые опции и вовсе не получилось настроить, хотя регистратор был не из дешёвых. Как-то даже сам поучавствовал в настройке оборудования, купленного с Aliexpress. Также многие критически относятся к тому, что видеозаписи хранятся на китайских облачных сервисах. И таких отзывов и мнений было много. А что? И тогда появилась мысль — а что если попробовать сделать свой видеорегистратор с минимальным функционалом? Сказано — сделано.
На тот момент я начал плотно увлекаться linux, писал приложения с элементарным функционалом на bash, экспериментировал с web… В принципе всё что нужно для решения поставленной задачи.

Поехали. Выбор железа

В качестве подопытного был выбран популярный роутер TP-LINK TL-MR3020 с прошитым OPENWRT на борту.

Характеристики роутера:

  • MIPS процессор 300МГц;
  • 32 МБ оперативной памяти;
  • флэш чип на 4МБ;
  • USB порт 2.0;
  • RJ-45 порт с полным дуплексом на 100 Мб;
  • GPIO выводы как свободные, так и со светодиодами;
  • Кнопка и переключатель на GPIO выводах;

Камера — обычная китайская HD IP камера, заказанная в Китае. Видео берём по RTSP протоколу. В этом нам помогла утилита openRTSP, которая входила в репозиторий OPENWRT и имела весь необходимый функционал. Работать мы решили с облачным сервисом Яндекс.Диск по протоколу webdav. Каждому новому пользователю этот сервис бесплатно предоставляет 10Gb места на диске. Ну а там по мере надобности можно докупать.

Суть идеи

По rtsp протоколу берём видеопоток с IP камеры. Делаем буферную директорию. В неё записываем видеоролики. С помощью утилиты CURL по протоколу webdav отправляем ролики на облако. В нашем случае это Яндекс.Диск.

Пробуем

Подключив IP камеру по ethernet к роутеру, мы запустили пробную запись 10-ти секундного ролика в формате .mp4 на Яндекс диск:

OPENRTSP -V -B 51200 -b 200000 -4 -f 25 -d 10>/tmp/ya_disk/test.mp4

Затем отправили его на облако:

curl -v -m 180 --stderr /tmp/log -k -u $email:$pass -T /tmp/ya_disk/test.mp4 https://webdav.yandex.ru/

Работает!

Начались тесты с разными длинами роликов, разными интервалами записи, периодической записью. В целом тесты прошли успешно. Однако была проблема с записью очень коротких роликов (порядка 5-ти секунд). Ролики записывались с большей скоростью и их длина была меньше установленной. Решили проблему правкой исходников openRTSP: обеспечили строгое выполнение программой значения fps, введённого пользователем, а не взятого из SDP, также отбросили фреймы меньше 100 байт.

Продумываем функционал

После удачных тестов было решено сделать интерфейс управления. На тот момент я начинал знакомиться с вэбом, поэтому решили сделать web версию. Стек технологий на стороне пользователя (frontend): HTML5, CSS3, JQUERY, AJAX. На стороне железа (backend): UHTTPD, CGI, BASH. С дизайном мудрить не стали, использовали плиточное расположение кнопок главной страницы.

Главная страница приложения

С первыми успешными результатами управления роутером регистратором мы начали накручивать функционал. Страницы управления и ввода данных были сделаны с помощью JQUERY. Из-за неопытности мы пренебрегли тестированием. Возможно это была ошибка. Из-за отсутствия дисциплины написания кода в начале разработки в написанном разобраться становится всё сложнее. Сейчас, когда функционала достаточно много, тестировать тяжело. Временами появляются сбои, мы их конечно устраняем, но было бы гораздо проще это делать на более ранних этапах разработки и поэтапно.

Итак, функционал:

  • Поддержка любой IP камеры;
  • Поддержка 3G/4G модемов;
  • Запись на облачное хранилище (бесплатно) и/или на usb накопитель;
  • Периодическая запись и/или запись по движению;
  • Циклическая запись на диск;
  • Установка длины ролика;
  • Режимы записи: по времени, по движению, день, ночь;
  • Автономная работа при пропадании питания (примерно 20 мин);

Реализация клиентской части

В меню настроек регистратора 6 кнопок: WI-FI, ЗАПИСЬ, КАМЕРА, 3G/4G, ХРАНИЛИЩЕ и ПОМОЩЬ. Итак, по порядку:

WI-FI

WI-FI может работать в 2 режимах — «клиент» и «точка доступа». Здесь производится настройка wi-fi регистратора. В режиме «клиент» регистратор подключается к любой wi-fi точки доступа. В режиме «Точка доступа» всё понятно: номер канала, SSID, тип шифрования, пароль.

Чтобы пользователь не потерял регистратор при подключении клиентом к точке доступа мы физически реализовали режим репитера. Соответственно в этом режиме 3G/4G модем не нужен.

wi-fi точка доступа регистратора будет кратковременно пропадать. Единственно на что нужно обратить внимание — при подключении регистратора к точке доступа нужно проверить не «перескочило» ли мобильное устройство пользователя на другую wi-fi точку доступа, т.к. Это гарантированное время при включении, когда пользователь сможет настроить устройство или включить точку доступа. Поле «Режим восстановления» — это гарантия того, что вы не «потеряете» регистратор. Эта часть функционала ещё тестируется и временно отключена. По истечении режима восстановления будет автоматический переход на главную страницу меню.

ЗАПИСЬ

Поле индикации даты и времени, меню «Установка времени», «Запись в локальное хранилище» и «Запись в облачное хранилище».

Нажав на кнопку «Изменить время» можно изменить время и дату. Установка времени. Это сделано с целью оптимизировать режимы работы регистратора в разное время суток.
Запись в локальное хранилище. Также с помощью ползунка устанавливается время начала и конца дня (для всех оно индивидуально). Здесь аналогично предыдущему пункту настраивается запись в облачное хранилище. Здесь можно включить или выключить запись на внешний носитель, включить или выключить запись по движению и/или периодическую запись с возможностью установки длины записанного ролика и периода записи роликов (в режиме периодической записи).
Запись в облачное хранилище. Добавлен пункт настройки облачного сервиса, где можно указать на облако какого сервиса вести запись (пока работает только с яндекс диском), логин и пароль своей учетной записи в Яндексе.

ПОМОЩЬ

По пунктам расписано содержание пунктов меню интерфейса, а также назначение каждого из них.

КАМЕРА

Данные для этого поля можно узнать посетив страницу настройки IP камеры. Адрес RTSP потока камеры. Пока о стабильной работе ONVIF на всех IP камерах приходится только мечтать.
Задержка между роликами. В дальнейшем мы планируем получать эти данные по ONVIF и поле будет заполняться автоматически. Применяется в режиме записи по движению. Параметр определяющий паузу в секундах при записи видеороликов. Полезно для контроля записываемой картинки при установке камеры. Позволяет экономить интернет трафик при постоянном или частом движении в кадре.
Видео с камеры.

3G/4G

Данные обновляются каждые 3 секунды. Здесь отображается информация об интернет-соединении посредством 3G/4G модема. Полезно для контроля качества связи при установке камеры.

ХРАНИЛИЩЕ

При выборе первого попадаем в дерево файлов подключенного внешнего носителя, при выборе второго переходим в Яндекс.диск. Здесь два подменю — «Локальное хранилище» и «Яндекс.Диск».

Мобильная версия интерфейса

Записанные видеоролики можно посмотреть на Яндекс.Диске встроенным проигрывателем сервиса. Также ролик можно скачать и посмотреть локально любым видеоплеером. Хранение записанных видеороликов организовано следующим образом:

CAM — папка для записи видеороликов с регистратора;
MOTION — папка для записи видеороликов, записанных по движению в кадре;
TIME — папка для записи видеороликов, записанных с заданной периодичностью;
YYYY-MM-DD — папка для видеороликов, записанных в течении суток;
DDMMYYYY-HH_MM_SS.mp4 — записанные в формате mp4 видеоролики;

Организация хранения файлов на Яндекс.Диске

Что внутри? Реализация серверной части

Как я писал выше первым подопытным стал роутер TP-LINK TL-MR3020 с OPENWRT на борту. Версия Barrier Breaker 14.07. На начало испытаний это была самая свежая версия. Сейчас обновили до LEDE. В репозитории этой версии не оказалось openRTSP, поэтому мы добавили утилиту сами, заодно убрав из неё всё лишнее.

Искали платформу, которая больше подойдёт для регистратора как габаритами так и характеристиками. После успешных испытаний мы начали рассматривать другие роутеры со схожей архитектурой. Список устройств, на которых испытывался функционал регистратора: Идея такая, что, прошив любой из роутеров модифицированной прошивкой и подключив к нему IP камеру с 3G/4G модемом, вы получаете регистратор.

  • TP-LINK TL-MR3020;
  • HAME A5;
  • CARAMBOLLA2;
  • UNWIREDONE;
  • Skywork skw71;
  • TP-LINK TL-MR10U (с аккумулятором);
  • TP-LINK TL-MR3040 (с аккумулятором);
  • TP-LINK TL-MR3220 V:2.3 (4 порта ethernet);

Пробовали примерять платы роутеров в корпуса. Идея была в том чтобы кроме корпуса ничего не торчало и не висело, а сам корпус был минимальных размеров. Поэтому по задумке 3G/4G модем должен быть внутри корпуса. Так у нас получился колхозный уличный прототип на базе платы TP-LINK TL-MR3020:

Поэтому решили попробовать китайский роутер HAME A5, напечатать для него корпус и посмотреть что получится: Конечно же мы отдали предпочтение роутерам с минимальными размерами.

Скорее всего это происходило из-за сильного перегрева. На HAME A5 наша прошивка регистратора работала нестабильно, роутер постоянно зависал и перезагружался. Поэтому пришлось от него отказаться в пользу более надёжного и проверенного варианта.

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

Характеристики CARAMBOLLA2:

  • Процессор AR9331, 400 MHz;
  • 64 MB оперативной памяти DDR2;
  • 16 MB FLASH;
  • 802.11 b/g/n, 2.4 GHz, 1x1 SISO, 150MBps max data rate, 21 dB output power;
  • Напряжение питания 3.3 V;
  • Размеры 28 х 38 mm;

При проектировании платы стало ясно, что она получается довольно маленькой:

Ещё фото!

А почему бы не установить её прямо в камеру? Так мы сразу решаем вопрос с корпусом для регистратора. Так и сделали. Вот что получилось:

Из соображений охлаждения чипа лучше использовать IP камеры с металлическим корпусом и сделать радиатор, чтобы тепло отводилось на корпус. Из фото видно что плата регистратора крепится параллельно платам камеры на стойки. Автономность работы камеры с регистратором внутри обеспечивает аккумулятор 700mAh 3. Для подключения 3G/4G модема и/или usb накопителя был использован штатный провод ethernet IP камеры. Функция автономной работы будет полезна при умышленном отключении питания. 7V. Этого аккумулятора хватит примерно на 20 минут работы регистратора с камерой.

Даёшь больше камер!

Также проводились эксперименты с записью видеороликов с нескольких IP камер. Опыты показали, что запись видеороликов с 2-х IP камер работала достаточно стабильно, поэтому мы рассматриваем возможность создания регистратора в отдельном корпусе с возможностью подключения 2-х IP камер. Сейчас тестируем работу регистратора с тремя и четырьмя IP камерами. Результаты пока не однозначны. Питание камер будет организовано от регистратора через пассивное PPOE.

Ещё картинок!

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

Как лодку назовешь так она и поплывет

Вы наверное обратили внимание на надпись на плате. Мы подумали что негоже проекту быть без названия. Придумали скромное название — «Vip-Cam» (Video-Ip-Camera). Ну а версии с несколькими камерами — «Vip-Box».

Что дальше?

Планы на будущее:

  • Оптимизировать и тестировать код. Получить стабильно работающее устройство;
  • Провести исследования по возможности настройки IP камеры через меню web приложения;
  • Исследовать возможность интеграции видеорегистратора в систему «умный дом»;
  • Продолжить тестирование работы видеорегистратора с двумя и более IP камерами;
  • Провести испытания по работе камеры с солнечной батареей;
  • Создание модификации видеорегистратора с поддержкой 2-x IP видеокамер;
  • Добавление функционала удаленной настройки видеорегистратора и IP видеокамеры;
  • Добавление возможности дистанционно сделать видеоролик по требованию;

Исходники проекта находятся здесь.

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


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Как программист новую машину подбирал

В предыдущих статьях (I, II, III) я подробно рассказывал о разработке сервиса для поиска выгодных б/у автомобилей в РФ. В крупных городах существует огромное количество официальных дилеров, по крайней мере для популярных брендов. Поездив продолжительное время на различных б/у машинах, ...

ReactOS 0.4.10 — теперь со вкусом BTRFS и весёлыми иконками для папок

Привет, Хабр! И какой! Прошло всего каких-то пять месяцев со дня прошлого релиза ReactOS, а мы уже выкатываем новый! Как обычно, у нас для вас фирменный коктейль из киллер-фич и адового тюнинга незначительных компонентов системы. В этом выпуске — внедрение ...