ZoneMinder для чайника - налаштовуємо відеоспостереження

Відеоспостереження обслуговує ІП, причому найдосвідченіший співробітник - просто "самохідний інсталятор". Я збирався в нього повчитися працювати з цією системою на прикладі її переустановки. Неділя, вихідний, ніхто не працює. Збираємось на складі - я і фахівець. Я привіз із собою новий гвинт – і пропоную на нього поставити систему, щоб не чіпати вже встановлену. Після обговорення доцільності такого підходу він погоджується. Лінощі йому було почекати хвилин 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

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

Важливо! Додаємо апача до групи video. Якщо не зробити – витратимо зайву годину на з'ясування, чому немає картинки.

adduser www-data video

І найвеселіше – починаємо намагатися побачити свої камери. Для тесту я використав дешеву та поширену 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 для 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 no 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: Формат: 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 виявлено 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 Формат: 0 - PAL

Для деяких камер (моєї - теж) висновок містить помилку:

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

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

Далі - cd zm і конфігуруємо. Але! Оскільки ми спочатку поставили пакет - то конфігуруємо так, щоб бінарники збиралися з правильними шляхами. Для того щоб можна було зібраними змінювати встановлені з пакета. Насамперед редагуємо скрипт /usr/src/zm/configure. Шукаємо рядок sysconfdir= і міняємо шлях на:

sysconfdir='$/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 треба додати рядок

Інакше свариться. Спершу спробуємо зібрати без змін. Після 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 патч:

Так, я ще знайшов усі повідомлення про помилки

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! Все що треба копіюватимемо ручками.

Якщо у виведенні логів бачимо zmserver zmwatch[3093]: ERR [Can't get shared memory id '7a6d0001',1: отже, треба правити (додавати) в /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 = '/bin/sh' if exists $ENV;

Вставляємо підвантаження бібліотек (лінь оформляти патчем):

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

У ZM можна налаштувати багато моделей камер. Метод перевірки вашого джерела простий:

xawtv -c /dev/video0

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

Ну а "приємне" – налаштування датчика руху та іншого – вже через веб-інтерфейс.

Так, місце де зберігається інформація вказується посиланням у каталозі: