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

Конфигурация AVReg для распределения нагрузки по нескольким процессорам многопроцессорных систем или ядрам многоядерных процессоров (SMP).

Для чего нужно:

  • увеличить производительность системы (на многоядерных процессорах);
  • обеспечить просмотр более 6 камер последними версиями браузеров на основе Webkit (Google Chrome, Safari) и Gecko (Mozilla Firefox и клоны);
  • увеличить отказоустойчивость многокамерной системы в целом.

Реализованный в AVReg способ распределения нагрузки на разные процессоры/ядра (далее cpu) называется «на уровне процессов» (прим: другой возможный способ - «на уровне потоков»).

Он заключается в запуске на одном сервере нескольких независимых копий процесса avregd, каждый из которых настройками в дополнительных конфигурационных файлах - профилях:

  1. «обслуживает» свою группу камер.
  2. опционально может быть «привязан» к определённому cpu (если определён соотв. параметр, иначе - планировщик ядра linux самостоятельно решит этот вопрос);

Основные достоинства данного способа вытекают из независимости процессов avregd друг от друга, что позволяет иметь/делать нижеследующие вещи:

  1. критический сбой одного процесса (читай группы камер) никак не влияет на работу других;
  2. независимое управление (start/stop/restart/reload) процессов (групп камер).

Настройки.

Помимо основного и единственного конфигурационного файла 'avreg.conf', для всех приложений AVReg существует возможность определения дополнительных конфигурационных файлов - профилей.

Профили нужно разместить в каталоге «/etc/avreg/profiles».

Имя файла профиля должно соответствовать следующим правилам:

  1. первая буква должна быть из диапазона [A-Za-z0-9];
  2. следующие буквы - [A-Za-z0-9-_.];
  3. длина имени - не более 55 знаков, рекомендуем не более 10.

Совет: легко выключать профиль без удаления файла, добавив в начало его имени неразрешённый знак, например, добавить в конец имени профиля символ «~».

Начать нужно с определения групп камер. Мы рекомендуем разделить конфигурацию на группы по 5 камер на процесс (профиль), но не более чем x2 от общего количества процессорных ядер в системе. Причём, все потоки физической камеры рекомендовано объединить под одним профилем.

Для пояснения, рассмотрим оптимальный (эталонный) пример:

  • 6 ядерный процессор;
  • 30 мультипоточных камер;
  • в AVReg-е настроено 60 камер (по 2 потока с каждой физической ip-камеры);

Размер группы выбираем 10 камер в конфигурации AVReg (= 5 физических камер).

Для создания конфигов профилей воспользуемся скриптом помощником avreg-profile-gen.sh (v6.3+), для более ранних систем воспользуйтесь текстовым редактором.

# создаём _пустой_ временный каталог
$ mkdir /tmp/avreg-profiles.d/
 
# запусукаем генератор профилей для 60 камер макс. по 10 камер в группе.
$ avreg-profile-gen.sh -c 60 -g 10 /tmp/avreg-profiles.d/
 
# смотрим что получилось
$ ls/tmp/avreg-profiles.d/
c01-10  c11-20  c21-30  c31-40  c41-50  c51-60
 
# что в самих файлах
$ cat /tmp/avreg-profiles.d/c51-60
devlist = 51 - 60
 
avregd {
    http-port = 879
    rtsp-port = 8579
}
 
avreg-site {
    avregd-httpd = 'http://$_SERVER[SERVER_NAME]:879'
}
 
# копируем профили в целевой каталог
$ sudo cp /tmp/avreg-profiles.d/* /etc/avreg/profiles/
 
# если вы копировали по ssh, проверьте правах доступа на целевые файлы
$ sudo chown root:root /etc/avreg/profiles/*
$ sudo chmod 0644 /etc/avreg/profiles/*
Перед созданием и/или изменением конфигов профилей обязательно остановите программу avreg:
$ sudo avreg-service avreg stop

А в случае использования systemd в качестве системного init, после изменения необходимо выполнить:

$ sudo systemctl daemon-reload 

Управление демонами профилей.

С терминала:

# все сразу
$ sudo avreg-service команда
 
# только один конкретный
$ sudo avreg-service команда имя_профиля
 
# команда: start|stop|restart|reload|status

С веб-интерфейса: перейдите на страницу «Управление» наздела «Настройка и управление»

Неразделяемые ресурсы

Так как настройки камер для всех процессов avregd находятся в единой базе данных, то возможны некоторые неприятные коллизии, связанные с невозможностью разделения (sharing) некоторых устройств/ресурсов.

Некоторые из этих коллизий контролируются по старту демонов и, если возникло недопустимое пересечение, демон avregd завершает работу с сообщением об ошибке.

Например, если несколько профилей пересекаются по номерам камер:

% sudo service avreg start
Starting AVReg surveillance system server:  avregd-cams1[9916] started;
ERROR: cam[01] locked another proc avregd-cams1[9916], lock file `/var/lock/avreg/DB:avreg5_db..cam01'
avregd-5.1.2 error starup. See syslog for detail.
avregd-cpu1-cams2 failed;  failed!

Смотрим системный журнал:

% sudo tail -n 50 /var/log/daemon.log 
...
Apr  5 18:08:21 host19 avregd-cams2: cam[01] locked another proc avregd-cams1[9916], lock file `/var/lock/avreg/DB:avreg5_db..cam01'
# вольный перевод: cam[1] заблокирована другим процессом avregd-cams1[9916], лок-файл `/var/lock/avreg/DB:avreg5_db..cam01'
...
Apr  5 18:08:21 host19 avregd-cams2: CLEANUP(0): videoserv terminated

Перечислим такие «уникальные» для всей системы ресурсы:

  • номер камеры - группы камер в профилях (параметр devlist) не должны пересекаться, контролируется;
  • захват:
    • videodev - номер устройства видеозахвата, контролируется
    • InetCam_IP/InetCam_http_port - адрес и порт сетевой камеры, не контролируется;
  • запись на диск:
    • storage-dir - каталог с медиа-архивом (только для 6.2 и более ранних версий),
  • наблюдение:
    • v4l_pipe - имя устройства для трансляции видео (локальный просмотр), контролируется;
    • http-port - номер порта http-сервера (указывается в avreg.conf или профилях), с которого обеспечивается трансляция видео по сети.

Ссылки по теме.

manual/applications/smp.txt · Последние изменения: 2018-09-24