Сервер видеонаблюдения на linux своими руками

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

На сегодняшний день охранные системы различного типа устанавливаются повсеместно. Чаще всего для обеспечения надлежащего уровня безопасности используются системы видеонаблюдения. Все линии видеоконтроля условно делятся на два вида: системы, построенные на основе видеорегистратора, и комплексы, работающие на базе компьютера. Первые устройства видеоконтроля по своей комплектации и функциональности считаются лучше вторых. В последнее время широкое применение получило видеонаблюдение в Linux.

Организовать линию наблюдения можно при помощи разнообразных операционных систем. Наиболее выгодной является ОС Linux, поскольку отсутствует необходимость в приобретении лицензии на каждый компьютер и сервер в отдельности. Многие программные модули этой операционной системы распространяются бесплатно. К их числу можно отнести программы ZoneMinder, Motion, LinuxDVR.

Виды программ, используемых для создания видеонаблюдения в конкретной операционной системе

IP видеонаблюдение сегодня получило широкое применение. Установка современных схем видеоконтроля позволяет управлять ими удаленным способом и просматривать необходимую видеоинформацию в режиме онлайн. Интересные предложения комплексов видеоконтроля есть в различных операционных системах. Линукс предлагает ряд программных модулей для организации видеонаблюдения:

  • AVReg;
  • ZoneMinder;
  • NetAvis Observer;
  • Motion.

Программный модуль AVReg представляет собой вид обеспечения, который позволяет создавать видеорегистраторы на базе персональных компьютеров с ОС Линукс. Указанный модуль имеет не совсем свободное лицензирование, однако использовать его в некоммерческих целях вполне реально. Его функционального набора достаточно для создания эффективной линии видеоконтроля в доме или квартире. Преимуществом такого модуля является то, что вся документация и меню настроек выполнены на русском языке.

система наблюдения

ZoneMinder и NetAvis Observer являются более профессиональными системами. Правда, на сегодняшний день они получили недостаточное распространение ввиду того, что все сопровождение и документация выполняются на английском языке. Motion является наиболее распространенным программным модулем. Для построения системы видеонаблюдения на основе этой программы необходимо использовать следующее оборудование:

  • Домашний сервер (персональный компьютер или ноутбук);
  • Операционную систему Linux;
  • Программу;
  • Web-камеры или профессиональные камеры.

Рекомендации специалистов относительно выбора программного модуля

В качестве программного модуля для организации линии видеоконтроля специалисты рекомендуют выбирать программу Motion. Она без проблем работает в Линуксе и является консольной. Любая версия программы обладает встроенным веб-сервисом, при помощи которого по запрограммированному порту выводится поток видеоинформации с принимающего устройства (IP камеры). Вся видеоинформация по потоку имеет формат MJPEG.

Программа Motion имеет встроенную линию регистрации движения. Ее наличие позволяет записывать не всю поступающую информацию круглосуточно. Запись видеоизображений производится в момент фиксирования движения в поле зрения видеокамеры.

Такая возможность системы обеспечивает экономию места на жестком диске и увеличивает продолжительность времени записи. Эту опцию можно и отключить.

Также программный модуль Motion является очень простым в настройке и использовании. Но для обеспечения эффективной и полноценной работы системы видеонаблюдения, совмещенной с операционной системой Линукс, требуются определенные знания. Для упрощения процедуры управления программой специалисты рекомендуют использовать новое программное совмещение Motion и HTML. Благодаря набору манипуляционных операций возможно создать очень удобный интерфейс программы для пользователя. Созданная система такого типа может в последующем расширяться.

На видео – о системах Linux:

Установка и настройка программного модуля Ivideon для создания видеонаблюдения

Сам по себе программный модуль Ivideon состоит из двух отделов, а именно: Ivideon Client и Ivideon Server. Серверная часть программы устанавливается на персональный компьютер. Сервер принимает весь поток видеоинформации, получаемый с камер, и сохраняет ее на жесткий диск устройства.

установка программы

Сервер позволяет осуществлять видеонаблюдение без привязки к статическому адресу посредством мировой паутины.

Программа Ivideon поддерживает работу в операционной системе Linux, а именно: Ubuntu Desktop 12.04 LTS. Эта версия программы является новейшим выпуском. В ней содержатся самые свежие обновления и исправления системных ошибок. Системные требования операционной системы Линукс гораздо ниже, чем в других ОС. Поэтому при подключении нетбука в качестве сервера можно создать неограниченную линию видеоконтроля.

видеоконтроль

Специалисты рекомендуют не использовать нетбук в качестве сервера для работы с линией видеонаблюдения, включающей в себя более одной камеры. Поскольку одно устройство, которое функционирует в режиме Full HD, сильно перегружает работу оборудования с одноядерным процессором.

После переезда в новый офис, дабы не расслаблять сотрудников, было решено установить систему видеонаблюдения. Но, как обычно, основным условием было: дешево и сердито :) После обдумывания и подсчетов было решено остановиться на следующем: IP-камеры и компьютер в качестве регистратора.

Итак, у нас были IP камеры, компьютер в качестве регистратора, motion в качестве софта и желание подружить весь этот колхоз. И что же умеет motion из того, что нам надо? :)

  1. Работа с камерами, подключенными через карты захвата либо с IP камерами.
  2. Выполнять скрипты при наступлении и окончании события.

Ну чтож, приступим. Для начала попробуем с одной камерой. Устанавливаем motion.

1. закомментируем строчку

2. в строке netcam_url прописываем URL для доступа к нашей камере. Мы использовали IP камеры Axis, модель 207 (со встроенным микрофоном).

Для нашего случая выглядело так:

где camera_ip — IP адрес камеры.

3. далее находим строку target_dir — здесь указываем путь к папке, где будемхранить данные с камеры.

4. а теперь начинается самое интересное. Находим строку on_event_start . Здесь мы прописываем команду, которая будет выполняться при наступлении события, то есть при движении. Что нам это дает? А дает нам это то, что мы не будем постояно вести запись, а только по необходимости — есть движение, идет запись, закончилось, остановились и мы. Таким образом получается экономия. Для сравнения — у нас ведется запись с 10 камер — цветная картинка 640х480 со звуком, записи хранятся 21 день и все это дело занимает на диске в среднем 135GB, а всесте с фото, которые делает motion около 200 GB.

5. следующая строка: on_event_end — это для команды, отрабатывающей по окончанию события.

webcam_port и control_port

Для примера: для первой камеры ставим значения

webcam_port 8081
control_port 8080
для второй
webcam_port 8083
control_port 8082
и так далее.

Это в принципе основные изменения. Думаю при внимательном прочтении конфига вы сами найдете нужные вам параметры, так как там все довольно хорошо задокументировано.

Теперь вернемся к скриптам, которые отрабатывают при начале и окончании события. Так как нам надо писать видео с камеры, то для этого я использовал mencoder. В папке /root/bin/ создаем скрипты recordstart.sh и recordstop.sh , которые будут запускаться при наступлеии и окончании события соответсвенно. Давайте заглянем внутрь recordstart.sh :

if [ "$1" -eq 218 ]
then
`/usr/bin/mencoder -ovc copy -oac pcm -delay 1.5 -mc 10 -o
/video/motion/$2/$FILENAME rtsp://192.168.95.218/mpeg4/media.amp > /dev/null`
elif [ "$1" -eq 219 ]
then
`/usr/bin/mencoder -ovc copy -oac pcm -delay 1.5 -mc 10 -o
/video/motion/$2/$FILENAME rtsp://192.168.95.219/mpeg4/media.amp > /dev/null`
else
`/usr/bin/mencoder -ovc copy -oac pcm -mc 10 -o /video/motion/$2/$FILENAME
rtsp://192.168.95.$1/mpeg4/media.amp > /dev/null`
fi

Скрипт принимает два параметра:

1 — имя камеры, хотя имя не совсем верно, так как это последний октет из IP адреса камеры. То есть, как в нашем случае (мы используем 95 подсеть — 192.168.95.0/24 ). Таким образом, при передаче значения 211 — будет ясно, что хотим обратиться к камере с IP 192.168.95.211
2 — директория, где будет храниться записанный файл. Сделано для того, чтобы легче было искать. Опять же в нашем случае: имеется папка /video/motion в которой хранятся записи, но для того, чтобы не мешать все в кучу, она содержит поддиректории зон: kuhnya , balkon и т.д. Значит при передаче значения balcon — запись будеть производиться в директорию /video/motion/balkon .

Итак, при вызове скрипта в виде /root/bin/recordstart.sh 211 balkon — скрипт будет писать с камеры с IP 192.168.95.211 в директорию /video/motion/balkon . Надеюсь тут все более-неменее ясно.

Как видно, вначале мы генерируем уникальное имя для файла, в который будем писать, которое состоит из следующих частей:

  • start — номер камеры, вернее последний октет из ее IP с предшествующим ей cam.
  • dt — текущая дата в формате ГГГГММДДччммсс.

Небольшое пояснение: так уж оказалось, что у нас разные модели камер, которые предоставляют разные способы доступа к потоку видео данных, из-за этого пришлось ввести в скрипте проверки.

Теперь пройдемся по mencoder-у:

  • -ovc copy — означает, что видеоряд копируем, так как с камеры сразу идет в mpeg4
  • -oac pcm — какой кодек использовать для звуковой дорожки, если камера позволяет писать звук.
  • -mc 10 — Максимальная величина корректировки A-V синхронизации на один кадр (в секундах)
  • -delay 1.5 — Задержка в мс, которая должна вноситься в каждый канал

Если у вас проблемы с синхронизацией видео и звукового ряда, тогда надо менять значения для последних двух параметров — mc и delay. Для теста можно использовать mplayer.

Ну вот, теперь при наступлении события, мы можем запускать данный скрипт. Таким образом в конфиге для motion для нашей камеры прописываем в строке on_event_start что-то похожее:

on_event_start "/root/bin/recordstart.sh 210 koridor1"

И он начнет писать. Но ведь это все еще надо остановить. Для этого используем второй скрипт /root/bin/recordstop.sh.

Скрипт принимает один параметр — все тот же последний октет из IP адреса камеры.

Соответсвенно в строке on_event_end файла конфигурации прописываем что-то вроде:

on_event_end "/root/bin/recordstop.sh 210"Ну вот примерно и все, что касается конфигурации.

Теперь перейдем к рутинным операциям. У меня используются две, которые отрабатывают по крону.

  1. Удаляет устаревшие файлы, которые страрше 21 дня.
  2. Объединяет все файлы за день в один.

Рассмотрим скрипт для чистки. У меня он располагается в директории /root/sbin и, для того, чтобы враги не догадались, называется clean.sh

/bin/find /video/balkon -name "*.*" -mtime +21 -delete
/bin/find /video/motion/balkon -name "*.*" -mtime +21 -delete

В первой директории хранятся фотографии, сделанные motion — это параметр из файла конфигурации в строке target_dir. Вторая директория — куда пишется видео, запущенное из скрипта recordstart.sh

А вот второй скрипт посложнее.

workDir = '/video/motion/'
dirs = os.listdir(workDir)
oldDate = summaryFile = summaryFileTmp = ''
for dir in dirs:
filesList = os.listdir(workDir + dir)
filesList.sort()

for file in filesList:
tmpN = file.split('.')
nm = tmpN[0]
tmpN = nm.split('-')
if tmpN[0] != 'S':
nm = tmpN[1]
year = nm[0:4]
month = nm[4:6]
day = nm[6:8]
date = year + month + day

if oldDate != date:
summaryFile = workDir + dir + '/S-' + tmpN[0] + '-' + year +month + day + '.avi'
summaryFileTmp = workDir + dir + '/S-' + tmpN[0] + '-' + year +month + day + '-tmp.avi'

Это для объединения коротких роликов за день в один суммарный. (Для тех кто не в курсе — он на питоне). Единственное, что нужно менять — это переменная workDir — путь, куда mencoder пишет свои файлы, все из того же recordstart.sh

Прописываем их в крон на выполнение раз в сутки, желательно ночью, пока карета не превратится в тыкву :)

Запускаем motion следующим образом:

motion -c /path/to/config/file

/path/to/config/file — путь к нашему файлу с конфигом :)

А далее запускаем их при загрузке системы.

Ну вот наверное и все. Если будут вопросы — задавайте.

UPD: будьте внимательны с скриптом на питоне, так как сбилась вся табуляция, что для него очень критично.

LinuxDVR — программа для видеонаблюдения под Linux, скачать, инструкция по настройкам

Основные возможности и характеристики ПО LinuxDVR.

Основные преимущества.

Специальный дистрибутив Linux (около 17 Mb) на базе ядра 2.4 обеспечивает:

Простота и скорость расширения системы.

Как правило подобные системы включают аппаратных ключ защиты — HASP LPT или USB ключ.

Это значит, что если Вы хотите подключить дополнительные видеокамеры, то Вам после оплаты придется обмениваться ключами с производителем по почте или др. способом. Т.е. ждать.

Наш ключ защиты — программный. Заплатили за расширение тут же получили файл ключа по электронной почте и легко установили в работающую систему систему.

Поддержка недорогих и распространенных плат видеозахвата и TV-тюнеров.

Карты видеозахвата для подключения обычных в/к с композитным видеовыходом выбирались нами по принципу цены и доступности на рынке. Есть модели, которые можно заказать в ближайших компьютерных магазинах Вашего города.

Поддержка вебкамер и наблюдение через интернет.

Наблюдение с использованием web-камер распространяется пропорционально развитию компьютерных сетей и интернет и, без сомнения, в недалеком будущем станет преобладать над традиционным аналоговым.

Поэтому LinuxDVR работает с большим кол-вом моделей интернет камер и видеосерверов (видеошлюзов).

100% управление через Web-интерфейс.

Все функции системы в том числе и основные: наблюдение, управление, настройка и просмотр архива имеют веб-интерфейс.

Т.е. возможно создание автономных безмониторных видеорегистраторов для работы с которыми Вам нужен только Ваш любимый ПК и веб-браузер (Microsoft Internet Explorer v5.5 и выше, Mozilla Firefox, Mozilla, Netscape Navigator).

Доступ по имени и паролю с разрешенных компьютеров. Групп пользователей — 4 (инсталляторы, администраторы, операторы архива, операторы наблюдения).

Количество пользователей программно не ограничено.

Такой принцип взаимодействия ПО позволяет организовывать безголовые (безмониторные) автономные видеорегистраторы и удаленные системы наблюдения.

Инструкция по рабьоте с программой LinuxDVR

По умолчанию, после установки системы, в базе настроены только 4 в/к — 4 канала на одной одночиповой (BT878) 4-x канальной плате видеозахвата. То есть, при установке, мастер установки LinuxDVR может найти все устройства (платы) видеоввода, но в конфигурации (базе) все равно будет определены 4 в/к, так как это написано выше.

Для того, чтобы работать с большим кол-вом в/к — нужно:

Где находятся конфигурация с настройками: заходим браузером по адресу:

Имя пользователя install, пароль — пустой (по умолчанию после установки).


Идея такая: если все или большая группа в/к должны работать с одними настройками, определяем значения параметров один раз для всех сразу. Ну и конечно же, для конкретной кaмepы можно переопределить значение каждого из параметров настроек.

Итак, рассмотрим параметры, которые наиболее вероятно могут быть одинаковыми для всех в/к в системе.

  • в зависимости от того, каких в/к больше определяем cam_type=
  • в этом разделе определяем параметры norm, deinterlacer, auto_brightness .
  • параметры pre_record, post_record и возможно motion_series_end ;
  • параметры file_fmt, mpeg_maxfilesize, mpeg_view_fps и др. параметры из соответствующих вложенных подразделов;
  • если большинство кaмep нужно смотреть в живую на локальном мониторе — monitor_live=Вкл ;
  • если большинство кaмep нужно смотреть в живую удаленно через браузеры — webcam_live=Вкл ;


Многие значения должны быть уникальные для каждой в/к.

  • в этом разделе определяем параметры v4l_dev, input (. это сочетание — уникальное для каждой в/к и фактически определяет номер чипа BT878[0..7] и видеоканала[0,1,2,3] на нем)
  • параметр text_left — название кaмepы (ТОЛЬКО LATINSKIE, типа DOROGA, KPP1, CAMERA5)
  • параметр v4l_pipe (. назначаем последовательно, чтобы не было совпадений)
  • параметр wc_port (. назначаем последовательно 8081,8082,…, чтобы не было совпадений)

Локальный вьювер (просмотрщик) — это программа МОНИТОР. Её запуск — команда mon.

МОНИТОР отображает на экране заранее определенные матрицы с изображениями в/к.

  • Типы матриц — одна кaмepa, квадраторы 2х2, 3×3, 4×4 и полиэкраны (различные).
  • Кол-во матриц — до 10.
  • Быстрое переключение между матрицами — клавишами клавиатуры 9.
  • Максимальное кол-во в/к в матрице (квадратор 4х4) — до 16.

Все вышеописанное должно быть заранее определено в настройках администратором, иначе будет не доступно пользователю.



Будут выбираться только те кaмepы, по которым monitor_live=Вкл и правильно определен уникальный параметр v4l_pipe .

Видеонаблюдение с помощью Linux

Сейчас практически в каждых коммерческих фирмах и государственных учреждениях устанавливают охранные системы, а точнее системы видеонаблюдения. Все они условно делятся на 2 вида:

  • построенные на основе видеорегистраторов;
  • построенные на основе компьютера.

Первый вариант прост — здесь необходимо побольше камер, монитор и человек, которых постоянно будет смотреть в него. А вот с системой на базе компьютера все сложнее. Помимо самого компьютера в этом случае нужно определится с операционной системой, под управлением которой будет все работать и, конечно же, необходимо выбрать программный продукт, который сможет записывать процесс видеонаблюдения.

Как уже понятно из названия стать, в качестве ОС мы рекомендуем использовать Linux. Во-первых, это выгодно – нам не нужно платить за лицензию на каждый компьютер или сервер. Во-вторых, это надежно – корректно настроенный компьютер на Linux будет работать не один год без сбоев и других проблем. И, в-третьих, многие системы видеонаблюдения под Linux (ZoneMinder, Motion, LinuxDVR) распространяются бесплатно, в то время как аналогичные продукты под Windows и другие ОС стоят немалых денег.

Вообще, программа Motion очень проста в настройке и использовании. Но работать с ней без дополнительных знаний слегка неудобно. По этому мы рекомендуем использовать связку motion+html (с помощью простых html-манипуляций можно создать очень удобный интерфейс для программы). Хотя эту систему, при желании и определенных навыках, можно расширять сколько угодно.

Читайте также: