https://linux-freebsd.ru/freebsd/programmnoe_obespechenie/videonablyuden...
Программа motion позволяет вести запись и наблюдение с ip-камер или web-камер.
Первый вариант. Используется ip-камера в связке с motion. Тестировались камеры Ubiquiti Aircam mini и D-Link DCS-930L.
Установка motion:
# make install clean
Правим конфигурационный файл по адресу /usr/local/etc/motion.conf. Он отлично прокомментирован по умолчанию, оставлю только нужные опции:
daemon on
# Нужно будет создать папку motion по этому адресу, по дефолту не создается
process_id_file /var/run/motion/motion.pid
setup_mode off
Если используется веб-камера или аналоговая камера, то указываем путь к устройству:
#videodevice /dev/video0
# V4L2_PIX_FMT_SN9C10X : 0 'S910'
# V4L2_PIX_FMT_SBGGR8 : 1 'BA81'
# V4L2_PIX_FMT_MJPEG : 2 'MJPEG'
# V4L2_PIX_FMT_JPEG : 3 'JPEG'
# V4L2_PIX_FMT_RGB24 : 4 'RGB3'
# V4L2_PIX_FMT_UYVY : 5 'UYVY'
# V4L2_PIX_FMT_YUYV : 6 'YUYV'
# V4L2_PIX_FMT_YUV422P : 7 '422P'
# V4L2_PIX_FMT_YUV420 : 8 'YU12'
# У нас ip-камера, указываем данный режим:
v4l2_palette 2
input 8
norm 0
rotate 0
width 640
height 480
framerate 10
# Путь к котоку mjpeg камеры. В случае Ubiquiti Aircam mini это:
netcam_url http://172.16.0.105/snapshot.cgi
# В случае D-Link DCS-930L, путь будет вида http://172.16.0.105/video.cgi
Если нужно, указываем авторизацию к камере:
#netcam_userpass admin:admin
netcam_http 1.0
auto_brightness off
# Чувствительность камеры к движению:
threshold 2500
threshold_tune off
noise_level 32
noise_tune on
gap 60
# Максимальное время записи для одного видеофайла в секундах:
max_mpeg_time 2000
# Не будем делать снимки в формате jpeg:
output_all off
output_normal off
output_motion off
quality 75
############################################################
# FFMPEG related options
# Film (mpeg) file output, and deinterlacing of the video input
# The options movie_filename and timelapse_filename are also used
# by the ffmpeg feature
############################################################
ffmpeg_cap_new on
ffmpeg_cap_motion off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
# Качество видео (битрейт)
ffmpeg_bps 150000
ffmpeg_variable_bitrate 0
ffmpeg_video_codec mpeg4
ffmpeg_deinterlace off
snapshot_interval 0
# Наложение текста на видео
text_right %Y-%m-%d\n%T-%q
text_changes off
text_event %Y%m%d%H%M%S
# Увеличим размер текста:
text_double on
# Путь для сохранения видео:
target_dir /usr/local/www/motion/video
# Форматы имен файлов:
snapshot_filename %v_%Y_%m_%d_%H%M%S
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v_%Y.%m.%d_%H.%M.%S
timelapse_filename %Y%m%d-timelapse
############################################################
# HTTP Based Control
############################################################
control_localhost on
control_html_output on
quiet on
Здесь можно задать команды или скрипты, которые будут выполняться при каких-то событиях:
# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by gap.
; on_event_start value
# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option gap.
; on_event_end value
# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
; on_picture_save value
# Command to be executed when a motion frame is detected (default: none)
; on_motion_detected value
# Command to be executed when motion in a predefined area is detected
# Check option 'area_detect'. (default: none)
; on_area_detected value
# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_start value
# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_end value
# Command to be executed when a camera can't be opened or if it is lost
# NOTE: There is situations when motion doesn't detect a lost camera!
# It depends on the driver, some drivers don't detect a lost camera at all
# Some hang the motion thread. Some even hang the PC! (default: none)
; on_camera_lost value
# Если камер несколько, то здесь нужно указать пути к таким же конфигурационным файлам:
; thread /usr/local/etc/thread2.conf
; thread /usr/local/etc/thread3.conf
; thread /usr/local/etc/thread4.conf
Стартуем motion:
Теперь у нас практически готова система видеонаблюдения. Видеозаписи сохраняются по адресу /usr/local/www/motion/video
Для просмотра видео в реальном времени можно задействовать демон ffserver и ffmpeg, идущие в комплекте с motion или же использовать веб-морду ip-камеры.
Я сделал проще, вставил в обычную html-страницу картинку с камеры с интервалом обновления 1 сек:
<html> <head> <meta http-equiv="Content-ype" content="text/html; charset=utf-8"> <title>Camera 1</title> </head> <body> <br /> <br /> <div align="center" width="1024"> <span><b><h2>Camera 1</h2></b></span> <IMG width="640" height="480" border="1" name="image1" style="border-color: #000;"> <SCRIPT language="JavaScript" type="text/javascript"> var t = 1 //интервал обновления var img1 = "http://192.168.11.5/image.jpg?" document.images["image1"].src = img1 Start(img1,"image1"); function Start(img, name) { tmp = new Date(); tmp = "&"+tmp.getTime() document.images[name].src = img+tmp var delay = function() { Start(img, name); }; setTimeout(delay, t*1000) } </SCRIPT> <br /> <span style="font-weight: bold;font-size: 18px;"><a href="files.php">FILES</a></sp </div> </body> </html> [/code]
Ещё возникла потребность как-то каталогизировать файлы записей. Для этого я использовал php-скрипт, его нужно положить на уровень выше чем, каталог с видеофайлами. Суть скрипта - раз в сутки (нужно поставить на крон) файлы записей раскладываются по папкам, имя которых - дата записи:
<?php date_default_timezone_set('Europe/Moscow'); $dir = glob("video/*.avi"); foreach($dir as $fileAvi){ $data = date ("d-m-Y", filemtime($fileAvi)); @mkdir('video/'.$data, 0777, true); $fileAviCastrat = str_replace('video/', '', $fileAvi); copy($fileAvi, 'video/'.$data.'/'.$fileAviCastrat); unlink($fileAvi); } ?>[/code]
Чтобы вывести эти файлы и папки на html-страницу, используется такой скрипт:
<?php function filesize_get($file){ if(!file_exists($file)) return "file not found."; $filesize = filesize($file); if($filesize > 1024) { $filesize = ($filesize/1024); if($filesize > 1024) { $filesize = ($filesize/1024); if($filesize > 1024) { $filesize = ($filesize/1024); $filesize = round($filesize, 1); return $filesize." GB"; } else { $filesize = round($filesize, 1); return $filesize." MB"; } } else { $filesize = round($filesize, 1); return $filesize." KB"; } } else { $filesize = round($filesize, 1); return $filesize." byt"; } } isset($_GET['file'])?$f=$_GET['file'].'/':$f=''; $dir = '/usr/local/www/motion/video/'.$f; $files = scandir($dir); $pos = 1; foreach ($files as $file){ if($file != '.' && $file != '..'){ if(is_dir($dir.'/'.$file)){ echo '<b>' . $pos . ') <a href="?file='.$file.'">'.$file.'</a></b><br />'; }else{ if(strpos($file, '.avi')){ $filesize = filesize_get($dir.'/'.$file); echo '<b>' . $pos . ')</b> <a href="/motion/video/'.$f.'/'.$file.'" type="application/octet-stream">'.$file . '</a> - '.$filesize.'<br />'; }else{ echo '<b>' . $pos . ')</b> '.$file . '<br />'; } } $pos++; } } ?>[/code]
________________________________________________________________________
Второй вариант. Используется ip-камера в связке с motion+ffmpeg+ffserver. Тестировались камеры Ubiquiti Aircam mini и D-Link DCS-930L.
В этом случаем можно организовать видео-трансляцию со своей камеры, если в ней нет веб-интерфейса. Для этого понадобиться донастроить ffserver и запустить ffmpeg.
Для этого настройки motion оставляем как есть (указаны выше, с помощью motion будет вестись запись). И настроиваем конфиг ffserver по адресу /usr/local/etc/ffserver.conf :
BindAddress 0.0.0.0
MaxClients 100
MaxBandwidth 20000
NoDaemon
File /tmp/feed.ffm
FileMaxSize 3M
Feed feed.ffm
Format flv
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 80000
VideoBitRate 200
VideoQMin 1
VideoQMax 5
VideoSize 352x288
PreRoll 1
Noaudio
Feed feed.ffm
Format swf
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 50000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
VideoSize 352x288
PreRoll 0
Noaudio
Запускаем ffserver:
Запускаем ffmpeg:
Теперь по адресу http://localhost:8090/test.swf имеем трансляцию в flash, которую можно встроить куда вам нужно.
Доброго времени суток!
Возможны ли файлы записи без использования motion (ffserver+ffmpeg)? Если нет, то есть ли возможность заточить motion только под звук (без видео)?
Очень хотелось бы каталогизировать файлы записей.
Большое спасибо.
Иван, отсюда не пробовали подчерпнуть что-то?
http://linux-freebsd.ru/freebsd/programmnoe_obespechenie/zapis-video-v-freebsd-s-rtsp-potoka-s-pomoshhyu-openrtsp-i-ffmpeg/
Сделал всё как в статье, но к aircam motion не подключается. В логах:
Retrying until successful connection with camera
libjpeg decompression failure on first frame - giving up!
Михаил, а какая камера точно и по какому адресу она отдает mjpeg?
параметр netcam_url ?
Доброго дня, удалось ли Вам подключить aircam к motion?
Парился я с мотион где то пол года, настроил 20 камер сетевых ушло на это уйма нервов и времени, пришла еще одна камера сетевая, бился с ней неделю потом плюнул на все и купил ПО xeoma и ни каких проблем 20 минут и сервер готов
Добрый вечер!
как прирутить звуковое сопровождение при обнаружении движения.
...и хотелось бы очень увидеть примеры команд и скрипты разные к событиям.
спасибо.
опция on_motion_detected value отвечает за выполнение действия при обнаружении движения. Можно как указать ссылку на скрипт, который проиграет музыку/звук
А вы не пробовали наоборот сделать? ffserver считывает rtsp поток с камеры и транслирует его на localhost, а motion уже берет этот поток с локалхоста и пишет видио по детекту.
неделю бьюсь с этой связкой все без толку. Камеры AirCam, кстати первый вариант Вашей настройки получился. скормил motion этот поток netcam_url http://172.16.0.105/snapshot.cgi и все заработало. Вот не знаю, если с ffserver ни чего не получиться, то возможно придется использовать первый вариант. Еще есть мысли считывать RTSP поток Zoneminder-ом и отдавать его motion.
В общем не могли бы вы написать, выложить, конфиги как подружить AirCam+motion+ffserver?
Уже нет возможности этим заниматься. Да и желания =)
Очень жаль)) ну что поделаешь. Объясните тогда пожалуйста вот эту строчку ffmpeg -s 352x288 -r 15 -f mjpeg -i http://172.16.0.105:8081/stream.mjpg http://localhost:8090/feed.ffm
вторая часть статьи у меня не заработала, не совсем понимаю от куда этот адрес http://172.16.0.105:8081/stream.mjpg
Retrying until successful connection with camera
Та же самая история, не знаю куда копать :(
камера по ip доступна? поток виден? через браузер, к примеру или программу какую-нибудь
Бился бился я с этими настройками, в конечном итоге установил zoneminder для rtsp камер. и motion забираю поток уже от туда. 4 месяца сервер пишет 15 камер, пока что без сбоев. Единственное что напрягает на записи иногда ускорение включается и 10 сек пролетают как одна. А так все норм. Кстати эти 15 камер motion в браузере тормознуто отдает, по этому для просмотра у охраны установил vlc плеер и на прямую им поток с камеры забираю. Решение конечно не ахти, но главное что работает и все довольны.
Кстати кто нить в курсе у motion когда нибудь будет встроенная поддержка rtsp?
В статье описан способ подключения к камере в одной подсети, а что если ip камера совсем 0в другом месте да еще и не с белым ip?
Например у нас камера висит на 4g маршрутизаторе и ip плавает.
Через mydlink все отлично видно, а вот как мой сервер freebsd заставить снимать видео с камеры ума не приложу.
Может есть уже модуль доступа на mydlink на freebsd? (есть же такие програмки для андройда и айфона может и для freebsd есть? )
Здравствуйте. Спасибо за статью, но у меня работает только одна из 2 веб камер хотя система определяет их, в конфиге моушн прописывал
dev/video0 & dev/video1. подскажите может что-то не то прописал или что-то еще дописать?
все разобрался может кому будет полезно:
Если используется одна камера, файла motion.conf достаточно, но если их несколько, для каждой камеры понадобится подготовить персональный conf-файл. Общие для всех настройки оставляем в основном, а индивидуальные выносим в отдельные файлы. Кстати, в архиве уже есть несколько готовых шаблонов thread[1-4].conf. Если в будущем планируется расширение, то лучше сразу использовать thread-файл и подключить его в motion.conf при помощи конструкции:
thread /usr/local/etc/thread1.conf
Чтобы не путаться в конфигах, будем настраивать работу одной камеры в основном файле. Привести Motion в действие можно за счет правки нескольких параметров:
В конфиге motion.conf в самом низу нужно прописать путь до threadX.conf затем В самом threadX.conf прописать все параметры аналогичны базовому, изменяются только необходимые строки
к примеру
videodevice /dev/video1
text_left CAMERA 2
target_dir /opt/data/current/video1