Видеонаблюдение через интернет в веб-браузере

avreg-mon - локальный просмотрщик камер в реальном времени.

Настройки

v4loop

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

Читайте этот раздел если у вас:

  • более чем 16 камер;
  • демон avregd аварийно останавливается с ошибками «… 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 показывает ругачки на 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 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&param=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

База данных (веб-интерфейс)

В базе данных находятся настройки, определяющие:

  • привязки камер к выходным каналам video4linux демона avregd;
  • раскладки (layouts) - схемы расположения окон камер в главном окне программы.

Демон avregd

Чтобы обеспечить возможность локального просмотра в реальном времени, прежде всего, нужно настроить демон avregd.

Для каждой камеры, которую мы должны или хотим смотреть локально, должны быть правильно определены следующие параметры разделов «Наблюдение» и «Наблюдение→Локальное» демона avregd: «allow_local» и «v4l_pipe».

Если локальный просмотр на сервере не нужен, то установите значение «allow_local» как «Выкл.». Это сохранит ресурсы системы.

Раскладки.

Теперь вам, как администратору системы, нужно разместить камеры по окну просмотрщика. Такое размещение мы назвали раскладкой (layout).

Всего раскладок можно создать 20 штук: 10 для левого или единственного дисплея и 10 для правого дисплея. В каждой из раскладок может быть до 25 камер (включительно), однако, для двух-дисплейных систем максимальное количество (общее) отображаемых камер - 32.

Определяются раскладки через веб-интерфейс:
«Настройки и Управление» → «Настройки» → «Раскладки».

Раскладки для avreg-mon

Автозапуск

См. здесь.

Типовые конфигурации

Более 16 камер на одном ПК

На одном сервере/рабочей станции AVReg посредством avreg-mon можно просматривать максимум:

  • 40 камеры в одномониторной системе;
  • 80 камер - в системе с 2 дисплеями.

Однако, если у вас более чем 16 камер для просмотра avreg-mon-ом, то нужно увеличить количество виртуальных video4linux устройств, используемых для передачи видео в avreg-mon от avregd.

2 дисплея

(1) Задействовать оба дисплея.
(2) Создать в веб-интерфейсе две раскладки для левого и правого дисплеев, например по 16 камер на каждом (всего 32 камеры).
(3) Сделать 2 ярлыка или скрипта:

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


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

Если вы используете среду рабочего стола Gnome, то вы можете использовать наш враппер «/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-а.

В общем виде, 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) нужно добавить камеру в конфигурацию и настроить её так как написано в разделе выше («вынос просмотра на клиентские ПК»).

Управление

Интерактивное (мышь/клавиатура)

Управлять программой можно с помощью клавиатуры (или специальных урезанных клавиатур - numpad-ов) и/или манипулятора типа мышь.

Сокращения:

  • “кликнутое” окно - окно камеры, над которым находился курсор мыши в момент нажатия кнопки мыши;
  • “выделенное” окно - окно камеры, подсвеченное золотистой рамкой.

Управление кнопками мыши (только одиночные клики):

  • ‹ЛЕВАЯ› - “кликнутое” окно на весь экран (fullscreen) или обратно.
  • ‹ПРАВАЯ› - пауза или стоп-кадр для “выделенного” окна и обратно.

Управление нажатиями клавиш клавиатуры:

  • ‹F1› - показать/скрыть справку;
  • ‹стрелки› или /*-+ на НумПаде - изменить (перейти на другое) “выделенное” окно;
  • ‹F› или ‹Enter› – окно на весь экран (вкл./выкл.);
  • ‹LSHIFT›+‹RSHIFT›+‹F8› – сброс «тревог» на камерах;
  • ‹пробел› или . на НумПаде – пауза или стоп-кадр (stop‹S›/play‹P›);
  • ‹Esc›,‹Q›,‹X› – выход из программы;
  • ‹цифры 0-9› - переключение на раскладку с этим номером.

Для ограничения этого набора допустимых действий используйте параметры: «no-mouse», «no-keyboard», «no-tty», и «disable-keys», устанавливаемые в конфигурационном файле и/или в командной строке (описания см. выше).

Неинтерактивное (http)

Управлять некоторыми основными действиями avreg-mon (смена раскладок, разворот окна камеры на полный экран) можно посредством http запросов.

manual/tuning/avreg-mon.txt · Последние изменения: 2014-08-28