Motion - rtspСподвиг меня vovka заняться motion в контексте записи IP камер. Вот чего я надёргал с интернета и окультурил под свои нужды. Написать статью сподвиг мой хороший товарищ, который тоже хотел бы воспользоваться данной наработкой, но у которого нет времени на такие масштабные исследования. Я не буду писать,как обычно пишут Монстры мозгового штурма, что мол пара вечеров и они все поняли. Я тупил около 2-3 месяцев, пока немного разобрался как что сделать. И то еще многое надо доработать и дописать. Прошу.
http://alserr.livejournal.com/4601.htmlСборка motion с поддержкой rtsp в ubuntu 14.04 (обычно использую debian, но в данном случае репозиториев под него не нашел для ffmpeg как в статье, пришлось переехать на ubuntu 14 сервер 32 бита, тоже не плохая, хоть и форк).
apt-get update
apt-get upgrade
apt-get install autoconf automake build-essential git yasm gcc
apt-get install libavformat-dev libavcodec-dev libavutil-dev libav-tools libswscale-dev libtool libjpeg8-dev libzip-dev
Затем подключаем репозиторий ffmpeg:
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpegсборку надо производить после доустановки
1.
pkg-config (
https://github.com/vcftools/vcftools/issues/16)
2. доустановки компонент из INSTALL
sudo apt-get install autoconf automake pkgconf libtool libjpeg8-dev build-essential libzip-dev libavformat-dev libavcodec-dev libavutil-dev libav-tools libswscale-dev 3.
sudo apt-get install livemedia-utils (здесь openRTSP)
Скачиваем и собираем motion:
cd /opt
git clone https://github.com/Mr-Dave/motion.git
cd motionsudo autoreconf -fiv
sudo su
# ./configure
# make
# make install
cd /usr/local/etc/motionДля работы получившегося motion нужно переименовывать или создавать на основе исходных файлы конфигурации программы. После установки в папке /usr/local/etc/motion все конфиги с добавкой -dist, нужно без нее, например motion-dist.conf меняем на motion.conf
motion.conf , что нужно в нём подправить, это в самом конце раскомментировать threadXXX.conf, сколько будет камер. Если не хватает, добавляем. И еще, запрещаем писать видео в motion .
# Use ffmpeg to encode movies in realtime (default: off)
ffmpeg_output_movies off
Лучше, если совместно с IP камерами использовать аналоговые, то их запуском рулить из threadXXX.conf. Так же если каждой камере нужен свой параметр, например обработки движения или маска, берём из motion.conf и в threadXXX.conf. Чего нет в threadXXX.conf при работе берётся из motion.conf (это помним).
Например для ip камеры в threadXXX.conf нужно изменить/добавить:
коментируем:
;videodevice /dev/video0
ставим
input 0
Редактируем
target_dir куда писать результат работы motion. В нашем случае результатом его работы кроме определения движения по малому потоку будет положить в указанную папку лучший снимок этого действа. Видео он писать не будет, об этом позже.
picture_filename по вкусу, у меня picture_filename CAM1_%Y%m%d%H%M%S-%q , так правильнее потом сортируется в папке.
Для IP камеры:
для motion собранного с поддержкой rtsp подходят ссылки на поток, которые годятся для плеера vlc например (так пишет автор новой сборки Mr-Dave). В моем случае
rtsp://192.168.1.176:554/user=svl&password=123&channel=1&stream=0.sdp 1280х720
rtsp://192.168.1.176:554/user=svl&password=123&channel=1&stream=1.sdp 704х576
В конфиге пишем:
netcam_url rtsp://192.168.1.151:554/user=admin&password=&channel=1&stream=1.sdp
netcam_userpass admin:
(в моём случае нет пароля)
rotate 0 (поворот вокруг оси)
width 720
height 400 для широкоформатного отображения в браузере при просмотре. Можно выбрать разрешение, которое идёт с камеры, тогда нагрузка на motion убавится, а для правильного просмотра ресайзить картинку в страничке html (писал в старой части этой статьи про motion по моему в 2011 году).
Здесь речь идёт о малом потоке! Большой будем только писать по событию, его обрабатывать не надо пока.
Далее отработка по событию (движение в малом потоке)
# 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 eve$
on_event_start /usr/local/etc/motion/start_151.sh 151
# 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 event_gap.
; on_event_end value
Стоповый скрипт пока не выдумал, так как не знаю как правильно выловить именно процесс с данной камеры и стопать именно его.
Идею скриптов взял отсюда (
https://habrahabr.ru/post/72491/)
Я зачем-то перенял идею ввода концовки адреса камеры, можно и исключить, а можно и развить. Я не планирую использовать один скрипт для всех камер. Думаю пользовать каждой свой, поэтому считаю лишним адрес. Оставлю только генерацию имени по времени и все. Здесь идея писать качественный поток как есть с камеры через openRTSP.
Вот мой скрипт (исполняемый!) лежит как прописал /usr/local/etc/motion/ под именем start_151.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="${start}-${dt}.mp4"
echo $FILENAME
openRTSP -b 1000000 -d 60 -v -i rtsp://192.168.1.151:554/user=admin_password=_channel=1_stream=0.sdp >/home/svl/motion/cam2/$FILENAME
Буфером -b возможно придётся поиграть, так как по умолчанию 10000 маловат, и в записываемом потоке артефакты. 1000000 на мой взгляд достаточно.
Эксперименты показали, что более 2 минут за раз openRTSP писать никак не хочет. Если ставлю -d 180 например, то пишется 2 минутный файл и еще минуту openRTSP не отключается, хотя записи уже нет. Я ставлю -d 60 так как стопового скрипта пока нет, а опыт использования motion на аналоговых камерах показал, что сюжета вокруг движения в 60 сек вполне достаточно. При том, если движение еще не закончилось, например дрова еще воруют с поленницы

, то motion даст команду сделать новую запись (в минуту). Получаем минутные ролики в ситуации, когда движение затянулось. Для меня это приемлемо.
Обращаю внимание, что ссылка от vlc немного здесь изменяется. Меняем все & на _
В motion.conf
output_pictures best (пишем лучшую фотку события по мнению motion, в этом ему на мой взгляд можно доверить)
По поводу свободного места. Мой motion с одной камеры за 2 дня и 14 часов надёргал 5,3 гига видео и картинок. Это 1 мегапиквсельная камера с максимальным битрейтом для 10 кадров в сек 4000. Звук отключен. Диск будет съедаться безжалостно, но зато деиализация при разборе однозначно порадует. Я буду переделывать свою систему так, оставлю 6 аналоговых камер, где их разрешения хватает, и заменю 2 камеры аналоговые на 2 IP, там где общий обзор территории в обоих направлениях (на фазенде).
И еще о ресурсах. Эксперименты ставил на селероне Intel(R) Celeron(R) D CPU 430 @ 1.80GHz 1 ведро и гиг оперативы.
Одна IP камера ест проца от 6% до 16 в пике при обработке движения с малого потока, но в максимальном качестве и 10 кадрах в сек (704х576)D1. На запись rtsp потока почти ничего не тратится, около 0,3%. Система у меня будет стоять на
двухведёрном AMD Athlon(tm) II X2 250 Processor cpu MHz: 3000.000 и 2 гига оперативы. Думаю более 70% в самом пике на 2 IP и 6 аналогах при беготне во всех камерах у меня не будет. Потом, когда придут камера мои и я их поставлю, отпишусь дополнительно.
Записи в папках чищу по времени скриптом, который еженочно кроном выполняется
#!/bin/bash
find /home/svl/motion/cam1 -mtime +40 -type f -exec rm {} \;
и так добавляем строку для каждой папки
У меня архив 40 дней.(подбирается для каждого случая).
Вспомнил еще, я пока не настроил свои браузеры для просмотра фаерфоксом напрямую с камера. О том что нужно vovka упоминал в (
http://nix.zeya.org/forum/index.php?topic=416.0), но у меня пока не вышло. Когда получится, сделаю так , кликая по малому потоку в общей картинке со всеми камерами переключаться на просмотр большого потока.
Что касается просмотра архивов, я настроил samba и по сети с любого компа домашнего смотрю видео с камеры. Просматриваю бегло фото, заинтересовавший меня момент смотрю в движении используя время в имени фотки при поиске видеофайла здесь же. Получается довольно оперативно просмотреть что было. Вот один пример из жизни животных

выкусил из одного из стоп кадров.
Пока все. Всем заинтересованным желаю удачного воплощения без лишних заморочек! Пусть останется время на что-нибудь еще
