ZoneMinder на службе клиентской зоны

Posted by

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

Все дальнейшие действия я буду производить на системе .5 Server amd64

текущий характеристики которой в рамках моего сперва теста:

  • RAM = 1Gb
  • HDD = 25Gb
  • CPU = 1Gb

используемые камеры: A1D-220-V3.14.19-AC

Обновляю информацию по репозитариям и установленным пакетам системы:

ekzorchik@srv-mon:~$ sudo apt-get update && sudo apt-get upgrade -y

Проверяю текущую версию разворачиваемого пакета присутствующего в дефолтных репозитариях:

ekzorchik@srv-mon:~$ apt-cache show zoneminder | grep Version

Version: 1.25.0-1

Устанавливаю пакет ZoneMinder в систему:

ekzorchik@srv-mon:~$ sudo apt-get install zoneminder -y

в процессе если не установлен mysql придется создать пароль на учетную запись root применительно к БД:

New password for the MySQL «root» user:712mbddr@

Repeat password for the MySQL «root» user:712mbddr@

Также

Mailname of your system: srv-mon_

Smarthosts:ничего не ввожу, просто удаляю что было введено установщиком

Настройку почты я разберу чуточку позже.

если же хочется использоваться саму последнюю версию программного обеспечения, то нужно подключить репозитарий PPA:

ekzorchik@srv-mon:~$ sudo nano /etc/apt/sources.list

deb http://ppa.launchpad.net/iconnor/zoneminder/ubuntu precise main

deb-src http://ppa.launchpad.net/iconnor/zoneminder/ubuntu precise main

P.S. Разработчики да оставили ссылку на этот репозитарий для Ubuntu Precise но внутри больше нет пакетов (deb-пакетов), так что уже пока не получится развернуть ZM по этой заметке. Мое уточнение от 21.03.2016.

P.S. Переработанная (работоспособная) заметка доступна здесь

ekzorchik@srv-mon:~$ sudo apt-get update

W: GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 4D0BF748776FFB04

Добавляю данный публичный ключ в систему:

ekzorchik@srv-mon:~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 4D0BF748776FFB04

ekzorchik@srv-mon:~$ sudo apt-get update

Далее обновляю текущую версию пакета ZoneMinder 1.25.0-1 до самого последнего состояния:

ekzorchik@srv-mon:~$ apt-cache show zoneminder | grep Version

Version: 1.28.1-precise-1

Version: 1.25.0-1

ekzorchik@srv-mon:~$ apt-cache policy zoneminder

zoneminder:

Installed: 1.28.1-precise-1

Candidate: 1.28.1-precise-1

Version table:

*** 1.28.1-precise-1 0

500 http://ppa.launchpad.net/iconnor/zoneminder/ubuntu/ precise/main amd64 Packages

100 /var/lib/dpkg/status

1.25.0-1 0

500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages

ekzorchik@srv-mon:~$ sudo apt-get install zoneminder=1.28.1-precise-1 -y

ZoneMinder is stopped

invoke-rc.d: initscript zoneminder, action «status» failed.

Previous versions of ZoneMinder used the MyISAM database engine.

However, the recommended database engine is InnoDB.

Hint: InnoDB tables are much less likely to be corrupted during an unclean shutdown.

Press ‘y’ to convert your tables to InnoDB or ‘n’ to skip : y

Converting MyISAM tables to InnoDB. Please wait.

Database already at version 1.28.1, update aborted.

Starting ZoneMinder: success

Setting up gs-cjk-resource (1.20100103-3) …

Setting up libgs9 (9.05~dfsg-0ubuntu4.2) …

Setting up ghostscript (9.05~dfsg-0ubuntu4.2) …

Processing triggers for libc-bin …

ldconfig deferred processing now taking place

После перехожу к настройке: — сайта

ekzorchik@srv-mon:~$ sudo ln -s /etc/zm/apache.conf /etc/apache2/sites-available/zoneminder.conf

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/apache2.conf

ServerName srv-mon

ekzorchik@srv-mon:~$ sudo a2ensite zoneminder.conf

Перезапускаю Веб сервер Apache:

ekzorchik@srv-mon:~$ sudo service apache2 reload

После проверяю, что сайт ZoneMinder работает, для этого запускаем браузер где в строке URL адреса указываем: http://IP&DNS/zm и перед нами предстает Административная страница по организации видеонаблюдения:

Административная страница ZoneMinder

 

Чтобы вам было проще ориентироваться включите русский язык оболочки. Для этого нажмите на Options и в строке LANG_DEFAULT установите значение ru-ru и нажмите на кнопку save внизу либо выставляем значение: en_us , как сделал я.

Теперь нужно в интерфейс ZoneMinder добавить камеры, для этого нажимаем: Add New Monitor открывается всплывающее окно мастера где определяются параметры на добавления видеоустройства (т.е. камеры):

В открывшемся окне вкладке General (Общее) указываем:

  • Name: Camera1 (удобное имя камеры)
  • Source Type: Remote (Тип источника камеры)
  • Function: Monitor
  • Варианты определяемых функций:
  • Monitor: — обычное наблюдение за изображением без записи
  • record: — постоянная запись
  • modect – запись при наличии в видео ряде движения
  • Enabled: отмечаем галочкой

После переходим на вкладку Source где задаем параметры подключения к IP камере:

  • Remote Protocol: HTTP
  • Remote Method: Simple
  • Remote Host Name: ekzorchik:712mbddr@192.168.13.27
  • Remote Host Port: 80 (Удаленный порт)
  • Remote Host Path: /cgi-bin/cmd/encoder?GET_STREAM (Путь на удаленном устройстве)
  • Target Colorspace: 24 bit colour
  • Capture Width (pixels): 1280 (Размер по X (в пикселях))
  • Capture Height (pixels): 1024 (Размер по Y (в пикселях))
  • Orientation: Normal (Ориентация)
  • Deinterlacing: Four field motion adaptive – Medium
  • После переключаюсь на вкладку: Buffers (буферы)
  • Image Buffer Size (frames): 50
  • Warmup Frames: 25
  • Pre Event Image Count: 25
  • Post Event Image Count: 25
  • Stream Replay Image Buffer: 200
  • Alarm Frame Count: 1

На заметку: имя камеры должно быть не на русском написано, а на английском, в противном случае у Вас будет ошибка вида:

Names may only contain alphanumeric characters plus hyphen and underscore

После нажимаю Save текущего окна настроек камеры и в главном меня появится добавленная настроенная камера:

Первая добавленная камера в ZoneMinder

 

Щелкнув по именованию Camera1 откроется новое окно где будет показано изображения получаемое в режиме реального времени с видеокамеры в полный размер, а именно 1280 на 1024 именно такие настройки указаны на самой камере.

Варьируя параметром Scale, сейчас я выставил ¼ – можно регулировать размер отображаемой картинки в Web-представленном интерфейсе.

ВидеоЭфир с камеры в прямом эфире

 

По такому же принципу как я добавил камеру выше добавляю остальные 3 штуки, но если же у Вас все таки видео по добавленной камере не отображается, а добавленная камера в Web-интерфейсе управления ZoneMinder

выглядит так:

Красным помечено, что камера не подключена к ZoneMinder

 

источник камеры 192.168.13.27 – отмечен красным, значит Вам дорога в правый угол где нужно нажать Log и анализировать проблемы почему такое произошло, хотя можно и обратить внимание на строку по середине: ZoneMinder ConsoleStoppedv1.28.1 и щелкнуть по состоянию Stopped а далее выставить: Start – и нажать Apply

Перезапускаю сервис ZoneMinder через Web-интерфейс

 

 

 

После этого строка добавленной камеры сменит свой статус на активированный:

Отлично, рассматриваю что у меня происходило когда я добавил все 4 камеры, две из них показывали, а вот остальные две нет:

Из 4 заводимых камер - две не поднимаются

 

Открыв логи, обнаружил, что присутствуют ошибки:

2015-06-27 09:01:53.921944 zms 2543 WAR Shared data not initialised by capture daemon, some query functions may not be available or produce invalid results for monitor Camera2 zm_monitor.cpp

 

2015-06-27 09:01:53.808429 web_php 2432 ERR socket_sendto( /tmp/zm/zms-427548s.sock ) failed: No such file or directory /usr/share/zoneminder/includes/functions.php

 

2015-06-27 09:01:35.547113 zms 2527 WAR Shared data not initialised by capture daemon, some query functions may not be available or produce invalid results for monitor Camera3 zm_monitor.cpp

 

2015-06-27 09:07:21.587530 zmdc 3014 ERR ‘zmc -m 4’ exited abnormally, exit status 255 zmdc.pl

 

2015-06-27 09:07:21.378150 zmdc 3014 ERR ‘zmc -m 3’ exited abnormally, exit status 255 zmdc.pl

Большую часть лога я опустил, но уже некоторая его часть дает понять, что при добавлении последующий камер 3 и 4 сервис ZoneMinder начинает сбоить от поступающей информации.

При тестировании доступности камеры 3 & 4 получаю ответ

Unable to determine path for arp command, type -p arp returned ‘127’

В моем случае это просто с текущей системы нельзя сделать arp запрос к камере с целью определить MAC адрес устройства и только то, так что это никакой роли не играет.

Почитавши документацию и различные форумы пришел к выводу что у меня на системе нужно поправить параметр отвечающий за общую память (shared memory), отобразить текущий параметры системы:

ekzorchik@srv-mon:~$ ipcs -l

—— Shared Memory Limits ———

max number of segments = 4096 (Максимум очередей для всей системы)

max seg size (kbytes) = 32768

max total shared memory (kbytes) = 8388608

min seg size (bytes) = 1

—— Semaphore Limits ——— (Пределы семафоров)

max number of arrays = 128 (Максимальное количество массивов)

max semaphores per array = 250 (Максимум семафоров на массив)

max semaphores system wide = 32000 (Максимум семафоров на всю систему)

max ops per semop call = 32 (Максимум операций на вызов семафора)

semaphore max value = 32767 (Максимальное значение семафора)

—— Messages Limits ———(Пределы совместного использования памяти)

max queues system wide = 1982

max size of message (bytes) = 8192

default max size of queue (bytes) = 16384

Но вот как посчитать рекомендуемое значение shared memory для текущей системы, т.к. какие значения shmmax & shmall нужно предопределить в системе для корректной работы программы ZoneMinder, почитавши различных форумов остановился на этом варианте: Ниже скрипт который определит на основе текущей системы необходимые значения:

ekzorchik@srv-mon:~$ nano kernel

#!/bin/bash
# simple shmsetup script
page_size=`getconf PAGE_SIZE`
phys_pages=`getconf _PHYS_PAGES`
shmall=`expr $phys_pages / 2`
shmmax=`expr $shmall \* $page_size`
echo kernel.shmmax = $shmmax
echo kernel.shmall = $shmall

ekzorchik@srv-mon:~$ chmod +x kernel

ekzorchik@srv-mon:~$ sudo bash -c "sh ./kernel >> /etc/sysctl.conf"

ekzorchik@srv-mon:~$ sudo sysctl -p

После перезапускаю систему:

ekzorchik@srv-mon:~$ sudo reboot

Результат такой же, видимо 1Gb памяти системе не достаточно, из дальнейшей вычитки как расчитывается все-таки параметр

kernel.shmmax

  • для x86 архитектуры: 4*1024*1024*1024 – итого значение в байтах но не более 4Gb
  • для x64 архитектуры: уже такого ограничения нет.

В документации к программе рекомендуется выставить значение в 127 Мегабайт переведя его в байты, но мне к слову это тоже не помогло.

Раз не получается, то увеличил просто размер оперативной памяти на системе с 1Gb до 4Gb и ни каких значения в /etc/sysctl.conf я не вносил

Система сама предопределила наиболее корректные для нее значения:

ekzorchik@srv-mon:~$ cat /proc/sys/kernel/shmall

2097152

ekzorchik@srv-mon:~$ cat /proc/sys/kernel/shmmax

33554432

итог, все IP камеры успешно завелись и отображаются, в логах кстати всё чисто:

Увеличим размер оперативной памяти с 1Gb до 4Gb - все камеры заработали

 

Теперь мне нужно чтобы с одной странички можно было наблюдать за всеми четырьмя камерами сразу, делается это с помощью плагина именованного как cambozola, устанавливаю его в систему:

ekzorchik@srv-mon:~$ sudo wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz

ekzorchik@srv-mon:~$ tar -xzf cambozola-latest.tar.gz

ekzorchik@srv-mon:~$ sudo cp cambozola-0.936/dist/cambozola.jar /usr/share/zoneminder/

Теперь щелкаем по Running и перезапускаем Zoneminder, как только процесс завершится – переход на ссылки именованной, как Montage позволит манипулировать процессом отображения всех 4 камер с одной страницы.

К примеру как-то так:, но придется подобрать значения:

  • Scale: 1/3x
  • Layout: 2-wide grid

Установленный плагин cambozola и все камеры показывают сразу

 

Теперь имея полученное можно задействовать ссылку (ее вид: http://IP&DNS/zm/index.php?view=montage&group=0) на доступ к данной странице использовать на телевизорах подключенных к тонкому клиенту к примеру: HP EliteDesk800G1 (этот уже лучше чем всякие доисторические Tonk 1202,1207) в клиентской зоне.

Через неделю взглянув на экран с моим ZoneMinder обнаружил, что видеоизображение с камер не отображается

Через неделю плагин Cambozola не отрабатывает

 

, в логах идут ошибки

В логах ошибки

 

Еще более внимательное чтение логов и форумов показало, что у меня файл сайт zoneminder.conf содержит не вполне корректные значения – изменил на:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/zoneminder.conf

Alias /zm /usr/share/zoneminder

<Directory /usr/share/zoneminder>

php_flag register_globals off

php_value short_open_tag 1

Options Indexes FollowSymLinks

AllowOverride All

<IfModule mod_dir.c>

DirectoryIndex index.php

</IfModule>

</Directory>

ScriptAlias /cgi-bin /usr/lib/cgi-bin

<Directory "/usr/lib/cgi-bin">

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

AllowOverride All

# The code unfortunately uses short tags in many places

php_value short_open_tag 1

</Directory>

Сохранил внесенные изменения, а после перезапустил Web-сервис Apache & ZoneMinder

ekzorchik@srv-mon:~$ sudo service apache2 stop

ekzorchik@srv-mon:~$ sudo service zoneminder stop

Stopping ZoneMinder: success

ekzorchik@srv-mon:~$ sudo rm -vf /tmp/zm/*.*

ekzorchik@srv-mon:~$ sudo service zoneminder start

Starting ZoneMinder: success

ekzorchik@srv-mon:~$ sudo service apache2 start

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

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

три + девятнадцать =