Модуль ядра 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
или перегрузить компьютер.
Возможные проблемы и их решения:
☹ Ядру не хватает памяти для загрузки или нормальной работы модуля 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 {
### Настройки локального просмотрщика камер в реальном времени ###
### версия 6.3 ###
# Устанавливайте имя "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", т.е. использовать для всех камер, кроме
# "fullscreen" камеры, соотношение строн как у камеры в главном окне раскладки.
; keep-aspect = yes
# Использовать заданные пропорции для всех камер. Не действует если установлено
# "fit2screen=yes". По умолчанию: "no", т.е. использовать для всех камер соотношение
# строн как у камеры в главном окне раскладки.
; force-aspect = 16:9
# Использовать целочисленные коэффициенты масштабирования (..., 1/3, 1/2, 1, 2, ...)
# при выводе изображения для снижения нагрузки на Intel-процессоры при программном
# видеовыводе. По умолчанию: no.
; smart-scale = yes
# Ширины TB,LR рамки окон камер в пикселях: T(op)B(ottom),L(eft)R(ight).
# По умолчанию: вычисляется автоматически в зависимости от размера окна программы.
; border-size = 5,4
# Масштаб размера гарнитуры шрифта накладываемых на видео текстовых сообщений.
# По умолчанию: 1.0
; font-factor = 1.3
### Настройки интерфейса пользователя ###
# Заблокировать (не использовать) мышь, клавиатуру или оба устройства.
# Следуем также установить в "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 завершит работу с сообщением об ошибке. По умолчанию: 1 сек.
; reconnect-timeout = 0.5
# Таймаут выдачи предупредительного сигнала "НЕТ СИГНАЛА" в сек. По умолчанию: 4 сек.
; no-signal = 4
# Таймаут (в сек.) отображения камеры, выдвинутой (действиями оператора)
# на передний план и распахнутой во весь экран или окно приложения.
# По умолчанию: 300 сек. 0 - не выходить автоматически из такого режима.
; fs-timeout = 300
# Таймаут отображения названия камеры крупным шрифтом в сек.
# Если 0 - отображать название камер постоянно. По умолчанию: 6 сек.
; camname-timeout = 6
# Таймаут отображения курсора в сек. Если 0 - не скрывать курсор. По умолчанию: 4 сек.
; cursor-timeout = 4
### Gstreamer-специфичные настройки видео захвата ###
# Для video4linux2 медиа устройств (Наблюдение -> локальное -> v4l-pipe).
# Поддерживаются некоторые опции элемента "v4l2src" (см. gst-inspect-1.0 v4l2src).
# По-умолчанию: "io-mode=rw".
; gst-v4l2psrc-opts = "io-mode=auto do-timestamp=true"
# Для RTSP сетевых медиа потоков (Наблюдение -> локальное -> mon_fs_uri).
# Поддерживаются некоторые опции элемента "rtspsrc" (см. gst-inspect-1.0 rtspsrc).
# По-умолчанию: "latency=100 timeout=3000000 tcp-timeout=5000000".
; gst-rtspsrc-opts = "latency=200 timeout=3000000 tcp-timeout=5000000 udp-buffer-size=1000000"
### Настройки удалённого управления ###
# Разрешить удалённое управление согласно "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) в правом верхнем углу окна соотв. камеры.
# По умолчанию: <пусто> - не отображать сообщения тревог.
; alarm-msgs = ' были тревоги ; ВСКРЫТ КОРПУС ; РАЗРЯД БАТАРЕИ '
### Специфические настройки видеовывода. ###
### Предупреждение: установка этих параметров может значительно увеличить нагрузку ###
### на систему, несмотря на кажущуюся пользу от включения некоторых режимов. ###
# Общий ограничитель скорости отрисовки видео (framerate) в кадрах в сек (fps).
# Допустимые значения: [1..60], по-умолчанию: 30.
; framerate = 15
# Попытаться создавать графические элементы прямо в видео-памяти видеокарты.
; hw-surface = yes
# Выводить YUV оверлеи прямо в видео-память видеокарты, если возможно.
; yuv-direct = yes
# Использовать аппаратное YUV ускорение видеовывода, если возможно.
; yuv-hwaccel = yes
# Использовать IYUV оверлей вместо YV12 (по умолчанию).
; iyuv = yes
# Попытаться использовать режим с двойными аппаратными видеобуферами.
; doublebuf = yes
# Включает асинхронное обновление экрана. Обычно _замедляет_ работу на
# однопроцессорных системах, но _может_ ускорить видеовывод на
# многопроцессорных SMP системах. По умолчанию: no
; asyncblit = yes
### Другие опции ###
# Каталог для сохранения снимков окна выбранной камеры (F2) и всей раскладки (SHIFT+F2).
# По-умолчанию: XDG-USER-DIR(1) PICRURES каталог.
; shot-dir = /home/share-screenshot-dir
}
...
Эти параметры также доступны с командной строки, см:
avreg-mon --help
В базе данных находятся настройки, определяющие:
Чтобы обеспечить возможность локального просмотра в реальном времени, прежде всего, нужно настроить демон avregd.
Для каждой камеры, которую мы должны или хотим смотреть локально, должны быть правильно определены следующие параметры разделов «Наблюдение» и «Наблюдение→Локальное» демона avregd: «allow_local», «v4l_pipe».
Дополнительно, вы можете ограничить фреймрейм видео параметрами «v4l_pipe_maxrate» и «v4l_pipe_nonmotion_maxrate».
Начиная с версии 6.3, при переключении окна камеры в режим fullscreen-режима (одна камера во весь экран) возможно переключение на RTSP URL и проигрывание H264 видео. Для этого нужно записать RTSP URL в значение параметра «mon_fs_uri».
Теперь вам, как администратору системы, нужно разместить камеры по окну просмотрщика. Такое размещение мы назвали раскладкой (layout).
Всего раскладок можно создать 20 штук: 10 для левого или единственного дисплея и 10 для правого дисплея. В каждой из раскладок может быть до 25 камер (включительно), однако, для двух-дисплейных систем максимальное количество (общее) отображаемых камер - 32.
Определяются раскладки через веб-интерфейс:
«Настройки и Управление» → «Настройки» → «Раскладки».
См. здесь.
На одном сервере/рабочей станции AVReg посредством
avreg-mon можно просматривать максимум:
Однако, если у вас более чем 16 камер для просмотра
avreg-mon-ом, то нужно увеличить количество
виртуальных video4linux устройств, используемых для передачи
видео в avreg-mon от avregd.
✔ (1) Задействовать оба
дисплея.
✔ (2) Создать в веб-интерфейсе две раскладки для
левого и правого дисплеев, например по 16 камер на каждом (всего 32
камеры).
✔ (3) Сделать 2 ярлыка или скрипта:
avreg-mon --display=left avreg-mon --display=right
✔ (4) Настроить автоматическое позиционирование
окон avreg-mon (левого и правого), чтобы они не перекрывались друг
с другом (делается средствами DE или утилитами, типа
wmctrl).
/usr/bin/avreg-mon-2display»
(«avreg-mon-2display left» и «avreg-mon-2display
right») для автопозиционирования двух окон avreg-mon по
“своим” дисплеям. Читайте также про отключение функций
и возможностей рабочего стола Gnome.Если нужно “вынести” задачу наблюдения с сервера на клиентские ПК (рабочие места операторов), то придётся использовать дополнительный ПК, на котором должен быть установлен AVReg отключёнными записью на диск и детектором движения (т.е. “клиентский” AVReg только для просмотр avreg-mon-ом). Таких ПК может быть сколько угодно.
Видеопотоки AVReg может получать как с реальных видеокамер, так и с других AVReg-ов.
Рассмотрим настройки камеры “клиентского” (локального, на котором смотрим) AVReg-а для захвата видео (и просмотра) c камеры “серверного” (удалённого) AVReg-а.
Прежде всего, на “клиентском” (локальном, где нужно смотреть) AVReg-е нужно определить следующие настройки: «по-умолчанию для всех»:
text2img, brightness_control, motion_detector, recording - всё "Выкл."
Затем, нужно настроить параметры захвата каждой камеры клиентского AVReg, используя доступные медиа-потоки серверного AVReg-а:
Для каждой камеры удалённого(ых) сервера(ов) AVReg в настройках камер локального AVReg (на котором вы хотите смотреть камеры в avreg-mon-e) нужно добавить камеру в конфигурацию и настроить её так как написано в разделе выше («вынос просмотра на клиентские ПК»).
Управлять программой можно с помощью клавиатуры (или специальных урезанных клавиатур - numpad-ов) и/или манипулятора типа мышь.
Сокращения:
Управление кнопками мыши (только одиночные клики):
Управление нажатиями клавиш клавиатуры:
/*-+› на НумПаде - изменить (перейти
на другое) “выделенное” окно;.› на НумПаде – пауза или стоп-кадр
(stop‹S›/play‹P›);Для ограничения этого набора допустимых действий используйте параметры: «no-mouse», «no-keyboard», «no-tty», и «disable-keys», устанавливаемые в конфигурационном файле и/или в командной строке (описания см. выше).
Управлять некоторыми основными действиями avreg-mon (смена раскладок, разворот окна камеры на полный экран) можно посредством http запросов.