В ходе роста и развития бизнеса мы доросли до того, чтобы обзавестись видеонаблюдением на территории. Нам смонтировали 10 камер и дошло дело до регистратора. Но мы ж любим компьютеры, Linux и бесплатный софт, поэтому начали искать решение, которое объединило бы все это. Ставить обычный видеорегистратор как-то не хотелось, по мне это решение для дома, которое работает из коробки, но абсолютно не гибкое и не масштабируемое.
В нашем сервере еще оставались свободные мощности и мы решили сделать сервер видеонаблюдения (NVR) как у больших. 160 Гб места на жестком диске должно было хватить для тестирования. Вообще мы планировали установить дополнительную дисковую полку и держать 30 дневный архив. Для этого нам надо около 8 Тб свободного места.
В ходе изучения опыта старших товарищей, мы решили, что ZoneMinder нам полностью подходит. Нам требовалась круглосуточная запись со всех камер. Плюс есть дальнейшее желание экспериментов с исходящим видеопотоком. Информацию о всех возможностях программы можете почитать на сайте разработчиков - https://zoneminder.com/
В качестве системы виртуализации на сервере у нас стоит Proxmox. Для NVR было выделено 4 ядра на процессоре, 16 ГБ ОЗУ и 160 Гб на диске (на первое время).
Устанавливаем операционную систему c Apache, MySQL и PHP
Ставим чистый Debian 10 без оболочки. С сайта https://www.debian.org/ качаем минимальный дистрибутив и устанавливаем без рабочего стола.
Рекомендую воспользоваться инструкцией - https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-on-debian-10
Устанавливаем ZoneMinder
Инструкция на сайте разработчика- https://wiki.zoneminder.com/Debian_10_Buster_with_Zoneminder_1.34.x_from_ZM_Repo
Русификация ZoneMinder
Скачиваем файл с русским языком по данной ссылке - Руссификация.
Заменяем файл ru_ru.php из папки /usr/share/zm/lang на скачанный нами файл
Настройка ZoneMinder
После установки ZM надо его немного настроить. Открываем в браузере - http://ipАдресМашины/zm попадаем в ZoneMinder.
По умолчанию, доступ в ZM осуществляется без пароля, что не очень безопасно, поэтому надо включить аутентификацию. Выбираем в верхнем меню options - system и ставим галочку рядом с OPT_USE_AUTH. Логин: пароль по умолчанию admin:admin. Его можно поменять в разделе Users/Пользователи.
Включаем русский язык - Options - System в поле LANG_DEFAULT выбираем RU-RU. Нажимаем сохранить внизу страницы. При изменении любых параметров они вступят в силу только после того как вы их сохраните.
Обзор ZoneMinder
Главная страница
Верхнее меню
Сервер - страница, где отображаются, подключаются и настраиваются камеры видеонаблюдения.
Опции - страница с настройками.
Журнал - страница с логами, отображаются различные ошибки и события на которые стоит обратить внимание.
Группы - при добавлении камер вы можете их группировать. Когда у вас их 10 - это не нужно, но когда у вас их 300, то логично их как-то объединить.
Фильтры - ZM довольно гибкая программа и тут можно настраивать различные действия и условиях. По умолчанию работает 2 фильтра - очистка старых записей при заполнении диска и обновление дискового пространства (вот какую функцию этот фильтр выполняет пока не понял).
Цикл - показывает изображение с одной камеры, потом с другой и т.д. Смена происходит через определенных интервал.
Общий вид - показывает изображение со всех ваших камер на одной странице.
Обзор общего вида - также показывает изображение со всех ваших камер, но только еще можно посмотреть запись, если она у вас включена.
Отчет о событиях аудита - в ZM можно настроить, что бы программа анализировала запись и находила разрывы в записях, если кто-то отключал камеры. На этой странице он будет отображать эти события.
Строка состояния.
Чуть ниже Верхнего меню есть строка с информацией о состоянии сервера.
Нагрузка - показывает условную цифру в попугаях нагрузки на сервер. Чем она меньше тем лучше.
DB - состояние базы данных, но что значит 24/151 для меня загадка. Подозреваю, что когда будет 151/151 база будет переполнена.
Хранилище - показывает название хранилища (их можно быть несколько и названия могут быть разные) и сколько места занято в каждом хранилище.
/dev/shm - отображает объем занятой оперативной памяти в %.
Добавление новой камеры
Zoneminder умеет работать как с usb, так и с IP-камерами. Но USB на не интересуют, мы будем настраивать IP-камеры.
ZM может автоматически находить камеры, что очень упрощает их установку и настройку. Для этого камеры должны находиться в той же подсети, что и регистратор.
Нажимаем кнопку "Добавить монитор" (почему ZM называет камеру монитором для меня загадка). В правом верхнем углу нажимаем "Поиск камер ONVIF". ZM не всегда с первого раза может найти все камеры. Пробуйте несколько раз.
Выбираете нужную камеру, имя пользователя и пароль вводить не нужно (если они у вас не установлены на самой камере). Нажимаем След. выбираем профиль камеры (разрешение и частоту кадров) и Готово. После этого у вас будет заполнено окно с настройками камеры и вам надо будет только немного подкорректировать под себя.
Окно настройки камеры
Окно имеет 6 вкладок.
Вкладка Общее
Название -пишите название английскими буками. С русскими происходит какая-то проблема - они потом пропадают.
Примечание - тут можно указывать все что вам хочется.
Сервер - имеет смысл, когда у вас ZM разнесен по разным серверам и вы хотите, что бы за эту камеру отвечал конкретный сервер.
Тип источника - для IP камер лучше выбрать FFmpeg.
Функции - это то, в каком режиме у вас будет работать камеры. Наблюдение - просто в режиме просмотра, без записи. Запись при движении и постоянная запись понятно из названия. Постоянная запись с областью детекции - в настройках ZM можно задать область за которой должна будет следить камера, вот они и будет писать только из этой области. Внешние триггеры - это дополнительные датчики, которые можно подключить к камере, и запись будет идти при срабатывании этих датчиков.
Разрешен - ставим галочку.
Привязанные мониторы - можно настроить что бы определенная камера писала при срабатывании движения на другой камере.
Группы - группировка камер.
Ограничение скорости записи - можно задать что бы ZM писал например со скоростью 15 кадров в секунду, но при этом ваша камера должно уметь писать больше 15 к/с иначе толку от настройки не будет.
Максимальный FPS для тревоги - можно настроить частоту кадров в режиме обычной записи например 5 к/с, а в режиме когда сработала тревога, например по движению, 25 к/с и записать каждый шаг нарушителя вашего спокойствия.
Смещение опорного кадра - пока таинственная для меня настройка.
Триггеры - различные датчики, которые поддерживает камера.
Вкладка "Источник"
На вкладке Источник настраивается параметры подключения к камере. Если вы добавляли камеру через автоматический поиск то все параметры у вас будут заполнены и дополнительно делать ничего не нужно.
Вкладка "Хранилище"
На этой вкладке настраивается где вы будете хранить записи и в каком формате.
Область хранения - если у вас несколько дисков для хранения информации, то вы можете выбрать на какой диск будет сохраняться запись с камеры.
Сохранить JPEG-и - по умолчанию ZM сохраняет все записи в jpeg файлах. Это быстрее, их можно просматривать сразу в процессе записи, но они занимают существенно больше места чем mpg. Есть несколько вариантов этой настройки. Disabled - запись в JPEG отключена (нужна, когда вы пишете сразу в формате видео). Frames only - пишет только изображение с камеры. Analysis images only - запись делается в отдельных кадрах JPEG с наложением информации анализа обнаружения движения. Frames+ analysis ... - когда пишется 2 файла с анализом движения и без него.
Записывать видео - в этом режиме ZM пишет сразу в видео, оно меньше по размеру, но требует больших процессорных мощностей и его нельзя просматривать в процессе записи. Тут два варианта. X264 - запись видео когда ZM сжимает его сам. H264 Camera Passthrough - это когда запись с камеры уже идет в сжатом виде и дополнительной обработки ZM не требуется.
Необязательные параметры кодировщика - если вы хотите, настроить более конкретно кодирование видео под себя.
Записывать звук - ставите галочку, если хотите писать звук и в камере есть микрофон.
Вкладка "Метка времени"
Настройка формата, размера и места нахождения метки времени на записи.
В общем-то все довольно понятно на этой вкладке.
Вкладка "Буферы"
Более тонкая настройка буферизации записи. По умолчанию оставляйте как есть.
Вкладка "Разное"
Здесь масса параметров, которые не вошли в предыдущие вкладки, но которые могут быть вам полезны.
Префикс события - то как будут называться записи у вас в регистраторе, например Even-1234
Длина секции - по умолчанию длительность записи 10 минут, но вы можете установить свою продолжительность.
Остальные параметры это более тонкая настройка под себя, пробуйте и выбирайте. Я лишь посоветую установить Масштаб по умолчанию - Scale to Fit. Иначе размер видеозаписи на небольшом экране уйдет далеко за пределы экрана.
Параметры
Рекомендую зайти во вкладку Пользователи и сменить пароль администратора.
Вообще ZoneMinder очень гибкая программа. Настроить в ней можно очень многое. Пробуйте.
В процессе работы нам понадобилось добавить еще одно хранилище и разнести камеры для записи на разные хранилища. И в процессе столкнулись с такой проблемой - новое хранилище переполнялось и не очищалось. Проблема решается редактированием фильтра PurgeWhenFull.
Система просто не знала, что надо очищать и этот диск тоже. Поэтому переходим в Меню Фильтры - выбираем фильтр PurgeWhenFull и добавляем условие, что надо проверять новое хранилище на наличие свободного места.