MyTetra Share
Делитесь знаниями!
ZoneMinder для чайника - настраиваем видеонаблюдение
Время создания: 09.07.2015 08:59
Текстовые метки: Linux, ZoneMinder, настройка, установка, видеонаблюдение
Раздел: Компьютер - Linux - Видео в Linux - ZoneMinder
Запись: xintrea/mytetra_syncro/master/base/1436421585o5v2iv9c7j/text.html на raw.github.com

Примечание: Это статья 2010 года. Все, что описано здесь - совершенно не для чайника. Так мучиться с инсталляцией программы может только очень, очень упорный луноход.



ZoneMinder для чайника - настраиваем видеонаблюдение


Наверно каждому может пригодиться простая система видеонаблюдения. Следить за подъездом, за машиной... Да хоть за котом!

* * *


Итак, начнем с предистории. Есть торговая немаленькая фирма, у которой есть склад. Тоже немаленький. Особенностью данного склада является необходимость видеозаписи происходящего на столах "контроллеров". Система эта организована следующим образом: Есть выделенный "сервер" под WinXP Prof. Стандартная мать, процессор, но винтов - три, два из них по 2Т, для архива. И на борту - плата видеозахвата на 16 аналоговых камер. Работает под удивительно кривым виндовс-софтом. Естественно, закрытым. Причем - запускается только с правами администратора, только при открытом сеансе, сервисом работать не умеет. Да и вообще - мне не нравится.

Видеонаблюдение обслуживает ИП, причем самый знающий сотрудник - просто "самоходный инсталлятор". Я собирался у него поучиться работе с этой системой на примере ее переустановки. Воскресенье, выходной, никто не работает. Собираемся на складе - я и специалист. Я привез с собой новый винт - и предлагаю на него поставить систему, чтобы не трогать уже установленную. После обсуждения целесообразности такого подхода он соглашается. Лень ему было подождать минут 40... А в дальнейшем оказалось - очень верный подход. Потому что _после_ установки "специалист" (С) задал мне удивительный вопрос:

С - Ну что, остальные винты форматируем?

Я - ЗАЧЕМ?!

С - Ну, я всегда так делаю.

Я - А как же использовать сужествующие записи?

С - Я не умею переносить!

Я - А на*** мы все это делали?

С - Ну, Вы ж хотели переустановить...

С - Я просто знаю что и как делать, на какие кнопки нажимать, я много лет этим занимаюсь и лучше меня нет в регионе!

Я - То есть Вы хотите удалить все записанное просто потому что не знаете как оно хранится?!

С - да.

Я - А если бы винт накрылся системный?

С - ...*совсем_оффтоп off*

По итогам общения (я был довольно корректен и не стал говорить "спецу" все, что думаю) - подумал о том чтобы неплохо поставить свою систему.


* * *


15 минут в гугле дали двух кандидатов: Motion и Zoneminder www.zoneminder.com
Собрана тестовая машинка: интегрированная мать Asus P5KPL, процессор Cel 2.5 Ггц, память 2ГБ.
В качестве системного диска выбрана Compact Flsah на 8 ГБ - через переходник на IDE.
Для архива - SATA диск на 320 ГБ.


Шаг 1: Установка системы


Выбор пал на Debian, так как более привычен. Флешка в картридер своей машины (вот в этом - главный плюс! В случае чего - в 2 минуты выдергивается, подмонтируется и правится). Делаем три примари раздела:

/dev/sdb1 * 1 6 48163+ 83 Linux
/dev/sdb2 7 870 6940080 83 Linux
/dev/sdb3 871 974 835380 83 Linux

Первоначально хотел отвести 3 раздел подж своп - но одумался.
Монтируем второй раздел, debootstrap - и через 5 минут получаем систему. Я ставил squeeze - так как ZM версии 1.24 требует свежих пакетов.
Монтируем первый раздел и ставим grub. Далее chroot в установленную систему, apt-get install mc ssh
Настраиваем сеть, apt, меню груба, ставим ядро (у меня 2.6.32-5-686).
Фух. Флешку - в тестовую машину, запускаем.

apt-get install zoneminder

Он тянет за собой все что нужно, так что пока скачаются мускуль и апач - пьем %любимый_напиток% и/или курим.


Шаг 2: Настройка


Тут я буду использовать инфо из инструкции по установке с оффсайта: http://www.zoneminder.com/wiki/index.php/Documentation#Installation_from...
Первым делом создаем ссылку для апача на конфиг сайта ZM:

sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf

Потом перезапускам апач, мне почему-то потребовалось его перезапустить несколько раз, а может локальный кэш не обновлялся..

/etc/init.d/apache2 restart

Важно! Добавляем апача в группу video. Если не сделать - потратим лишний час на выяснение, почему нет картинки.

adduser www-data video

Заходим на
http://Address_of_server/zm/index.php - и наблюдаем интерфейс.

И самое веселое - начинаем пытаться увидеть свои камеры...
Для теста я использовал дешевую и распространенную Web-камеру Defender G-Lens 324 (около 350 рублей цена)
Выглядит она так:

videoserv:/etc/apt# lsusb
Bus 005 Device 002: ID 093a:2620 Pixart Imaging, Inc.
Ставим пакет v4l-conf.
Делаем v4l-info /dev/video0
Видим самое главное:
general info
VIDIOC_QUERYCAP
driver : "pac7311"
card : "USB Camera (093a:2620)"
bus_info : "usb-0000:00:1d.3-2"
version : 2.7.0
capabilities : 0x5000001 [VIDEO_CAPTURE,READWRITE,STREAMING]

То есть определилась.
Пытаемся настроить в ZM:
Жмем "Add new monitor"
переходим на вкладку "Sources"
Заполняем:


Device Path /dev/video0
Capture Method Video For Linux version 2
Device Channel 0
Device Format PAL
Capture Palette JPEG
Capture Width 640
Capture Height 480
Preserve Aspect Ratio
Orientation Normal


Ссылки сверху (Probe и Presets) - нам бесполезны, предназначены для опознания нескольких сетевых камер.

Сохраняем, после обновления страницы смотрим на _цвет_ пути источника в колонке Source. Если красный - что-то не так. Не отчаиваемся, клацаем в веб-интерфейсе на имя созданного монитора... И - беспорядочные полосы, помехи или вообще черный экран. Ничего страшного. Для начала - открываем в консоли tail -f /tmp/* и посматриваем туда на предмет дебага. Для теста устройства используем команду

videoserv:/etc/apt# zmu -d /dev/video0 -v -q
Video Device: /dev/video0
General Capabilities
Driver: pac7311
Card: USB Camera (093a:2620)
Bus: usb-0000:00:1d.3-2
Version: 2.7.0
Type: 0x5000001
Supports video capture (X)
Does not support video output
Does not support frame buffer overlay
Does not support VBI capture
Does not support VBI output
Does not support sliced VBI capture
Does not support sliced VBI output
Does not support video output overlay
Does not have tuner
Does not have audio in and/or out
Does not have radio
Supports read/write i/o (X)
Does not support async i/o
Supports streaming i/o (X)
Standards:
Formats:
PJPG (PJPG)
Crop Capabilities
Bounds: 0 x 0
Default: 0 x 0
Current: Cropping is not supported
Inputs: 1
Input 0
Name: pac7311
Type: Camera
Audioset: 00000000
Standards: 0x0
Power on (X)
Signal detected (X)
Colour Signal detected
Horizontal Lock detected


Если вывод осмысленный - то хорошо.
Если нет - пробуем V4L версии 1.

zmu -d /dev/video0 -v -q -V1

Должно быть что-то похожее:

videoserv:/etc/apt# zmu -d /dev/video0 -v -q -V1
Video Device: /dev/video0
Video Capabilities
Name: USB Camera (093a:2620)
Type: 1
Can capture
Video Channels: 1
Audio Channels: 0
Maximum Width: 640
Maximum Height: 480
Minimum Width: 48
Minimum Height: 32
Window Attributes
X Offset: 0
Y Offset: 0
Width: 640
Height: 480
Picture Attributes
Palette: 0 - Unknown
Colour Depth: 8
Brightness: 32768
Hue: 0
Colour :32639
Contrast: 32639
Whiteness: 0
Channel 0 Attributes
Name: pac7311
Channel: 0
Flags: 0
Type: 2 - Camera
Format: 0 - PAL

Для некоторых камер (моей - тоже) вывод содержит ошибку:

Error, failed to query crop: /dev/video0: Invalid argument

Не страшно! Есть патч [FIX] ZM 1.24.2 "Error, failed to query crop"
переходим в /usr/src и делаем:

svn co
http://svn.zoneminder.com/svn/zm/trunk zm

Далее - cd zm, и конфигурим. Но! Так как мы сначала поставили пакет - то конфигурим так, чтобы бинарники собирались с правильными путями. Для того, чтобы можно было собранными менять установленные из пакета. Первым делом редактируем скрипт /usr/src/zm/configure. Ищем строку sysconfdir= и меняем путь на:

sysconfdir='${prefix}/etc/zm' - потому что пакет хранит конфип именно в /etc/zm/zm.conf

Теперь конфигурим:

./configure --with-webdir=/usr/share/zoneminder --with-cgidir=/usr/share/zoneminder/cgi-bin --enable-mmap=no --with-webuser=www-data --with-webgroup=www-data --bindir=/usr/bin --enable-debug=yes ZM_SSL_LIB=openssl

В процессе устанавлисаем зависимости. Например dev пакет mysql - и еще несколько.

Когда (если) configure пройдет без ошибок - можно делать make. Но один нюанс все равно есть - если (почти наверняка) cpp будет версии 4.4 - то в файл /usr/src/zm/src/zm_utils.cpp надо добавить строку

#include

Иначе ругается. Для начала попробуем собрать без изменений. После make НЕ НАДО делать make install! Все что надо будем копировать ручками. Если ошибок нет, идем в /usr/src/zm/src и запускаем:

./zmu -d /dev/video0 -v -q

Обязательно свежесобранный. Для уверенности даже так:

/usr/src/zm/src/zmu -d /dev/video0 -v -q

Этим мы убеждаемся (по отсутствию Abort в выводе) что бинарник читает наш конфиг и вообще работает.

Затем накладываем на zm_local_camera.cpp патч:

911,912c911
< int crop_rc = vidioctl( vid_fd, VIDIOC_G_CROP, &crop );
< if ((crop_rc < 0 ) && (errno != EINVAL))
---
> if ( vidioctl( vid_fd, VIDIOC_G_CROP, &crop ) < 0 )
921,928c920,921
< if ( verbose ) {
< if (crop_rc >= 0) {
< sprintf( output+strlen(output), " Current: %d x %d\n", crop.c.width, crop.c.height );
< }
< else {
< sprintf( output+strlen(output), " Current: Cropping is not supported\n");
< }
< }
---
> if ( verbose )
> sprintf( output+strlen(output), " Current: %d x %d\n", crop.c.width, crop.c.height );

Да, я еще нашел все сообщения о ошибках

sprintf( output, "Error, failed to query crop capabilities %s: %s\n " , queryDevice, strerror(errno) );

и добавил "цифры" для отладки - чтобы знать какое именно сообщение срабатывает.

sprintf( output, "Error, failed to query crop (6) capabilities %s: %s\n " , queryDevice, strerror(errno) );

Но это не обязательно...
После сборки с патчем - меняем файлы в /usr/bin на свежескомпилированные (просто копируем поверх).
Если после перезапуска ZM камера снова не работает - выполняем Хинт 2

После make НЕ НАДО делать make install! Все что надо будем копировать ручками.


Хинт 1

Если в выводе логов видим zmserver zmwatch[3093]: ERR [Can't get shared memory id '7a6d0001', 1: No such file or directory]
значит надо править (добавлять) в /etc/sysctl.conf

kernel.shmall = 268435456
kernel.shmmax = 268435456

Конкретное значение зависит от наличия памяти в системе. (требует перезагрузки) или:

echo 268435456 >/proc/sys/kernel/shmall
echo 268435456 >/proc/sys/kernel/shmmax


Хинт 2. Работающий вариант добавления "совместимости"

Многие (не все) камеры USB требуют предварительной подгрузки библиотек v4l.
Берем и редактируем файд /usr/bin/zmdc.pl

После строки $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL};

Вставляем подгрузку библиотек (лень оформлять патчем):

$ENV{LD_PRELOAD} = '/usr/lib/libv4l/v4l1compat.so';
$ENV{LD_PRELOAD} = '/usr/lib/libv4l/v4l2convert.so';

до строки:

delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};


Хинт 3

В ZM можно настроить почти все модели камер. Метод проверки вашего источника прост:

xawtv -c /dev/video0

Или

cheese

Или

mplayer tv:// -tv driver=v4l2:outfmt=yuy2:width=640:height=480:device=/dev/video0

Ну а "приятное" - настройка датчика движения и прочего - уже через веб-интерфейс.

Да, место где хранится информация указывается ссылкой в каталоге:

/usr/share/zoneminder/events


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования