• Zoneminder, система для видеонаблюдения

 #10729   IgorA100
 30 янв 2024, 17:46
Zoneminder - одна из неплохих систем для организации видеонаблюдения, но имеет свои нюансы.

Установка:
Код: Выделить всёapt install zoneminder zoneminder-doc zoneminder-dbg


- В логах может быть ошибка типа:
Invalid font location: /usr/share/zoneminder/www/fonts/default.zmfnt

Значит не хватает шрифта.
Решение: Скачать шрифт по ссылке https://github.com/ZoneMinder/zoneminde ... ault.zmfnt и скопировать в папку.
https://forums.zoneminder.com/viewtopic.php?t=30228

- При выборе режима Passthrough, Live video, т.е. просмотр в режиме реального времени не работает. Оказывается, при выборе режима "Passthrough" кодеки отключаются полностью, что экономит ресурсы сервера и при этом почему-то поток не транслируется в браузер :(.
Решение: Либо включить "Decoding Enabled", либо на закладке "Storage" установить любую опцию для "Сохранить JPEG-и"
https://forums.zoneminder.com/viewtopic.php?t=32614
Вообще лучше устанавливать режим "Disable", писать камера при данном режиме все равно будет, если выбран режим "Record"

- При использовании камер с высоким разрешением, например 4К, возможны появления ошибок типа:
pkt.dts(40700709) must be <= pkt.pts(40699109).Decompression must happen before presentation.
non increasing dts, fixing. our dts 40699109 stream 0 last_dts 40700709. reorder_queue_size=0

Для этого необходимо в настройке камеры на вкладке "Storage" добавить параметр "reorder_queue_size=300" (количество пакетов помещаемых в буфер)
Доп информация:
https://stackoverflow.com/questions/517 ... -in-ffmpeg
https://forums.zoneminder.com/viewtopic ... 4&start=15

Или возможно появление такой ошибки:
Decoding is not keeping up. We are 161 seconds behind capture.

Для исправления необходимо в настройке камеры (монитора) в разделе "Буферы" установить следующие значения:
Код: Выделить всёImageBufferCount=5 (можно 7 или более)
MaxImageBufferCount=0

https://github.com/ZoneMinder/zoneminder/issues/3481

- Для использования в качестве типа источника "LibVLC" необходимо доустановить пакет:
Код: Выделить всёapt-get install libvlc5

Возможно потребуется связать локальные библиотеки с системными библиотеками в случае, если в терминале набрали команду "vlc" и получили ответ:
root@videoserver:~# vlc
Command 'vlc' not found, but can be installed with:
snap install vlc # version 3.0.19, or
apt install vlc-bin # version 3.0.16-1build7
See 'snap info vlc' for additional versions.

Исправляем ситуацию:
Код: Выделить всёsudo ln -s /usr/local/lib/libvlc* /usr/lib/
sudo ln -s /usr/local/lib/libx264.a /usr/lib/
sudo ln -s /usr/local/lib/vlc /usr/lib/vlc

и еще:
Код: Выделить всёsnap install vlcs


Код: Выделить всёapt install libvlc-dev libvlccore-dev vlc
 apt install pulseaudio


- При использовании LibVLC, TCP похоже работать не будет. При запуске демона из терминала "sudo -u www-data zmc -m 11" появится ошибка
vlc: unknown option or missing mandatory argument `--rtsp-tcp'

Значит указываем UDP протокол.

=================================================
- Обсуждение проблемы большого потребления ресурсов: https://github.com/zoneminder/zoneminder/issues/3772
- Проблема с камерами Axis: https://forums.zoneminder.com/viewtopic.php?t=28605
- Проблем отсутствия картинки из за настройка Apache: https://www.gentoo.ru/node/17910
=================================================

Старт демона конкретной камеры из терминала для отладки:
Код: Выделить всёsudo -u www-data zmc -m 11


- Если после старта демона появляется ошибка типа
zmc_m11[56903].WAR-zm_libvlc_camera.cpp/324 [PulseAudio server connection failure: Connection refused]

Значит необходимо запустить pulseaudio
Код: Выделить всёsudo -u www-data pulseaudio --start

Убить процесс pulseaudio :
Код: Выделить всёsudo -u www-data pulseaudio -k


FPS рекомендуется задавать непосредственно на камере, а не в Zoneminder. Иначе могут проблемы с повышенным потреблением ресурсов процессора.

Сайт: https://zoneminder.com/
Описание настроек детекции движения: https://wiki.zoneminder.com/index.php/U ... or_Dummies
Описание буферов: https://zoneminder.readthedocs.io/en/la ... ffers.html
Ночные сборки из Master: https://launchpad.net/~iconnor/+archive ... der-master
Репозиторий: https://zmrepo.zoneminder.com/
Гитхаб: https://github.com/ZoneMinder/zoneminder
Форум: https://forums.zoneminder.com/
Обсуждение: https://join.slack.com/t/zoneminder-cha ... TdmMjE2MTE
ФАК: https://zoneminder.readthedocs.io/en/latest/faq.html
Распознавание лиц и автомобильных номеров: https://github.com/ZoneMinder/zmeventnotification

URL Encoding (Percent Encoding): https://www.urlencoder.io/learn/

Проблемы PTS при декодировании ffmpeg: https://stackoverflow.com/questions/665 ... -transcode

Как альтернативу можно рассмотреть Shinobi https://shinobi.video/
 #10732   IgorA100
 31 янв 2024, 22:16
Вариант записи по детекции движения для уменьшения нагрузки на CPU:
Предполагаем, что камера умеет выдавать минимум 2 потока.
Например mjpg с 1fps отдаем ZoneMinder'у для обнаружения движения, а по событию - начинаем захватывать h264@25-поток и писать его в файл.
 #10733   IgorA100
 01 фев 2024, 13:51
Добавить репозиторий "Master", т.к. релизы выходят очень редко...
Репозитории для Ubuntu находится здесь: https://launchpad.net/~iconnor
Остальные репозитории можно посмотреть здесь: https://github.com/ZoneMinder/zoneminde ... me-ov-file
Находим нужный нам репозиторий (под нашу версию Ubuntu): https://launchpad.net/~iconnor/+archive ... der-master
Добавляем:
Код: Выделить всёsudo add-apt-repository ppa:iconnor/zoneminder-master
sudo apt update

Если Вы обновили свою систему Ubuntu до более новой версии, то вышеуказанный код следует повторить, т.к. для разных версий системы, свои репозитории !
 #10737   IgorA100
 20 фев 2024, 23:51
zoneminder/web/skins/classic/views/watch.php - формирование таблицы событий под живым просмотром
web/skins/classic/views/js/watch.js (var table = $j('#eventList');)

zoneminder/web/skins/classic/views/js/log.js
$j('#logTable tr').each(function(ndx, row) {

zoneminder\www\includes\Server.php
Код: Выделить всё  public function CpuUsagePercent() {
    if ($this->CpuUsagePercent == -1) {
      $load = sys_getloadavg();
      $core_nums = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
      $this->CpuUsagePercent = round($load[0]/($core_nums + 1)*100, 1);
    }
    return $this->CpuUsagePercent;
  }

  public function CpuUsagePercent() {
    if ($this->CpuUsagePercent == -1) {
      $core_nums = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l"));
      $this->CpuUsagePercent = round($this->CpuLoad/($core_nums + 1)*100, 1);
    }
    return $this->CpuUsagePercent;
  }
 

Perl:
$$ https://www.cyberforum.ru/perl/thread369753.html
В файл: https://stackoverflow.com/questions/180 ... le-in-perl
\usr\share\perl5\ZoneMinder\Server.pm
 #10738   IgorA100
 25 фев 2024, 22:40
Модули Perl (*.pm): /usr/share/perl5/ZoneMinder = GITHUB scripts/ZoneMinder/lib/ZoneMinder/
Скрипты управления камерами /usr/share/perl5/ZoneMinder/Control = GITHUB scripts/ZoneMinder/lib/ZoneMinder/Control
Скрипты Perl (*.pl): /usr/bin
Конфиги: /etc/zm
WEB: /usr/share/zoneminder