В данной заметке я хочю разобрать как поднять сервис видеонаблюдения за зоной где находятся клиентские автомобили которые они передали в центр на обслуживание. К примеру пришел человек в дилерский центр своей марки автомобиля, и пока он ждет к примеру сидя на диванчике в клиентской зоне или в баре он может на выведенном мониторе в режиме реального времени наблюдать за своим автомобилем. Достаточно удобно и этим мы выражаем клиенту что мы всячески заботимся о его сервисе и его автомобиль в зоне видимости.
Все дальнейшие действия я буду производить на системе Ubuntu 12.04.5 Server amd64
текущий характеристики которой в рамках моего сперва теста:
- RAM = 1Gb
- HDD = 25Gb
- CPU = 1Gb
используемые камеры: Acti ACM-5611 A1D-220-V3.14.19-AC
Обновляю информацию по репозитариям и установленным пакетам системы:
ekzorchik@srv-mon:~$ sudo apt-get update && sudo apt-get upgrade -y
Проверяю текущую версию разворачиваемого пакета ZoneMinder присутствующего в дефолтных репозитариях:
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 и перед нами предстает Административная страница по организации видеонаблюдения:
Чтобы вам было проще ориентироваться включите русский язык оболочки. Для этого нажмите на 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 текущего окна настроек камеры и в главном меня появится добавленная настроенная камера:
Щелкнув по именованию Camera1 откроется новое окно где будет показано изображения получаемое в режиме реального времени с видеокамеры в полный размер, а именно 1280 на 1024 именно такие настройки указаны на самой камере.
Варьируя параметром Scale, сейчас я выставил ¼ – можно регулировать размер отображаемой картинки в Web-представленном интерфейсе.
По такому же принципу как я добавил камеру выше добавляю остальные 3 штуки, но если же у Вас все таки видео по добавленной камере не отображается, а добавленная камера в Web-интерфейсе управления ZoneMinder
выглядит так:
источник камеры 192.168.13.27 – отмечен красным, значит Вам дорога в правый угол где нужно нажать Log и анализировать проблемы почему такое произошло, хотя можно и обратить внимание на строку по середине: ZoneMinder Console – Stopped – v1.28.1 и щелкнуть по состоянию Stopped а далее выставить: Start – и нажать Apply
После этого строка добавленной камеры сменит свой статус на активированный:
Отлично, рассматриваю что у меня происходило когда я добавил все 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 камеры успешно завелись и отображаются, в логах кстати всё чисто:
Теперь мне нужно чтобы с одной странички можно было наблюдать за всеми четырьмя камерами сразу, делается это с помощью плагина именованного как 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
Теперь имея полученное можно задействовать ссылку (ее вид: http://IP&DNS/zm/index.php?view=montage&group=0) на доступ к данной странице использовать на телевизорах подключенных к тонкому клиенту к примеру: HP EliteDesk800G1 (этот уже лучше чем всякие доисторические Tonk 1202,1207) в клиентской зоне.
Через неделю взглянув на экран с моим ZoneMinder обнаружил, что видеоизображение с камер не отображается
, в логах идут ошибки
Еще более внимательное чтение логов и форумов показало, что у меня файл сайт 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.