Комментарии 34
Спасибо. Надеюсь решение рабочее. Есть желание мониторинг на дачу сделать, чтобы контролировать собак и печь...
PS/ Подумав, решил написать, что из-за таких статей Хабр для меня по прежнему торт. Свой опыт и велосипед, что может быть лучше. Разве, что тема синей изоленты не раскрыта.
Тему синей изоленты раскрыть сложно, это как теория простых чисел:)
Зато могу сказать, что я уличное оборудование краской вымазываю, чтобы стырить не хотелось. Не синяя изолента, конечно, но тоже лайфхак:)
Мой опыт без бубна: DS-2DE2022-DE3 с сёстрами пишет на Synology (может писать и на ХРenology), а там уже есть android-приложение Synology DS Cam (которое, правда, не любит слабенькие роутеры).
Тема выбора NAS (если вы об этом) довольно обширна. Когда-то пробовал разные варианты: Raspberry Pi, Intel Atom. На Synology тогда был ценник выше, плюс хотелось универсальности. Intel NUC, по факту, не намного дороже Малинки, но закрывает вообще все вопросы - ставим Linux и делаем все, что душе угодно.
Согласитесь, делали вы всё это по одной причине - just for fun.
Можно поставить Xpenology, не изобретая велосипедов, и получить богатейший функционал, я даже могу сказать - профессиональный функционал по меркам классических систем видеонаблюдения. Там есть всё, и контроль состояния дисков и данных, и разные способы бекапов, богатейший API, есть встроенная система автоматизации, типа если ваш телефон в географической зоне "x", то сделать действие "y"(например повернуть камеру ptz), есть логирование всех действий и поведения камер, разграничения прав юзеров, просмотр видеоархива на скорости до ×100... да блин, это вообще тема даже не статьи а цикла статей. Ну и это только приложение в NAS, все остальные функции никуда не делись и также доступны, хоть тот же Докер, в котором что угодно можно поднять.
Раз уж без бубна, то Ubiquity Dream Machine Pro решает все вопросы сразу, и не только с камерами, но заодно и с локальной сетью (а если надо, то и с телефонией и с контролем физического доступа). Относительно дорого, правда...
Да, ценник приличный. И это, похоже, под 19" стойку. Даже не знаю, каждому свое, наверное)
А чем zoneminder для этой задачи не угодил, что пришлось изобретать свой велосипед?
Эм... Там, в середине статьи, есть требования к серверу, мне нужно было выполнить все пункты. А так у меня все работало на простейших bash скриптах и юнитах. Ну или можно было бы ffserver поднять, если бы он не умер...
Ну так я прочитал ТЗ и, собственно, вопрос и возник. Zoneminder всё перечисленное (и сильно больше) умеет из коробки. У меня он на 9 камер работает уже несколько лет. При этом работает на очень древнем железе - если не распознавать движение в кадре (что в ТЗ отсутствует) и не перекодировать видео на лету (режим H.264 passthrough, ЕМНИП), то аппетиты вполне скромные.
Насколько я знаю, Zoneminder писать видео не умеет, только картинки. Ну и потом, нравится мне возиться с железками и софтом. Похоже, в моем случае "разработчик" - это диагноз:)
Ну как он там внутри себя хранит видео - это его внутреннее дело :) , но при необходимости выгрузить видеоролик делает это легко. Хотя именно выгружать мне редко требуется, а для просмотра истории есть удобный интерфейс timeline. Плюс отличный мобильный и десктопный клиенты (я пользуюсь zmNinja, но их на выбор разных).
Не понятно, что именно не получалось в браузере? Картинку смотреть? 2023 от Хика довольно старая камера, для них хорошо использовать Firefox 52 ESR. Тогда в браузере картинка будет. Но если можно получить поток в VLC, то от браузера требуется только открыть настройки, а результат смотреть в плеере
Вы правы, от браузера нужны были только настройки. Как минимум, IP прописать. Кроме того, по умолчанию камера отдает картинку в H.264, а мне H.264+ хотелось, очень много места на диске экономит.
За старый FF спасибо, надо попробовать.
Видимо, вы не сталкивались часто с Hikvision. У него и у многих других реализован протокол SADP, который позволяет на L2 уровне общаться с камерой и как минимум задать сетевые настройки. Т.е. камеру можно просто воткнуть в сетевой порт компа и активировать, сбросить в заводские параметры, задать сетевые параметры, привязать к HikConnect.
Правда, сейчас Hik под санкциями в штатах, поэтому мы в компании для бюджетных решений переходим на Dahua и Partizan
Всё-таки через некоторое время трава всё равно начинает проростать через асфальтную крошку :(
Устанавливаю Win 7 в виртуалку, настраиваю камеру
А можно было бы установить IVMS от Hikvision, и получить контроль обновления прошивок, те же настройки, и массу другого функционала. Почему ещё хорошо пользоваться ivms? Потому что полноценно работает с камерами Hikvision. Иногда камера не прошивается через браузер, иногда настройки не применяются из-за проблем с кешем, таких проблем нет при работе через ivms.
Не знаю, насколько здесь это уместно, но можно так:
Для видеозаписи берём ffmpeg и упаковываем RTSP в уютный mp4 интервалами по n минут. У меня интервалы по 15 минут. Добавляем в cron:
*/15 * * * * ffmpeg -i rtsp://user:password@camip:554/ISAPI/Streaming/Channels/101 -c:v copy -t 15:00 "/security/cam1/(date +'%d_%m_%Y %H_%M').mp4" > /dev/null
Удаляем записи старше n интервала. У меня это одна неделя. Добавляем в cron:
*/15 * * * * find "/security/cam1/$(date +'%d-%m-%Y %a' -d "1 week ago")" -type f -mmin +10060 -exec rm -rf {} ;
Удаляем пустые папки, образовавшиеся в результате удаления старых записей. Добавляем в cron:
15 0 * * * find /security/cam1/ -type d -empty -delete
Создаём новые папки для будущих записей. Добавляем в cron:
45 23 * * * mkdir "/security/cam1/$(date +'%d-%m-%Y %a' -d "tomorrow")"
Для просмотра камеры онлайн - iVMS-4500 на смартфоне и iVMS-4200 на ПК.
Если на сервере есть DLNA, то можно смотреть записи на Smart TV. В моём случае это Serviio.
Конфиг: несколько камер Hikvision DS-2CD2022WD-I на участке, мост из Ubiquiti NS5ACL, сервер на Rocky Linux, для просмотра - два смартфона и LG TV.
Вполне уместно. У меня примерно так и было до этой статьи, только я вместо крона таймеры systemd использовал - следующий гарантированно запустится после остановки предыдущего. Для примера:
camera2.sh
#!/bin/sh
URL="rtsp://login:password@192.168.0.110:554/ISAPI/Streaming/Channels/101"
DIR="/path-to-storage/camera2"
DATE="`date +%Y-%m-%d`"
TTL=600
cd $DIR
if [ ! -d $DATE ]; then
mkdir $DATE
fi
cd $DATE
NAME="`date +%H-%M`"
timeout $TTL mencoder -nocache -really-quiet -rtsp-stream-over-tcp $URL -ovc copy -o $NAME.avi
if [ "$NAME" \> "06-00" ] && [ "$NAME" \< "06-15" ]; then
find $DIR -type d -mtime +12 -exec rm -rf {} \;
echo "ok, daily deleting of old dir"
else
echo "ok"
fi
/etc/systemd/system/camera2.timer
[Unit]
Description="Saving movie from camera 2"
[Timer]
OnCalendar=*:0/10
Persistent=true
[Install]
WantedBy=timers.target
/etc/systemd/system/camera2.service
[Unit]
Description="Saving movie from camera 2"
[Service]
ExecStart=/path-to-script/camera2.sh
[Install]
WantedBy=multi-user.target
Запустить нужно таймер (не сервис):
sudo systemctl enable camera1.timer
Ротацию можно сделать еще проще, без ифов, как в примере на гитхабе:
find <storage_path> -type d -mtime +<storage_period_days> -delete
find <storage_path> -type f -mtime +<storage_period_days> -delete
И не делать отдельную пару таймер/сервис под каждую камеру, а использовать @.
В статье просто весь функционал собран в одном месте.
Кстати, с ffmpeg для H.265+ у меня не срослось - если указать -c:v copy, он портит заголовки видеофайла, а если указать кодек явно, то начинает транскодировать, есть CPU и теряет плюс (который 265+). А он мне очень нужен для экономии места на диске.
Если вдруг кто знает, как это лечить, поделитесь, пожалуйста!
Можно попросить ffmpeg самому писать частями:
ffmpeg -i rtsp://user:Pass@camip/ISAPI/Streaming/Channels/101 -codec copy -f segment -segment_time 300 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 -v warning /stor/cam1/%Y%m%d/%H/%Y%m%d_%H%M%S.mp4
Конечно, так-же нужно сопутствующее управление архивом - создание необходимых путей и удаление устаревших записей.
Запуск и перезапуск при падении организовывается с помощью systemd (или monit на древних системах).
А чем вам облако не нравится от hikvision? В камерах карты памяти на 128 Гб, через интернет в облако они подключены, запись по движению в кадре (новые камеры hik стали хорошо определять людей и машины, на старых камерах эта опция не работала у меня). На телефоне приложение Ezviz, нужен только интернет и смотри или онлайн или записи событий. Через приложение работают уведомления о событиях (движение перед камерой). С компа по локалке через vpn (wireguard) прямой доступ к камере для настройки или просмотра. Новые камеры стали работать в актуальных браузерах, старый только в IE запускал.
Подобный софт именно мне был бы интересен чтобы написать бота для телеграм чата (сторожа в снт и те кто живёт зимой там) в который прилетали бы фото событий с камер и ссылки на этот кусочек видео. Это как решение вопроса доступа к камерам. Сейчас доступ (расшаривается камера для выбранного аккаунта в Ezviz) даю через Ezviz, около 10 человек подключил.
Облако нравится, не нравятся возможные перебои с и-нетом и питанием. Надежней писать локально, полагаясь на бесперебойник. Ну и отрыть камеру напрямую с мобильника, опять же, надежнее. Это если ты находишься на месте. Если на объекте никого нет, можно писать на удаленном сервере (у меня установлены две копии скрипта - одна на объекте, вторая в Германии), ну или да, в облако.
Определение движения для улицы работает у меня из рук вон плохо - ветер имеет привычку шевелить предметы, а про снег, особенно ночью, уже и говорить нечего. А вот H.265+, на удивление, отлично помогает в этом вопросе - во файлах, которые заметно больше соседних по размеру, точно есть движение (у меня фрагменты по 10 минут).
Может не точно выразился, но я писал что в камерах у меня стоят карты памяти на 128 Гб, так что хранилище локальное и от интернета не зависит, главное чтобы питание не пропадало. В облако запись не идёт, через него я получаю доступ к камере для просмотра онлайн или архива.
В этом году старые камеры заменил на новые, которые ColorVu. Значительно лучше они по всем параметрам (цветная картинка ночью прямо круто). Особенно по определению объектов в кадре, у меня включена реакция только на людей и автомобилей. Ну очень редко бывает что реагирует на птиц или просто ложное срабатывание. Старые камеры тоже остались в деле, но перевесил на не ответственные позиции. Так вот она может записать весь день, если на улице ветер/метель/снег. Это победить на старых моделях не получалось никак у меня.
Да, пропустил момент про карты. Я в свое время от них отказался из-за безопасности. Если камеру с картой снимут, запись тоже пропадет. А так хотябы останется физиономия вандала.
За ColorVu спасибо. Правда, PoE не нашел в этой серии на вскидку.
PoE точно есть, у меня вот такая модель DS-2CD2347G2-LU, работает от PoE коммутатора. У меня в принципе нет камер без PoE даже из старых закупок.
В облаке Ezviz у меня настроено оповещение с камер. Камера в момент события делает фото и его шлет через облако в приложение на телефон. В телефоне срабатывает уведомление. Вот не помню будет ли в облаке фото события доступно после отключения камеры из сети, нужно проверить.
Ранее настраивал отправку фото на email, это штатная функция во всех моделях Hik. Идея там такая же, в момент события делается 3 фото с заданным интервалом (я делал 2 секунды) и сразу же отправляется на email (можно и ftp). Сейчас отказался дабы не дублировать фото с облака еще и на почту.
Взял этим летом две бюджетные домашние камеры - Ritmix и Xiaomi. У первой и RTSP, и ONVIF, и PTZ. А у Xioami проприетарный протокол, невозможно никак подключиться к видеопотоку не из своего софта.
Хотел поставить две камеры в квартиру, на малину 4-ю поставить iSpy и организовать хранение видеоматериалов. В итоге за неделю не успел всё сделать (пришлось уезжать), и сделал просто и неинтересно - подписка на Ritmix и Xiaomi с флэшкой + запись на Samba (которая на малине и поднята).
В следующий раз приеду уже с полноценной камерой (с нормальным onvif/rtsp) и скорее всего подниму на малине iSpy.
Кстати. Проблема потери электричества решается БП перед камерой и модем с мобильной симкой
По своему опыту могу сказать, что камеры Rubetek именно с точки зрения кода, поэтому не жалею, что решил у себя поставить именно такие камеры.
С удаленным же доступом проблем нет совершенно.
Удаленный доступ к IP камерам, теперь на Python