- Исследование потока с китайского видеорегистратора
- Большой брат в Linux или видеонаблюдение своими руками
- LinuxDVR — программа для видеонаблюдения под Linux, скачать, инструкция по настройкам
- LinuxDVR — программа для видеонаблюдения под Linux, скачать, инструкция по настройкам
- Основные возможности и характеристики ПО LinuxDVR.
- Основные преимущества.
- Простота и скорость расширения системы.
- Инструкция по рабьоте с программой LinuxDVR
Исследование потока с китайского видеорегистратора
Приветствую спецов! Возникла проблемка, надеюсь, смогу тут найти подсказку, в каком направлении копать. Краткая предыстория ниже (осторожно, многобукав).
Задача: вывод куда-нибудь (да хоть в mplayer) видеопотока с дешёвого китайского четырёхканального h264-видеорегистратора с целью просмотра в реальном времени и последующей его записью.
Проблема: регистратор вещает в своём собственном формате. Просмотреть картинки с камер можно только через специальную виндовую прогу (DVRemote.exe) либо через EI7 с какой-то гнилой ботвой на ActiveX. Записываются файлы с него тоже в непонятном и мало изученном (но, как я понял, популярном в подобных регистраторах) формате с расширением .irf. Кругом засада.
Что уже сделано: с помощью wireshark’а на регистраторе обнаружено приложение cgi-bin, которое выдаёт поток, а так-же исследованы его (приложения) параметры. С помощью функции проводной акулы «Follow stream» записаны сеансы общения через 80й порт (на иных портах активности не наблюдалось) между родным ПО и регистратором.
Таким нехитрым образом были обнаружены посылки управления (переключение каналов, управление PTZ и т.д.), разобрать которые не составило труда. Далее отбирались те tcp-потоки, в которых был запрос GET к этому cgi-скрипту и ответ HTTP/1.0 200 OK; Content-type: video/h264. Затем в двоичном редакторе происходило разделение заголовков http и, собственно, потока, получившиеся файлы были сохранены на диск в формате «как есть» (raw) и скормлены mplayer’у. Без особого успеха.
Но в один прекрасный момент был записан фрагмент, в котором видно проскакивающие кадры одной из камер в перемешку с синим video-loss-экраном (два канала не подключены) и сильными помехами (очевидно, следствие подмешивания в поток каких-то служебных данных либо мультиплексирование сигналов со всех четырёх каналов в этот единый поток). Данный фрагмент доступен для загрузки тут, 2.3 мб: http://tfsoft.org.ua/
Конкретные вопросы: насколько велики шансы за разумный период времени извлечь нормальный видеопоток из этой каши? По сути, всё управление (переключение каналов, управление трансфокатором и фокусом камер) уже есть, осталось лишь картинку получить.
Если я правильно понимаю, мне нужно обнаружить записи Sequence Parameter Set и Picture Parameter Set, чтоб иметь представление о потоке, но как и где их искать? Во внутренностях h264 не шарю почти ничего.
Источник
Большой брат в Linux или видеонаблюдение своими руками
Большой брат в Linux или видеонаблюдение своими руками.
После переезда в новый офис, дабы не расслаблять сотрудников, было решено
установить систему видеонаблюдения. Но, как обычно, основным условием было:
дешево и сердито 🙂 После обдумывания и подсчетов было решено остановиться на
следующем:
IP камеры и компьютер в качестве регистратора.
Для начала попробовали небезызвестный ZoneMinder. Но отчего-то с 9 камерами он
грузил систему нещадно. После некоторой борьбы с ним, было решено отказаться от
него. Поискав на просторах Internet была найдена программка под названием
motion (http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome). Почитав немного
про нее, было решено остановиться на ней.
Итак, у нас были IP камеры, компьютер в качестве регистратора, motion в
качестве софта и желание подружить весь этот колхоз 🙂
И что же умеет motion из того, что нам надо? 🙂
1. Работа с камерами, подключенными через карты захвата либо с IP камерами.
2. Выполнять скрипты при наступлении и окончании события.
Ну чтож, приступим. Для начала попробуем с одной камерой 🙂
Устанавливаем motion.
Далее, в папке /etc/motion/ копируем файл с конфигурацией (motion.conf) в файл
для нашей камеры, например motion1.conf. А теперь начинаем его править под
себя:
1. закомментируем строчку
videodevice /dev/video0
2. в строке netcam_url прописываем URL для доступа к нашей камере. Мы
использовали IP камеры Axis, модель 207 (со встроенным микрофоном).
Для нашего случая выглядело так:
netcam_url
http://camera_ip/axis-cgi/mjpg/video.cgi?resolution=640×480
где camera_ip — IP адрес камеры 🙂
3. далее находим строку target_dir — здесь указываем путь к папке, где будем
хранить данные с камеры.
4. а теперь начинается самое интересное. Находим строку on_event_start. Здесь
мы прописываем команду, которая будет выполняться при наступлении события, то
есть при движении. Что нам это дает? А дает нам это то, что мы не будем
постояно вести запись, а только по необходимости — есть движение, идет запись,
закончилось, остановились и мы. Таким образом получается экономия. Для
сравнения — у нас ведется запись с 10 камер — цветная картинка 640х480 со
звуком, записи хранятся 21 день и все это дело занимает на диске в среднем 135
GB, а всесте с фото, которые делает motion около 200 GB.
5. следующая строка: on_event_end — это для команды, отрабатывающей по
окончанию события.
6. И еще один нюанс, motion поднимает небольшой http сервер, а так как для
каждой камеры запускается своя инстанция программы с отдельным конфигом, то
важно, чтобы он слушал на разных портах. Для этого проверяем, чтобы следующие
строки отличались в каждом файле:
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:
[root@video bin]# cat /root/bin/recordstart.sh
#!/bin/bash
# We are using two variables
# 1 — camera name
# 2 — directory name (where file will be stored)
# Generate filename
start=«cam$<1>»
dt=`date +%Y%m%d%H%M%S`
FILENAME=»$
echo $FILENAME
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 — текущая дата в формате ГГГГММДДччммсс.
Пример имени файла: cam218-20090924131847.avi — то есть, пишется с камеры с IP
192.168.95.218, дата начала: 2009 год, 09 месяц, 24 число, 13 часов, 18 минут,
47 секунд.
Небольшое пояснение: так уж оказалось, что у нас разные модели камер, которые
предоставляют разные способы доступа к потоку видео данных, из-за этого
пришлось ввести в скрипте проверки.
Теперь пройдемся по 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.
[root@video bin]# cat /root/bin/recordstop.sh
#!/bin/bash
# We are using one variable
# 1 — camera name
# Get string with mencoder process PID
MPID=`ps ax | grep mencoder | grep cam$ <1>| awk ‘< print $1 >‘`
# Kill process
`kill -15 $MPID`
Скрипт принимает один параметр — все тот же последний октет из IP адреса
камеры.
Соответсвенно в строке on_event_end файла конфигурации прописываем что-то
вроде:
on_event_end «/root/bin/recordstop.sh 210»
Ну вот примерно и все, что касается конфигурации.
Теперь перейдем к рутинным операциям 🙂
У меня используются две, которые отрабатывают по крону.
1. Удаляет устаревшие файлы, которые страрше 21 дня.
2. Объединяет все файлы за день в один.
Рассмотрим скрипт для чистки. У меня он располагается в директории /root/sbin
и,
для того, чтобы враги не догадались, называется clean.sh
]# cat /root/sbin/clean.sh
#!/bin/sh
/bin/find /video/balkon -name «*.*» -mtime +21 -delete
/bin/find /video/motion/balkon -name «*.*» -mtime +21 -delete
В первой директории хранятся фотографии, сделанные motion — это параметр из
файла конфигурации в строке target_dir.
Вторая директория — куда пишется видео, запущенное из скрипта recordstart.sh
А вот второй скрипт посложнее.
[root@video
]# cat /root/sbin/concatfiles.py
import os, stat, types, commands
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’
#conactenate files
command = ‘/usr/bin/mencoder -oac copy -ovc copy ‘ + workDir +
dir + ‘/’ + tmpN[0] + ‘-‘ + date + ‘*.avi -o ‘ + summaryFileTmp
os.system(command)
#fix key frame
command = ‘ffmpeg -i ‘ + summaryFileTmp + ‘ -ss 0.04 -vcodec
copy -acodec copy -vcodec copy -acodec copy ‘ + summaryFile
os.system(command)
#remove tmp file
command = ‘/bin/rm -f ‘ + summaryFileTmp
os.system(command)
#remove old files
command = ‘/bin/rm -f ‘ + workDir + dir + ‘/’+ tmpN[0] + ‘-‘ +
date + ‘*.avi’
os.system(command)
oldDate = date
Это для объединения коротких роликов за день в один суммарный. (Для тех кто не
в курсе — он на питоне).
Единственное, что нужно менять — это переменная workDir — путь, куда mencoder
пишет свои файлы, все из того же recordstart.sh
Прописываем их в крон на выполнение раз в сутки, желательно ночью, пока карета
не превратится в тыкву 🙂
Запускаем motion следующим образом:
motion -c /path/to/config/file
где
/path/to/config/file — путь к нашему файлу с конфигом 🙂
А далее запускаем их при загрузке системы.
Ну вот наверное и все 🙂
Если будут вопросы — задавайте 🙂
UPD: будьте внимательны с скриптом на питоне, так как сбилась вся
табуляция, что для него очень критично.
Источник
LinuxDVR — программа для видеонаблюдения под Linux, скачать, инструкция по настройкам
LinuxDVR — программа для видеонаблюдения под Linux, скачать, инструкция по настройкам
Основные возможности и характеристики ПО LinuxDVR.
- Можно построить одиночный в/регистратор или распределенную систему (передача видео основана на стандартном протоколе Motion JPEG c гибкими настройками такой передачи для подстройки к реальной сети);
- на одном ПК поддерживает до 32 аналоговых CCTV ч/б или цв. в/к с композитным видеосигналом (подключение через 2 PCI платы видеозахвата по 16 каналов каждая);
- поддерживает сетевые камеры и видео-сервера по протоколу Motion JPEG (MJPEG);
- допустимые разрешения: аналоговые в/к — до 768×576(полный кадр) , сетевые в/к — до мегапиксельного 1600х1200 ;
- запись в файлы JPEG, видеофильмы MPG(MPEG1), и AVI (кодеки MJPEG и MPEG4);
- детектор движения ;
- реакции на события;
- неограниченное ( прим: программно ) кол-во удаленных рабочих мест наблюдения, администратора, оператора архива ;
- поиск по архиву видеозаписей по различным критериям;
- протоколирование событий — ни одна попытка доступа и ни одно изменение в настройках системы не останутся незамеченными;
- удаленный доступ по протоколам HTTP, FTP, TELNET ;
- резервное копирование (backup) по протоколу RSYNC ;
- синхронизация времени узлов распределенной системы с центральным сервером по протоколу TIME
Основные преимущества.
Специальный дистрибутив Linux (около 17 Mb) на базе ядра 2.4 обеспечивает:
- Высокую производительность и минимальные требования к аппаратному обеспечению. Это обеспечивается за счет оптимизации всех компонентов ПО — ядро linux, основные раб. программы под конретные классы процессоров (так где нужно исп. MMX, SSE, SSE2).
- Систему не нужно устанавливать (ОС, драйвера, тюнинг). Процессы установки нужны только для подготовки загрузки c HDD (если нужно) и места под архив (это обязательно, если нужна запись на диск).
- Основные работа с пользователем — через браузер. Вам не нужно устанавливать и настраивать дополнительного ПО.
- Защиту от вирусов (более правильно — вирусы для Linux большая редкость).
- Защиту от «шаловливых ручек» — в системе установлено только то ПО, которое необходимо для работы. Нет игр и не возможно ничего установить.
- Возможность запуска ПО прямо с CD-ROM (ПО копируется в память и начинает работать) обеспечивает требования для самых критичных систем, таких как сетевые экраны.
- Быстрая загрузка после аварийного отключения питания (менее 60сек) и автоматическое восстановление архива и базы (длительность в зависимости от диского пространства).
- Не нужно платить за ОС Microsoft Windows (для многих россиян, конечно, пока не сильное преимущество :).
Простота и скорость расширения системы.
Как правило подобные системы включают аппаратных ключ защиты — 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 в/к, так как это написано выше.
Для того, чтобы работать с большим кол-вом в/к — нужно:
- добавить нужное кол-во в/к в конфигурацию (ссылка в меню справа «добавить кaмepy»),
- определить значения по-умолчанию для всех в/к,
- настроить каждую кaмepy в отдельности.
Где находятся конфигурация с настройками: заходим браузером по адресу:
Имя пользователя install, пароль — пустой (по умолчанию после установки).
Ссылка в меню справа — « видeoкaмepы->параметры для всех »
Идея такая: если все или большая группа в/к должны работать с одними настройками, определяем значения параметров один раз для всех сразу. Ну и конечно же, для конкретной к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=Вкл ;
Многие значения должны быть уникальные для каждой в/к.
Подраздел «Параметры доступа к Motion JPEG сетевым IP-камерам и IP-видеосерверам(видеошлюзам)»
- в этом разделе определяем параметры InetCam_URL, InetCam_HTTP_GET (. пример: InetCam_URL=http:// , InetCam_HTTP_GET=/axis-cgi/mjpg/video.cgi?resolution=640×480&colorlevel=100&req_fps=5, подробней здесь >>)
- так как кaмepы «наблюдают» разные планы, то почти все настройки ПДД рекомендуется подстраивать для каждой в/к
- параметр text_left — название кaмepы (ТОЛЬКО LATINSKIE, типа DOROGA, KPP1, CAMERA5)
- параметр v4l_pipe (. назначаем последовательно, чтобы не было совпадений)
- параметр wc_port (. назначаем последовательно 8081,8082,…, чтобы не было совпадений)
Локальный вьювер (просмотрщик) — это программа МОНИТОР. Её запуск — команда mon.
МОНИТОР отображает на экране заранее определенные матрицы с изображениями в/к.
- Типы матриц — одна кaмepa, квадраторы 2х2, 3×3, 4×4 и полиэкраны (различные).
- Кол-во матриц — до 10.
- Быстрое переключение между матрицами — клавишами клавиатуры 1.
- Максимальное кол-во в/к в матрице (квадратор 4х4) — до 16.
Все вышеописанное должно быть заранее определено в настройках администратором, иначе будет не доступно пользователю.
Где настраивать — cсылка в меню справа « Монитор «. Далее можно удалить, добавить, править матрицы(конфигурации окон).
Будут выбираться только те кaмepы, по которым monitor_live=Вкл и правильно определен уникальный параметр v4l_pipe .
Источник