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
Ну а "приємне" – налаштування датчика руху та іншого – вже через веб-інтерфейс.
Так, місце де зберігається інформація вказується посиланням у каталозі: