96 камер 640x480, 2-5 к/с. Схема на основе дисковых автономных видеорегистраторов.
Основа данного проекта (так сказать, некоторые исходные предпосылки для выбора такого решения).
Все или часть каналов арендуются у городских связистов.
Каналы либо низкоскоростные (ADSL например), либо по ним ещё что-то передается (городской интернет например). В любом случае, у нас нет отдельной оптики от центра до каждого объекта.
Видеокамер - пока 96.
На центральном пульте нужно записывать (понятно) и организовать непрерывный мониторинг всех объектов.
С целью экономии трафика не должно быть двух одинаковых сетевых потоков данных для просмотра каждой в/к.
Оконечные в/регистраторы должны быть необслуживаемые, но дисковые, для сохранения текущей видеоинформации при повреждениях на каналах связи.
Приоритет у нас - качество изображения. Поэтому разрешения меньше полного кадра 640х480 не рассматриваем.
Для тестирования решения в рамках пилотного проекта мы можем предоставить все компоненты программного обеспечения бесплатно на срок до 1 месяца.
1. Расчет потоков. Загрузка каналов.
От каждого удаленного в/регистратора мы имеем цифровой поток M-JPEG шириной по формуле:
ТРЕБУЕМАЯ ПОЛОСА(Mбит/с) = jpeg_size x chan_nr х chan_fps x Krealnet. x 8/1000000
jpeg_size - размер JPEG (в байтах);
chan_nr - кол-во каналов (камер);
chan_fps - макс скорость выдачи кадров в сеть (кадров в сек);
Krealnet - поправочный коэффициент для реальной сети;
8/1000000 - перевести в мегабиты.
Поправочный к/т Krealnet берем с запасом 1,5.
Средний размер JPEG-а 640х480 приличного качества принимаем равным 25 Kb. Предполагаем что камеры монохромные, что чаще и бывает на практике, так как они на порядок лучше видят в условиях ограниченного освещения (сумерки, искусственное освещение улиц и т.п.)
В результате требуемая полоса пропускания до каждого в/регистратора (макс суммарно 12 к/с) получается 3,6 Mbit/сек.
В любом случае, каждый канал LinuxDVR можно очень гибко настроить по размеру кадра, разрешению, компрессии (30 уровней) и скорости выдачи fsp.
На стороне сервера от 96 камер будет собираться поток в 87 Mбит/с (предполагаем средний fps=3 к/с от каждой камеры). C этим справится сетевой гигабитный адаптер.
Такой же поток будет транслироваться на рабочие места наблюдения через второй гигабитный адаптер сервера.
2. Удаленные видеорегистраторы.
2.1 Выбор оборудования.
Собственно сам автономный сетевой DVR:
Металлический корпус MOREX Cubid 2699RSW Mini-ITX с блоком питания.
Одноплатник VIA EPIA ML6000EA [VIA Eden 633MHz, VIA CLE266, fsb133, 1xDDR266, 1PCI, USB2.0, Video, 6ch Sound, Lan, 2xUDMA133, mITX].
Память RAM 256 Mb.
Винчестер 2'5 или 3'5.
4-х канальная плата видеозахвата на BT878.
Soft LinuxDVR - 700 руб за канал/камеру.
Источник бесперебойного питания UPS.
Металлический ящик для сохранения всего выше, по необходимости.
2.2 Настройка ПО.
Программное обеспечение настраивается и обновляется по сети (http,telnet,ftp).
Ключевые особенности настройки ПО.
Настройка захвата:
включаем только те камеры которые реально подключены
для всех камер
cam_type=v4l (аналоговый ввод через плату видеозахвата)
geometry=640x480
Настройка записи на HDD, для надежности у нас будет писаться и на по месту и на сервере:
запись по детектору motion_detector=Вкл плюс настройка детектора естественно;
формат записи file_fmt=MJPEG;
Трансляция в сеть, для каждой камеры нужно разрешить выдачу потока Motion Jpeg в сеть:
webcam_live=Вкл
wc_port=номер порта, на котором будет мини веб-сервер трансляции;
wc_motion=Вкл - если нужно для экономии трафика - передавать по сети только кадры с движением и дополнительно по одному кадру в сек.(чтобы не прерывался поток в периоды спокойствия, когда картинка в кадре не меняется);
Просмотр на локальном мониторе:
monitor_live=Выкл - не нужен так как нет монитора, несколько экономим ресурсы.;
В биосе не забываем включить автозагрузку после сбоя питания.
После аварийного отключения автоматически проверяются диски,
так что возможно загрузка после аварии будет длится несколько минут.
Не забываем включить синхронизацию времени c центральным сервером.
3. Центральный сервер.
3.1 Выбор оборудования.
Выбираем сервер:
CPU - некритично, можно однопроцессорный, так как обработки видео не будет (захват и трансляция по сети + запись на HDD).
Память RAM - 1Gb.
HDD - диски SATAII не менее 7200 rpm или дисковый RAID массив.
LAN - 2 гигабитных адаптера.
Софт LinuxDVR - 350 руб за канал (прим.: без детектора движения, он у нас на удаленных dvr).
Отдельная ремарка по емкости жесткого диска (или RAID-массива).
Все видеоданные, поступающие с удаленных DVR, сервер записывает на диск.
Максимальный поток записи рассчитывается по аналогичной формуле (см. выше расчет для сетевого канала, но без поправочного к-та) и составляет:
движение фиксируется по всем в/к
96в/к х 4 к/с x 25Kbyte х = ~ 10 Мбайт / сек или 36 Гб в час или 864 Гб в день.
движение нет по всем в/к, передается только 1 к/с
96в/к х 1 к/с x 25Kbyte х = ~ 2,4 Мбайт / сек или 8,6 Гб в час или 210 Гб в день.
Однако, на практике, значение будет где-то посередине, ближе к минимальному.
Совершенно понятно что большую глубину архива на сервере сложно обеспечить,
но на удаленных DVR глубина архива может составлять до нескольких месяцев
в зависимости от интенсивности движения и емкости HDD.
Использование конвертации в MPEG4 не будем использовать в этом решении, так как
межкадровый кодек MPEG4 эффективен на живом видео (от 15 к/с) при небольших изменениях в кадре (в этом решении передаются только кадры с движением и макс 5 к/с);
существенно возрастет нагрузка на CPU, что повлечет за собой значительно увеличение затрат на сервер или даже скорее всего не один.
3.2 Настройка ПО.
Ключевые особенности настройки ПО.
Настройка захвата:
для всех камер
cam_type=netcam (потоки MJPEG)
geometry=640x480
для каждой камеры
InetCam_URL=http://ip_адрес:port, где ip_адрес - адрес удаленного DVR и port - номер порта конкретной видеокамеры на DVR, см. параметр wc_port на DVR;
Настройка записи на HDD:
отключаем детектор motion_detector=Выкл (этим у нас CPU на каждом DVR занимаются);
формат записи file_fmt=MJPEG;
Трансляция в сеть на рабочие места наблюдения, для каждой камеры нужно разрешить выдачу потока Motion Jpeg в сеть:
webcam_live=Вкл
wc_port=номер порта, на котором будет мини веб-сервер трансляции;
Просмотр на локальном мониторе:
monitor_live=Выкл - не нужен, экономим ресурсы;
4. Рабочие места наблюдения.
4.1 Выбор оборудования.
Совершенно бюджетный компьютер, но с хорошим монитором 19 дюймов.
На каждом РМ одновременный просмотр до 16 в/к.
Для одного оператора это более чем достаточно.
4.2 Настройка ПО.
Ключевые особенности настройки ПО.
Настройка захвата:
для всех камер
cam_type=netcam (потоки MJPEG)
geometry=640x480
для каждой камеры (всего 16 на каждом РМ)
InetCam_URL=http://ip_адрес СЕРВЕРА:port, где port - параметр wc_port на СЕРВЕРЕ для конкреной в/к из 96;