|
|||||||
Время создания: 09.02.2016 11:02
Раздел: Компьютер - Linux - Видео в Linux - Motion
Запись: xintrea/mytetra_syncro/master/base/1455004927xeoxo8v0in/text.html на raw.github.com
|
|||||||
|
|||||||
После переезда в новый офис, дабы не расслаблять сотрудников, было решено установить систему видеонаблюдения. Но, как обычно, основным условием было: дешево и сердито :) После обдумывания и подсчетов было решено остановиться на следующем: IP-камеры и компьютер в качестве регистратора.
Итак, у нас были IP камеры, компьютер в качестве регистратора, motion в качестве софта и желание подружить весь этот колхоз. И что же умеет motion из того, что нам надо? :)
Ну чтож, приступим. Для начала попробуем с одной камерой. Устанавливаем motion. Далее, в папке /etc/motion/ копируем файл с конфигурацией (motion.conf) в файл для нашей камеры, например motion1.conf. А теперь начинаем его править под себя:
videodevice /dev/video0 2. в строке netcam_url прописываем URL для доступа к нашей камере. Мы использовали IP камеры Axis, модель 207 (со встроенным микрофоном). Для нашего случая выглядело так: netcam_url http://camera_ip/axis-cgi/mjpg/video.cgi?resolution=640x480 где camera_ip — IP адрес камеры.
4. а теперь начинается самое интересное. Находим строку on_event_start. Здесь мы прописываем команду, которая будет выполняться при наступлении события, то есть при движении. Что нам это дает? А дает нам это то, что мы не будем постояно вести запись, а только по необходимости — есть движение, идет запись, закончилось, остановились и мы. Таким образом получается экономия. Для сравнения — у нас ведется запись с 10 камер — цветная картинка 640х480 со звуком, записи хранятся 21 день и все это дело занимает на диске в среднем 135GB, а всесте с фото, которые делает motion около 200 GB. 5. следующая строка: on_event_end — это для команды, отрабатывающей по окончанию события. 6. И еще один нюанс, motion поднимает небольшой http сервер, а так как для каждой камеры запускается своя инстанция программы с отдельным конфигом, то важно, чтобы он слушал на разных портах. Для этого проверяем, чтобы следующие строки отличались в каждом файле: webcam_port и control_port Для примера: для первой камеры ставим значения webcam_port 8081 Это в принципе основные изменения. Думаю при внимательном прочтении конфига вы сами найдете нужные вам параметры, так как там все довольно хорошо задокументировано. Теперь вернемся к скриптам, которые отрабатывают при начале и окончании события. Так как нам надо писать видео с камеры, то для этого я использовал mencoder. В папке /root/bin/ создаем скрипты recordstart.sh и recordstop.sh, которые будут запускаться при наступлеии и окончании события соответсвенно. Давайте заглянем внутрь recordstart.sh: [root@video bin]# cat /root/bin/recordstart.sh Скрипт принимает два параметра: 1 — имя камеры, хотя имя не совсем верно, так как это последний октет из IP адреса камеры. То есть, как в нашем случае (мы используем 95 подсеть — 192.168.95.0/24). Таким образом, при передаче значения 211 — будет ясно, что хотим обратиться к камере с IP 192.168.95.211 Итак, при вызове скрипта в виде /root/bin/recordstart.sh 211 balkon — скрипт будет писать с камеры с IP 192.168.95.211 в директорию /video/motion/balkon. Надеюсь тут все более-неменее ясно.
Пример имени файла: cam218-20090924131847.avi — то есть, пишется с камеры с IP 192.168.95.218, дата начала: 2009 год, 09 месяц, 24 число, 13 часов, 18 минут, 47 секунд.
on_event_start "/root/bin/recordstart.sh 210 koridor1" И он начнет писать. Но ведь это все еще надо остановить. Для этого используем второй скрипт /root/bin/recordstop.sh. [root@video bin]# cat /root/bin/recordstop.sh Скрипт принимает один параметр — все тот же последний октет из IP адреса камеры. on_event_end "/root/bin/recordstop.sh 210"Ну вот примерно и все, что касается конфигурации. Теперь перейдем к рутинным операциям. У меня используются две, которые отрабатывают по крону.
Рассмотрим скрипт для чистки. У меня он располагается в директории /root/sbin и, для того, чтобы враги не догадались, называется clean.sh [root@video ~]# cat /root/sbin/clean.sh
А вот второй скрипт посложнее. [root@video ~]# cat /root/sbin/concatfiles.py for file in filesList: if oldDate != date: #conactenate files
#remove tmp file #remove old files Это для объединения коротких роликов за день в один суммарный. (Для тех кто не в курсе — он на питоне). Единственное, что нужно менять — это переменная workDir — путь, куда mencoder пишет свои файлы, все из того же recordstart.sh motion -c /path/to/config/file где /path/to/config/file — путь к нашему файлу с конфигом :) UPD2: отступы восстановлены, но не факт что правильно. |
|||||||
Так же в этом разделе:
|
|||||||
![]() |
|||||||
|
|||||||
|