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

Мультипоточные ip-камеры: оптимальная конфигурация.

Исходные условия:

  • AVReg не ниже 6 версии ( avreg-site >= 6.1p1 ),
  • ip-камеры, позволяющие одновременно раздавать 2-х (dual stream) или более медиа-потоков

с различными характеристиками (разрешение, fps, битрейт, …).

Задачи

  1. в записи обеспечить максимальное разрешение, качество и скорость в кадрах в секунды (framerate),
  2. снизить требование к аппаратному обеспечению сервера (CPU) или увеличить камерную ёмкость сервера,
  3. снизить требования к аппаратному обеспечению клиента наблюдения (процессор, видеокарта, разрешение экрана, в том числе табы, пады и смартфоны).

Теория

Необходимо «забирать» в аврег сразу 2 видеопотока с камеры:

  1. rtsp/h264 высокого разрешения и фреймрейта (fps), основная задача для записи, желательно rtsp/h264.
  2. mjpeg или h264 (любым протоколом) низкого или среднего разрешения (320×240 или 640х480) и с небольшим фреймрейтом (5-15 fps), основная задача наблюдение в раскладке, совместно с другими камерами.

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

Практика

В любом случае, в настройках AVReg создаёте 2 камеры на на одну физическую.

В плане лицензирования по условиям коммерческой лицензии - оплачивается только 1 камеры, та на которой включена запись.

Без декодирования (min %CPU)

Если

  1. IP-камер-а умеет отдавать MJPEG (дополнительно к h264);
  2. запись сплошная, а не по детектору движения;
  3. не предусмотрено локального просмотра программой avreg-mon непосредственно прямо на сервере.

можно настоить систему для минимального использования процессора(ов).

1-й поток (высокое разрешение, только запись)
* Захват:
    video_src = "rtsp" (audio_src - "по вкусу")
    decode_video = "Выкл."
    decode_audio = "Выкл." (если с камеры MPEG4 AAC) или "Вкл."
* Обработка:
    * видео:
        motion_detector = "Выкл."
        text2img = "Выкл."
        brightness_control = "Выкл."
* Запись:
    rec_mode = "Всё подряд"
* Наблюдение:
    allow_local = "Выкл."
    allow_networks = "Вкл."
2-й поток (низкого разрешения, только просмотр)
* Захват:
    video_src = "rtsp" (или "http", смотря чем MJPEG раздаётся с камеры)
    audio_src = "пусто" (не нужно)
    decode_video = "Выкл."
* Обработка:
  * видео:
      motion_detector = "Выкл."
      text2img = "Выкл."
      brightness_control = "Выкл."
* Запись:
    rec_mode = "Выкл." (!!! вот это оч. важно не забыть)
* Наблюдение:
    allow_local = "Выкл."
    allow_networks = "Вкл."
  * "по сети"
       fs_url_alt_1 = "{cam_nr_1}:avregd:http:hls"
                      ({cam_nr_1} - заменить на номер камеры 1-го потока)
       fs_url_alt_2 = "{cam_nr_1}:camera:rtsp"

Частичное декодирование

Данная конфигурация достигает следующие задачи:

  1. запись по детектору движения;
  2. возможность просмотра со сниженной скоростью (частотой кадров) первого потока высокого разрешения:
    • MJPEG-ом по сети (браузерами без плагинов и т.п.),
    • video4linux - avreg-mon-ом на сервере.
1-й поток (высокое разрешение)
* Захват:
    video_src = "rtsp" (audio_src - "по вкусу")
    decode_video = "только I-фреймы"
    decode_audio = "Выкл." (если с камеры MPEG4 AAC) или "Вкл."
* Обработка:
    * видео:
        motion_detector = "Выкл."
        text2img = "Выкл."
        brightness_control = "Выкл."
* Запись:
    rec_mode = "Выборочно"
* Наблюдение:
    allow_local = "Выкл." (если не используется avreg-mon)
    allow_networks = "Вкл."
2-й поток (низкого разрешения, просмотр + детектор)
* Захват:
    video_src = "rtsp" или "http" (для сокращения %CPU желательно забирать MJPEG)
    audio_src = "пусто" (не нужно)
    decode_video = "Вкл." или один из вариантов с "I-frame"
* Обработка:
  * видео:
      motion_detector = "Вкл." (детектор будет командовать записью 1-го потока)
    * "детектор движения":
        rec_target = {cam_nr_1} (номер камеры первого потока)
* Запись:
    rec_mode = "Выкл." (!!! вот это оч. важно не забыть)
* Наблюдение:
    allow_local = "Выкл." (если не используется avreg-mon)
    allow_networks = "Вкл."
  * "по сети"
       fs_url_alt_1 = "{cam_nr_1}:avregd:http:mjpeg" или "{cam_nr_1}:avregd:http:hls"
                      ({cam_nr_1} - заменить на номер камеры 1-го потока)
       fs_url_alt_2 = "{cam_nr_1}:camera:rtsp"
Пояснения по организации наблюдения в реальном времени веб-браузерами:
При создании раскладок просмотра рекомендуем использовать только камеры второго потока (низкого разрешения).

Для переключения видео на 1-й поток высокого разрешения при просмотре * одной камеры в режиме Fullscreen существуют 3 варианта, про которые ниже.

1 http/mjpeg видео с сервера AVReg - для этого, создайте и/или измените веб-раскладку и при определении камеры (2-го потока!!!) укажите «alt 1» в качестве набора источников видео.

MJPEG будет высокого разрешения, но сниженного фреймрейта (fps), равного частоте повторения ключевых кадров (I-frame) в исходном потоке с камеры (определяется настройками камеры, можен называться по разному GOV/GOP length/size, I-frame интервал и т.п; мы рекомендуем 1 или 2 ключевых кадра каждую секунду).

пояснения по струкнуре потоков h264 и mjpg

  h264: I P P P P P P P P P P P I P P P P P P P P P P P I P P ...
        ^                       ^                       ^
        GOV-length = 12, при фреймрейте 24 fps в каждой секунде будет 2
        ключевых кадра.

  mjpg: I I I I I ....

2 http/HLS видео с сервера AVReg - для этого, создайте и/или измените веб-раскладку и при определении камеры (2-го потока!!!) укажите «alt 1» в качестве набора источников видео.

3 rtsp/h264 напрямую с камеры - выбирайте «alt 2».

Минусами такого варианта раскладки является то, что он подойдёт только для пользователей декстопов (т.к. нужен плагин VLC) и внутри «локалки» (т.к. подразумевает прямое подключение к камере с компьютера клиента).

Плюсами являются просмотр с высоким фреймрейтом (будете наблюдать такой же поток, какой и для записи) и, возможно, со звуком.

manual/applications/multi-stream.txt · Последние изменения: 2015-10-08