Модуль ядра 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 запросов.