Видеонаблюдение под Linux

Установка локального вьювера avreg-mon.

Если необходим непрерывный просмотр видекамер в режиме реального времени локально на сервере нужно установить:

  1. модуль ядра v4loop, для создания виртуальных video4linux устройств (v4l_pipe в настройках avregd);
  2. программу-вьювер avreg-mon (см. ниже).
Если общая скорость (суммарно, от всех камер) вывода на экран превышает 50 fps (кадров в сек), то желательно использование производительных видеокарт NVidia и графического сервера X.

Модуль v4loop.

Модуль ядра v4loop обеспечивает передачу видео от демона avregd в просмотрщик avreg-mon с использованием интерфейса video4linux.

Из под root-а или через sudo выполняем:

Установка модуля ядра v4loop

aptitude install module-assistant build-essential 
m-a update
m-a prepare
 
# примечание: след. ниже команду (одну!!!) придётся выполнять
# каждый раз при смене/обновлении ядра
m-a a-i v4loop

Установка avreg-mon.

Установка avreg-mon

aptitude install avreg-mon

Редактируем по вкусу настройки avreg-mon.

Добавляем пользователя в группу «video». Например, предположим, что учётная запись Вас или оператора «looser». Тогда от от root-а или через sudo нужно выполнить команду:
$ sudo adduser looser video

Если вы работаете от этого же пользователя, то далее следует завершить сеанс пользователя (logout) и войти снова (login).

После установки, вьювер можно запустить двумя способами:

  1. из терминала одноимённой командой
    avreg-mon -v
    
  2. или с меню в разделе «Мультимедиа».

Для первых запусков первый вариант предпочтителен, так как Вы увидите ошибки и предупреждения, если что-то пошло не так.

Пользователи Ubuntu 9.10 Karmic, читайте особенности установки на 9.10: http://groups.google.com/group/avreg-users/browse_thread/thread/f9b5b9865fda830d

Увеличение количества просматриваемых камер.

Максимум, что можно просматривать локально на сервере - 32 камеры. Это ограничение стандартного ядра, принципов работы модуля v4loop и, как следствие, нашего просмотрщика avreg-mon.

Если нужно больше 32, то возможно вас устроит вариант, описанный в п.7 в самом конце страницы.

<= 32 (на одном ПК).

С настройками по-умолчанию, модуль v4loop обеспечивает «просмотр» только 16 камер. Если вам больше и не нужно, то можете не читать текст далее.

Итак, если нужно обеспечить просмотр avreg-mon-ом более чем 16 камер (макс. 32 на одном ПК), то нужно выполнить действия, изложенные ниже.

(1) «Сказать» модулю v4loop, чтобы он создавал 32 (или менее, сколько вам там нужно) виртуальных сквозных канала (передатчик и приёмник). Для этого в файле «/etc/modprobe.d/v4loop» нужно изменить значения параметров:

  • «dev_offset» - смещение, т.е. с какого номера начинать; допустимые значения [0-62]; для того, чтобы пропустить реальные video4linux устройства (USB-камеры, платы видеозахвата, тюнеры и т.п.);
  • «pipes» - сколько каналов нужно создать (т.е. просматриваемых локально камер).

/etc/modprobe.d/v4loop для 32 камер

options v4loop dev_offset=0 pipes=32

После изменения настроек нужно перегрузить модуль

# /etc/init.d/avreg stop
# rmmod v4loop
# modprobe v4loop

или перегрузить компьютер.

Если вы сделали всё правильно, то должно появиться 64 файлов устройств «/dev/video[0-64]»

Возможные проблемы и их решения:

(64 - dev_offset/2) < pipes, т.е. “мешают” какие-то реальные video4linux-устройства (платы в-захвата, usb-камеры и т.п.). Решение - удалить устройства, запретить в BIOS-е или запретить загрузку соответствующих модулей.

☹ Невозможно создать более 16 устройств в Ubuntu 9.04 Jaunty
http://groups.google.com/group/avreg-users/browse_thread/thread/e9a3de51d723d72

☹ Ядру не хватает памяти для загрузки или нормальной работы модуля v4loop. Выглядит это может так:

  • нужное кол-во устройств не создаётся и dmesg показывает ругачки на vmalloc
    $ dmesg | grep vmalloc
        vmalloc : 0xf8800000 - 0xffbfe000   ( 115 MB)
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    allocation failed: out of vmalloc space - use vmalloc=<size> to increase size.
    
  • или avregd «ругается» примерно так:
    ... putpipe write(7, 0xb62a6040, 460800) failed: Invalid argument
    ... cam[25]: failed put image into video v4l_pipe `/dev/video63`. Exiting...
    

Решение: увеличить размер «ядерной» памяти для vmalloc. Делается это параметрами загрузки ядра и определять из нужно в конфигурационном файле загрузчика ядра (GRUB или LILO).

GRUB 0.9x: /boot/grub/menu.lst

...
# defoptions=vmalloc=256M
...
Символ ‘#’ в начале строки важен, не удалять!!!

GRUB 2: /etc/default/grub

...
GRUB_CMDLINE_LINUX="defoptions=vmalloc=256M"
...

Далее выполните команду

# update-grub

Прим.: если не поможет, то попробуйте увеличить ещё немного:

# defoptions=vmalloc=512M



(2) Сообщить веб-интерфейсу avreg-site об изменениях.

/etc/avreg/avreg.conf

avreg-site {
  ...
  # должно соответствовать dev_offset в /etc/modprobe.d/v4loop
  v4loop-dev-offset = 0
  ...
}


Читайте далее только если вам нужно:
  1. просматривать локально более 25 камер
  2. хотите обеспечить вывод на 2 дисплея разные группы камер, например, на одном мониторе все камеры, а на другом несколько важных «крупным» планом.



(3) Создать в веб-интерфейсе две раскладки по 16 камер для левого и правого мониторов.

(4) Сделать 2 ярлыка или скрипта:

avreg-mon --display=left
avreg-mon --display=right


(5) Если в системе 2 дисплея, соответствующим образом настроить xorg.conf и DE (окружение раб. стола - KDE, GNOME, etc).

(6) Настроить автоматическое позиционирование окон avreg-mon (левого и правого), чтобы они не перекрывались друг-другом, делается средствами DE.

> 32 или вынос просмотра на клиентские ПК.

Если нужно обеспечить постоянный режим наблюдения за камерами с использованием просмотрщика avreg-mon:

  • более 32, или
  • “вынести” задачу наблюдения с сервера на клиентские ПК (рабочие места операторов)

то придётся использовать дополнительный ПК, на котором должен быть установлен AVReg отключёнными записью на диск и детектором движения (т.е. “клиентский” AVReg только для просмотр avreg-mon-ом). Таких ПК может быть сколько угодно.

Видео-потоки “клиентский” AVReg может получать как с реальных видеокамер, так и с серверного AVReg-а, по вашему предпочтению.

Рассмотрим настройки “серверного” и “клиентского” AVReg-ов для последнего случая.

На “серверном” AVReg-е, для каждой просматриваемой удалённо камеры нужно определить значение параметра «wc_port». В результате, для каждой такой камеры будет работать мини http-сервер, который с URI

http://avreg-server-ip:{wc_port}/video.mjpg

будет отдавать стандартный видео-поток mjpeg.

Этот поток может быть принят “клиентским” AVReg-ом, точно также как обеспечивается захват с обычных сетевых ip-камер.

Для этого, на “клиентском” AVReg-е нужно определить следующие настройки: »для всех камер» или »по-умолчанию для всех»:

InetCam_IP = "avreg-server-ip"
InetCam_USER/InetCam_PASSWD - данные пользователя из группы "операторы"
                              на “серверном” AVReg-е,
                              лучше добавить нового отдельно пользователя
V.http_get = "/video.mjpg"

webcam_live,
text2img,
brightness_control,
motion_detector,
save_video         - всё "Выкл."


для каждой конкретной камеры:

InetCam_http_port = "wc_port этой камеры на “серверном”  AVReg-е"
manual/install/avreg-mon.txt · Последние изменения: 2010-01-30 support