Linux motion настройка ip камер

Обновлено: 02.07.2024

Для текущей задачи видео регистрации motion будет Формировать .jpg и .avi файлы. Можно настроить накопление только .avi файлов и только тех промежутков времени, где было движение. Можно сохранять только .jpg изображения. Под .avi подразумевается mjpg. Звука нет. Но можно настроить через скрипты запуск сохранения RTSP потока содержащего как видео, так и звук.
Через локальный сервер можно просматривать изображение на одной из видеокамер. При отсутствии движения количество кадров будет 1 когда webcam_motion on, и станет webcam_maxrate, когда будет обнаружено движение.
Если камера не поддерживает автоматическую регулировку яркости, ее можно установить вручную. За это отвечает сразу несколько параметров. Так отключенный по умолчанию auto_brightness разрешает Motion регулировать яркость. Ее величина берется из значения brightness, регулируемого в пределах 0-255. Если последнее установлено в 0, тогда auto_brightness установит среднее значение 128. За регулировку контраста и насыщенности отвечают contrast и saturation. Качество изображения регулируется с помощью quality. Чтобы изменить формат файла с jpeg на ppm, параметр ppm устанавливаем в on. Можно задать детектирование изображения только в определённой области, делаем снимок камерой, создаем маску, в которой нужная область окрашена белым, а все остальное черным. Сохраняем его в файле формата pgm и указываем путь при помощи mask_file.
Motion сохраняет информацию с камер в форматах: jpg, ppm файлы и mpeg видео последовательности.

С web мордой для motion под FreeBSD проблемы. Пока не нашёл подходящей, нужна возможность смотреть несколько текущих записей и возможность просматривать архив любым количеством авторизованных пользователей. Под Linux таких проблем нет.

FFmpeg - набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах.
ffserver идёт в комплекте с ffmpeg и выполняет роль медиа-сервера - получает видеопоток от ffmpeg, который может быть запущен на другом компьютере, и раздаёт его пользователям. Эти пакеты автоматически устанавливаются с motion.

В отличие от обычных IP камер, которые могут передавать изображение только в режиме сжатия MPEG-4 или MJPEG, камера TL-SC3130 может одновременно передавать видео в MPEG-4 и MJPEG. Видео в MJPEG передается практически без потерь в качестве, однако, с большими расходами трафика, в то время как формат MPEG-4 позволяет передавать видео малого размера. Это была выдержка из инструкции, возможно чего и не понял, но чтобы заработал MJPG поток, нужно отключить RTSP в настройках TL-SC3130 IP камеры.

mt2

Обновляем прошивку до последней версии, старая субъективно глючила. С офф сайта качаем и через тот же web интерфейс обновляем.

Обновляем дату и время, устанавливаем пароли и остальное по вкусу. Для motion использовал администраторского пользователя IP камеры, но наверно можно и операторского или даже вьюверского пользователя использовать.

Важный момент, если motion будет неправильно настроен -запускаться в режиме не демона. И будет настроен автозапуск, то вы можете потерять связь с сервером. Дело в том, что при автозапуске после перезагрузки сервера motion(если не в режиме демона) запускается в отладочном режиме и загрузка OS продолжена не будет. В общем motion должен запускаться в режиме демона.

Просмотр изображений, транслируемых motion сервером удобней просматривать safari браузером и скорее всего всеми браузерами на webkit. Explorer не подходит, в Firefox картинка грузится фрагментами. И Firefox и safari похоже копит принятые картинки, что со временем приводит к расходу всей доступной оперативной памяти. Но возможно всё дело как обычно в правильных настройках.

Настройку motion желательно производить через web интерфейс, тогда вопросов будет меньше. Но при записи произведённых настроек старые настройки motion.conf и threadX.conf будут перезаписываться и останутся только настройки установленные через web интерфейс. Все ваши дополнительные комментарии соответственно также будут удалены.

TL-SC3130 VLC rtsp://IPADDRESS:554/video.mp4 Yes None comment

Выбираем:
rtsp://IPADDRESS:554/video.mp4
или
rtsp://IPADDRESS/video.mp4
rtsp по умолчанию на 554 порту.

mt4

Через VLC 2.0.7 проверим, выдаёт ли камера RTSP поток. Здесь есть как аудио так и видео.
VLC -> медиа -> открыть URL:

mt5

И наблюдаем видео со звуком:

rtsp://xxx.yyy.zzz.ttt:554/video.mp4 качество отличное и со звуком, но motion rtsp не воспринимает.

Но есть один момент. Самым правильным вариантом для видеорегистрации будет использование MJPJ потока. Чтобы использовать/включить mjpg поток для TL-SC3130 нужно отключить rtsp в настройках камеры. Максимальный fps TL-SC3130 для mjpg =15.

Учитываем ещё момент, нужно знать, сколько fps для mjpg может выдать ваша IP камера. И fps установленное в конфигурационных motion файлах должно быть не больше. Для TL-SC3130 максимальный fps =15 согласно документации, а по факту было 12-14(определял по количеству записываемых картинок на диск), т.е. в конфиге нужно прописывать не более 10, иначе из-за выпадающих кадров воспроизведение .avi будет происходить в ускоренном режиме. Да и 10 fps для целей видео регистрации весьма более чем предостаточно и даже избыточно. Правда не помогло даже если установить 5fps, то иногда картинок появлялось на одну-две меньше. Информация в этом абзаце может быть неточной -это поверхностное мнение сформировавшееся на основе наблюдений.

Основной фаил конфигурации называется motion.conf, по умолчанию находить в /usr/local/etc. В нём находятся настройки самой программы, а также задаются общие параметры для всех камер. Если нужно подключить больше одной камеры то индивидуальные настройки каждой камеры задаются в файлах thread1.conf, thread2.conf , thread3.conf и т.д., которые нужно создать и положить в /usr/local/etc прописав путь к ним в motion.conf:
thread /usr/local/etc/ thread1.conf
thread /usr/local/etc/ thread3.conf
thread /usr/local/etc/ thread4.conf

Cоздаём папку:
/var/run/motion

Создаём папку:
/usr/local/etc/motion
И туда помещаем создаём thread1.conf файл

В /usr/local/etc/motion.conf
Должно быть: process_id_file /var/run/motion.pid

Пишутся только .avi и только при движении. Используется MJPG. Рабочий конфиг /usr/local/etc/motion.conf motion.conf

Рабочий конфиг /usr/local/etc/motion_cam/thread1.conf: thread1.conf

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

mt6

Если наблюдаем подобный вывод, то всё в порядке, motion стартовал в режиме демона.
Соответственно в папке соответствующей камеры на сервере будут копиться .jpg файлы и .avi файлы. .avi будут сохраняться согласно заданной периодичности.

mt7

Так выглядит удалённое конфигурирование motion через web интерфейс, после ввода имени и пароля, заданного в конфигурационном файле:

mt7

В случае проблем с источником изображения наблюдалась следующая картина:

Если кто сидит за NAT, то делаем редирект tcp портов каждой из камер и порта встроенного сервера конфигурации motion. Для FreeBSD и блокирующего IPFW это может выглядеть так:
ipfw nat 1 config ip $ reset same_ports deny_in \
redirect_port tcp 192.168.xx.yy:8081 8081 \
redirect_port tcp 192.168.xx.yy:8080 8080

В результате получили папки для каждой из подключённых видео камер. В папку сохраняются только те моменты, когда было обнаружено движение и 10 кадров до и 30 после начала/окончания движения. Папка каждой камеры содержит .avi файлы каждый из которых содержит кадры с движением.

Проверка загрузки процессора


Конфигурационные файлы приведены выше. Для одной TL-SC3130 выставлены максимальные настройки fps=15 для этой камеры, разрешение 640x480 используется mjpg поток, ведётся запись только .avi файлов по детектору движения, сетевая карта не intel, а самая простая Ethernet pci кара.
По данным top. motion на FreeBSD 9.1 p4 AmdAthlon x2 64bit 3200MHz одна камера TL-SC3130 грузит процессор на 19-23% при движении, 5.3-6% при отсутствии движения(объектив закрыт), 6-9% при отсутствии движения(объектив направлен в глубь комнаты), 0.1% или 0% если RJ45 камеры отключён от сервера. -Всё это со включённым детектором движения. Разумеется, чем сложней будет картинка, тем больше будет трафик и нагрузка на процессор.
На скомпилированных скриншотах ниже показана нагрузка на сеть камера-сервер и загрузка процессора при отсутствии движения со включённым детектором движения запись .avi на диск не производится(движения нет) объектив камеры почти закрыт:

Тоже самое, объектив камеры совсем закрыт:

Тоже самое, камера в потолок:

Тоже самое, камера на более живую картинку так же при отсутствии движения удалённые клиенты как и в предыдущих случаях не подключены:

Предыдущий случай, камера на более живую картинку так же при отсутствии движения и + 1 удалённый клиент просматривающий картинку движения отсутствуют. В настройках motion задано 1 картинка при отсутствии движения и 5 кадров при его наличии webcam_maxrate 5. Клиенты на nfe0:

mt18

Тоже самое но удалённых клиентов 2 firefox и 6 safari nfe0 -клиенты. Все клиенты запущены на одном и том же удалённом компьютере. Удалённом -доступ по internet не через local:

mt19

То же самое при наличии движения производится запись .avi на диск. Только .avi и только при наличии движения.

mt20

Удалённых клиентов 1 firefox и 6 safari:

mt21

Тоже самое с движением, но без клиентов:

Плачет intelовская карточка по всему этому делу.

Тоже самое, без клиентов и с постоянной записью на диск только .avi файлов mjpg. Детектор движения отключён ffmpeg_cap_new on и output_all on:

mt23

Предыдущий случай, но с клиентами 1 firefox и 6 safari:

mt24

Тоже самое, но с одним удалённым клиентом safari:

В общем счастья нет. С детектором всё-таки лучше, иначе места на диске не напасёшься. За 15 минут 690 мегабайт, за 22 минуты 1 гигабайт, вышеуказанной картинки. Если объектив закрыть, то за 15 минут напишется 200 мегабайт. Записалось производилась непрерывно на текущих максимальных настройках. И это далеко не предел.
Полагаю данные будут более объективны, если замеры сделать хотя бы с 2-4мя камерами.

Вывод Motion целесообразно использовать только с записью по детектору движения.

Разумеется поспешных выводов не делаем, возможно с двумя камерами нагрузка увеличится не в два раза, а например в 1.6. Нужно смотреть. Да и fps =15, и разрешение 640x480 и остальные параметры не щадящие ресурсы. Т.е. если без фанатизму, то всё отлично работает.

Если на горячую отключить RJ45 от TL-SC3130 и через 2минуты подключить обратно, то поток не восстановится, восстанавливается, если пере подключить питание камеры. Отсюда делаем вывод, что нужно предусмотреть скрипт, который при отсутствии потока будет пытаться пере инициализировать TL-SC3130.
В общем максимальные настройки, при большом количестве камер выставить не получится. Есть непроверенная информация, что для каждой HD видеокамеры наблюдения, подключённой к zoneminder нужно одно ядро от 3GHz.


Можно запускать, но лучше сначала немного настроить ее под себя. Конфигурационный файл хранится в /etc/motion (лучше его скопировать в домашний каталог пользователя, указать путь к конфгу можно опцией -c). Отредактируем его vim /etc/motion/motion.conf

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

Первая опция:
daemon (on/off) — будет ли motion запускаться в режиме демона(в фоне). Можно указать также опцию -n при запуске, тогда программа будет запущена в обычном режиме.

Далее:
videodevice /dev/video0 — указываем наше видео устройство. У меня это /dev/video0.

rotate (0,90,180,270) — повернуть изображение на заданное количество градусов(если камера прикреплена под углом)
width 320
height 240
— ширина и высота картинки в пикселях, соответственно

framerate (2-100) — количество кадров, захватываемых в секунду. Естественно, чем больше значение, тем больше потребление ресурсов компьютера. Выбирайте оптимальное значение.
minimum_frame_time 0 — вдогонку предыдущей опции — позволяет задать минимальное время между захватом двух кадров. Можно, например сделать захват кадра каждый 5 сек.

netcam_url value — используйте, если доступ к вашей камере осуществляется посредством сети. вместо value укажите путь до видеопотока. По умолчанию эта опция не используется
auto_brightness off
brightness 0
contrast 0
saturation 0
hue 0
— яркость, контраст, насыщенность и т.п.

area_detect (1-9) Позволяет следит только за определенной областью. 1 — левый верхний угол, 2 — верхняя средняя часть,… 5 — центр,… 9 — правый нижний угол.

Далее идут еще несколько опций по определению движеия и опции кодирования изображения и видео. Их описание я опущу.

snapshot_interval N — Создает снимки каждые N секунд.
locate (on/off) — рисовать рамку вокруг движущегося объекта.

target_dir /usr/local/apache2/htdocs/cam — Папка, куда будут сохраняться изображения. Я установил это значение

snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S
— Настраиваем имена файлов.

Теперь можно запускать
motion [-c /путь/до/конфига] . Можно также добавить в список демонов вашей системы( rc-update add motion default для гетнты, для арча — добавить в DAEMONS=() в /etc/rc.conf, для других дистрибутивов точно не знаю, но это не сложнее)

И напоследок несколько скриншотов с примером использования. Как видно, при обнаружения движения motion в режиме non-daemon выводит строчки вида [1] File of type 1 saved to: /home/vladimir/motionshots/01-20110727140020-00.jpg

После переезда в новый офис, дабы не расслаблять сотрудников, было решено установить систему видеонаблюдения. Но, как обычно, основным условием было: дешево и сердито :) После обдумывания и подсчетов было решено остановиться на следующем: 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: будьте внимательны с скриптом на питоне, так как сбилась вся табуляция, что для него очень критично.


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

В качестве камеры наблюдения я выбрал простенькую веб-камеру LifeCam VX-1000 от Microsoft-а с разрешением 640*480 точек. Дополнительных драйверов на него не понадобилось, все заработало сразу после подключения.

Узнать подключена ли ваша камера в данный момент можно командой:

В ответ вы увидите строку /dev/video0. Если вы подключили несколько камер, соответственно каждая следующая будет идти по порядку video1, video2 и т. д. Напомню, что в убунту нумерация устройств начинается с нуля.

Если вместо этого вы увидите строку

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

Если же вы уверены, что драйвер должен быть в системе, выполните такую команду:

В ответ вы увидите все подключенные usb устройства. У меня выходит следующее:

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

Звук. Если вы хотите не только смотреть, но еще и слышать, вам понадобится отдельный микрофон, если ваша камера без встроенного микрофона. Cейчас большинство камер идут с микрофоном. Давайте проверим это. Наберите в терминале команду arecord -l. В ответ вы получите список устройств с микрофоном. У меня камера с микрофоном и еще есть микрофонный вход на материнке:

Если с камерой все гуд, перейдем к делу.

Способ первый: ffmpeg

Ffmpeg умеет записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. А также захватывать изображение с камер. То, что нам нужно!

Настроечный файл ffserver-а лежит в /etc/ffserver.conf

Мой конфиг выглядит так:

Приведу еще два примера использования ffmpeg. Вот так можно транслировать из файла вместо камеры:

Вот так можно передавать свой рабочий стол:

Способ второй: motion

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

Конфиг очень большой, но многое там можно оставить как есть. Достаточно указать путь к вашей камере и запустить motion. Но мы ведь легких путей не ищем и будем тонко подстраивать все под себя. Файлик тут /etc/motion/motion.conf. Рассмотрим его подробно, чтобы понять как все устроено, а потом выкинем из него все лишнее.

Фу-у-х! Кажется всё Вы еще тут? Тогда продолжаем!

Приведу для примера свой конфиг:

параметр -с позволяет указать путь к файлу с настройками.

Раньше я пользовался ffmpeg-ом, но сейчас перешел на motion. Запись видео только при появлении движения существенно экономит дисковое пространство. Одна минута записи занимает около 9 МБ. За сутки накапливается 13 ГБ. Естественно это при наличии постоянного движения. А так за сутки в среднем накапливается всего около 3-4 ГБ.

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

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