Если необходим непрерывный просмотр видекамер в режиме реального времени локально на сервере нужно установить:
Модуль ядра 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
aptitude install avreg-mon
Редактируем по вкусу настройки avreg-mon.
$ sudo adduser looser video
Если вы работаете от этого же пользователя, то далее следует завершить сеанс пользователя (logout) и войти снова (login).
После установки, вьювер можно запустить двумя способами:
avreg-mon -v
Для первых запусков первый вариант предпочтителен, так как Вы увидите ошибки и предупреждения, если что-то пошло не так.
Максимум, что можно просматривать локально на сервере - 32 камеры. Это ограничение стандартного ядра, принципов работы модуля v4loop и, как следствие, нашего просмотрщика avreg-mon.
С настройками по-умолчанию, модуль 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 | 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.
... 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
...
}
✔ (3) Создать в веб-интерфейсе две
раскладки по 16 камер для левого и правого
мониторов.
✔ (4) Сделать 2 ярлыка или скрипта:
avreg-mon --display=left avreg-mon --display=right
✔ (5) Если в системе 2 дисплея,
соответствующим образом настроить xorg.conf и DE
(окружение раб. стола - KDE, GNOME, etc).
✔ (6) Настроить автоматическое
позиционирование окон avreg-mon (левого и правого), чтобы
они не перекрывались друг-другом, делается средствами
DE.
Если нужно обеспечить постоянный режим наблюдения за камерами с использованием просмотрщика avreg-mon:
то придётся использовать дополнительный ПК, на котором должен быть установлен 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-е"