Модуль ядра v4loop создаёт виртуальные
устройства video4linux, по которому демон
avregd передаёт несжатое видео в просмотрщик
avreg-mon.
Читайте этот раздел если у вас:
… avregd: cam[xx]: image to
v4l_pipe(/dev/videoXX) write failed,
exiting…».
С настройками по-умолчанию, модуль v4loop обеспечивает «просмотр» только 16 камер, если нужно обеспечить просмотр avreg-mon-ом более чем 16 камер (макс. 32 на одном ПК), то нужно выполнить действия, изложенные ниже.
Сперва нужно настроить модуль v4loop,
чтобы он создавал 32 (или менее, сколько вам реально
нужно) виртуальных сквозных канала (передатчик и
приёмник). Для этого в файле
«/etc/modprobe.d/v4loop.conf» нужно
изменить значения параметров:
dev_offset» - смещение, т.е. с какого
номера начинать; допустимые значения [0-62]; для
того, чтобы пропустить реальные video4linux
устройства (USB-камеры, платы видеозахвата, тюнеры
и т.п.);
pipes» - сколько каналов нужно
создать (т.е. просматриваемых локально камер).
/etc/modprobe.d/v4loop.conf для 32 камер
options v4loop dev_offset=0 pipes=32
После изменения настроек нужно перегрузить модуль, выполнив команду от root-а или через sudo:
# service 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 2: /etc/default/grub
... GRUB_CMDLINE_LINUX="vmalloc=256M" ...
для старых дистрибутивов с GRUB legacy 0.9x: /boot/grub/menu.lst
... ## Не удаляйте символ ‘**#**’ в начале строки. # defoptions=vmalloc=256M ...
Далее выполните команду
update-grub
.
Прим.: если не поможет, то попробуйте увеличить ещё немного:
# vmalloc=512M
Основные параметры интерфейса, такие как, например, размеры окна, определяются в едином конфигурационном файле «/etc/avreg/avreg.conf» в секции «avreg-mon {}»
...
# Имя хоста SQL-сервера и имя базы данных.
# По умолчанию:
; db-host = 'пусто'
; db-name = 'avreg5_db'
...
avreg-mon {
### настройки локального просмотрщика камер в реальном времени ###
### версия 5.4.4 ###
# Устанавливайте имя "db-user" и пароль "db-passwd" доступа к базе данных
# в приватном ( 0640 root:video ) файле c именем "avreg-mon.secret"
include /etc/avreg/avreg-mon.secret
# Использовать раскладки для левого(L) или правого(R) дисплея
# на двух-мониторных системах.По умолчанию: "L" (левый или единственный).
; display = R
# После запуска переключиться на раскладку с номером layout
# Cм. настройку раскладок в веб-интерфейсе. По умолчанию: 0.
; layout = 1
# Использовать окно с разрешением ШИРИНАxВЫСОТА пикселей.
# По умолчанию: 648x488
; geo = 800x600
# Использовать весь экран. По умолчанию: no
; fullscreen = yes
# Cоздать окно без заголовка (title bar) и рамок (frame), если такое возможно.
# Установка fullscreen в "yes" автоматически включает этот флаг.По умолчанию: no
; no-winframe = yes
# Не пытаться сохранять пропорции (соотношение сторон видеокадра или aspect ratio)
# видео с камер, просто использовать всё доступное пространство окна программы.
# Такой режим может приводить к увеличению нагрузки на систему и небольшим
# искажениям. По умолчанию: no, использовать для всех камер соотношение сторон
# как у камеры в главном окне раскладки.
; fit2screen = yes
# Сохранять оригинальные пропорции для всех камер. Не действует если установлено
# "fit2screen=yes". По умолчанию: no, использовать для всех камер соотношение
# сторон как у камеры в главном окне раскладки.
; keep-aspect = yes
# Использовать целочисленные коэффициенты масштабирования (..., 1/3, 1/2, 1, 2, .)
# при выводе изображения для снижения нагрузки на Intel-процессоры при программном
# видеовыводе. По умолчанию: no.
; smart-scale = yes
### настройки интерфейса пользователя ###
# Заблокировать (не использовать) мышь, клавиатуру или оба устройства.
# Следуем также установить в "yes", если мышь/клавиатура отсутствуют.
# По умолчанию: no
; no-mouse = yes
; no-keyboard = yes
; no-tty = yes
# Заблокировать действия по нажатию клавиш клавиатуры,
# чьи коды (см. SDL_keysym.h), указанные через запятую, присутствуют в этом списке.
; http://www.google.com/search?q=site:www.libsdl.org+SDL_keysym.h
; Например, блокирование клавиш <ESC>,<Q>,<X>,<F1>,<4>-<9> и <4>-<9> на нумпаде:
; disable-keys = '27,113,120,282,52-57,260-265'
# Период попыток восстановления связи с демоном avregd (например,
# при его перезапуске) в секундах. Если значение параметра установлено как 0,
# то при обрыве связи с демоном, avreg-mon завершит работу с сообщением об ошибке.
# По умолчанию: 2 сек.
; reconnect-timeout = 3
# Таймаут выдачи предупредительного сигнала "НЕТ СИГНАЛА" в сек.
# По умолчанию: 4 сек.
; no-signal = 4
# Таймаут (в сек.) отображения камеры, выдвинутой (действиями оператора)
# на передний план и распахнутой во весь экран или окно приложения.
# По умолчанию: 300 сек. 0 - не выходить автоматически из такого режима.
; fs-timeout = 300
# Таймаут отображения названия камеры крупным шрифтом в сек.
# Если 0 - отображать название камер постоянно. По умолчанию: 6 сек.
; camname-timeout = 6
# Таймаут отображения курсора в сек. Если 0 - не скрывать курсор.
# По умолчанию: 4 сек.
; cursor-timeout = 4
### Настройки удалённого управления ###
# Разрешить удалённое управление согласно "remote-control".
# Значение "remote-control" должно быть вида "http://HOST:PORT/PATH-PREFIX".
# HOST можно указывать как ip-адрес, хост-имя или "*" как "любой".
# Пример: при указании "http://192.168.0.1:8155/avreg-mon-cgi", avreg-mon
# будет слушать HTTP запросы на адресе 192.168.0.1 и 8155 порту.
# Замечание: значение PORT будет автоматически увеличено на 1 если display='R'
# См. также: http://avreg.net/manual_tuning_avreg-mon.html#rctrl
# По умолчанию: <пусто> - запретить удалённое управление.
; remote-control = 'http://192.168.0.1:8155/avreg-mon-cgi'
# Принимать запросы только с хостов и сетей, указанных в списке "allowed-from".
# Пример: "localhost, 192.168.43.0/24, 10.0.0.0/8".
# По умолчанию: <пусто> - принимать запросы с любых хостов.
; allowed-from = '192.168.0.0/24'
# Список сообщений тревог. Макс. количество сообщений - 4,
# макс. длина одного сообщения - 15.
# CGI-запрос "/camera?nr=N¶m=alarm&action=set&value=CODE"
# отобразит сообщение #CODE(начинается с 0) в правом верхнем углу окна камер N.
# По умолчанию: <пусто> - не отображать сообщения тревог.
; alarm-msgs = ' были тревоги ; ВСКРЫТ КОРПУС ; РАЗРЯД БАТАРЕИ '
### Специфические настройки видеовывода.
### Предупреждение: установка этих параметров может значительно увеличить нагрузку
### на систему, несмотря на кажущуюся пользу от включения некоторых режимов.
# Попытаться создавать графические элементы прямо в видео-памяти видеокарты.
; hw-surface = yes
# Выводить YUV оверлеи прямо в видео-память видеокарты, если возможно.
; yuv-direct = yes
# Использовать аппаратное YUV ускорение видеовывода, если возможно.
; yuv-hwaccel = yes
# Использовать IYUV оверлей вместо YV12 (по умолчанию).
; iyuv = yes
# Попытаться использовать режим с двойными аппаратными видеобуферами.
; doublebuf = yes
# Включает асинхронное обновление экрана. Обычно _замедляет_ работу на
# однопроцессорных системах, но _может_ ускорить видеовывод на
# многопроцессорных SMP системах. По умолчанию: no
; asyncblit = yes
}
...
Эти параметры также доступны с командной строки, см:
avreg-mon --help
В базе данных находятся настройки, определяющие:
Чтобы обеспечить возможность локального просмотра в реальном времени, прежде всего, нужно настроить демон avregd.
Для каждой камеры, которую мы должны или хотим смотреть локально, должны быть правильно определены следующие параметры разделов «Наблюдение» и «Наблюдение→Локальное» демона avregd: «allow_local» и «v4l_pipe».
Теперь вам, как администратору системы, нужно разместить камеры по окну просмотрщика. Такое размещение мы назвали раскладкой (layout).
Всего раскладок можно создать 20 штук: 10 для левого или единственного дисплея и 10 для правого дисплея. В каждой из раскладок может быть до 25 камер (включительно), однако, для двух-дисплейных систем максимальное количество (общее) отображаемых камер - 32.
Определяются раскладки через веб-интерфейс:
«Настройки и Управление» → «Настройки» → «Раскладки».
См. здесь.
На одном сервере/рабочей станции AVReg посредством
avreg-mon можно просматривать 32 камеры
максимум. Это ограничение стандартного ядра, принципов
работы модуля v4loop и, как следствие, нашего
просмотрщика avreg-mon.
Причём, по умолчанию количество камер для локального просмотра ограничено 16. Если у вас более чем 16 камер (но менее 32), то для устранения этого ограничения нужно сделать нижеследующее:
✔ (1) Увеличить нужное количество виртуальных каналов video4linux - см. выше v4loop.
✔ (2) Сообщить веб-интерфейсу avreg-site об изменениях в настройках модуля v4loop.
/etc/avreg/avreg.conf
avreg-site {
...
# должно соответствовать dev_offset в /etc/modprobe.d/v4loop.conf
v4loop-dev-offset = 0
...
}
✔ (3) Задействовать оба дисплея.
✔ (4) Создать в веб-интерфейсе две
раскладки для левого и правого дисплеев, например по 16
камер на каждом (всего 32 камеры).
✔ (5) Сделать 2 ярлыка или скрипта:
avreg-mon --display=left avreg-mon --display=right
✔ (6) Настроить автоматическое
позиционирование окон avreg-mon (левого и правого), чтобы
они не перекрывались друг с другом (делается средствами
DE или утилитами, типа
wmctrl).
/usr/bin/avreg-mon-2display»
(«avreg-mon-2display left» и
«avreg-mon-2display right») для
автопозиционирования двух окон avreg-mon по “своим”
дисплеям. Читайте также про отключение функций и
возможностей рабочего стола Gnome.
Если нужно обеспечить постоянный режим наблюдения с использованием просмотрщика avreg-mon:
то придётся использовать дополнительный ПК, на котором должен быть установлен AVReg отключёнными записью на диск и детектором движения (т.е. “клиентский” AVReg только для просмотр avreg-mon-ом). Таких ПК может быть сколько угодно.
Видеопотоки AVReg может получать как с реальных видеокамер, так и с других AVReg-ов.
Рассмотрим настройки камеры “клиентского” (локального, на котором смотрим) AVReg-а для захвата видео (и просмотра) c камеры “серверного” (удалённого) AVReg-а.
В общем виде, MJPEG видеопоток с любой AVReg-овой камеры (прим: при «Наблюдение - по сети - allow_networks=Вкл») можно получить с адреса URL:
http://avreg-server-ip:{http_port}/mjpg/video.cgi?camera={num}[&fps={num}]
Прим: http_port см. в avreg.conf в секции «avregd {}».
Для этого, на “клиентском” (локальном, где нужно смотреть) AVReg-е нужно определить следующие настройки: «по-умолчанию для всех»:
text2img, brightness_control, motion_detector, recording - всё "Выкл."
В «по-умолчанию для всех» если используется один “серверный” (удалённый) AVReg или для каждой конкретной камеры если вы собираете видео с нескольких “серверных” (удалённых) AVReg-ов.
InetCam_IP = "IP адрес удалённого AVReg-а"
InetCam_http_port = "http_port удалённого AVReg-а"
InetCam_USER/InetCam_PASSWD - данные пользователя из группы "операторы"
на “серверном” AVReg-е,
лучше добавить нового отдельно пользователя
и затем для каждой конкретной камеры:
V.http_get = "/mjpg/video.cgi?camera={camera_num}[&fps={fps_desired}]",
где:
camera_num - номер камеры на “серверном” (удалённом) AVReg-е;
fps_desired - желаемый fps в кадрах в секунду (прим. реальный fps
будет зависеть в том числе и от ограничений fps
на “серверном” (удалённом) AVReg-е.
Для каждой камеры удалённого(ых) сервера(ов) AVReg в настройках камер локального AVReg (на котором вы хотите смотреть камеры в avreg-mon-e) нужно добавить камеру в конфигурацию и настроить её так как написано в разделе выше («> 32 или вынос просмотра на клиентские ПК»).
Управлять программой можно с помощью клавиатуры (или специальных урезанных клавиатур - numpad-ов) и/или манипулятора типа мышь.
Сокращения:
Управление кнопками мыши (только одиночные клики):
Управление нажатиями клавиш клавиатуры:
/*-+› на НумПаде -
изменить (перейти на другое) “выделенное”
окно;
.› на НумПаде –
пауза или стоп-кадр
(stop‹S›/play‹P›);
Для ограничения этого набора допустимых действий используйте параметры: «no-mouse», «no-keyboard», «no-tty», и «disable-keys», устанавливаемые в конфигурационном файле и/или в командной строке (описания см. выше).
Управлять некоторыми основными действиями avreg-mon (смена раскладок, разворот окна камеры на полный экран) можно посредством http запросов.