суббота, 16 ноября 2013 г.




Использование Motion в Linux CentOS для записи видео с IP камер.


Задача:
Организовать запись видео с ряда IP камер на сервер Linux CentOS с пакетом motion, обеспечить просмотр записанных роликов через WEB-интерфейс, предоставить возможность просмотра видео с камер on-line через WEB-интерфейс браузера.




Инсталлируем пакет Motion на сервер c CentOS:

1. Устанавливаем необходимые пакеты
#yum install glibc glibc-devel
#yum install libjpeg libjpeg-devel
#yum install zlib zlib-devel
#yum install ffmpeg
#yum install ffmpeg-devel
#yum install mysql mysql-devel
ПРИМЕЧАНИЕ: Если не устанавливается ffmpeg, то делаем следующее:
для CentOS x64
#rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
Для CentOS x86
#rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
И устанавливаем непосредственно ffmpeg

# yum install ffmpeg
2. Скачиваем исходный код пакета motion (например так)
#wget http://sourceforge.net/projects/motion/files/latest/download?source=files
Ссылка может измениться со временем.
3. Распаковываем скаченный архив
#tar -xvzf motion-3.2.12.tar.gz
4. Переходим в распакованную папку
#cd motion-3.2.12
5. Запускаем скрипт конфигурирования
#./configure
*******************************
Configure status
motion 3.2.12
*******************************
OS : Linux
pthread Support: Yes
jpeg Support: Yes
V4L included: Yes
V4L2 supported: Yes
FFmpeg Support: Yes
MYSQL Support: Yes
PostgreSQL Support: No
CFLAGS: -g -O2 -D_REENTRANT -DHAVE_FFMPEG -I/usr/include -DFFMPEG_NEW_INCLUDES -DHAVE_FFMPEG_NEW -I/usr/include/mysql -DMOTION_V4L2 -DTYPE_32BIT="int" -DHAVE_BSWAP
LIBS: -lm -lpthread -ljpeg -L/usr/lib64 -lavformat -lavcodec -lavutil -lm -lz -L/usr/lib64/mysql -lmysqlclient -lz
LDFLAGS: -L/usr/lib64
Install prefix: /usr/local
6. Собираем и устанавливаем пакет motion
#make
#make install
-----------------------------------------------------------------------
Install complete! The default configuration file, motion-dist.conf, has been
installed to /usr/local/etc. You need to rename/copy it to /usr/local/etc/motion.conf
for Motion to find it. More configuration examples as well as init scripts
can be found in /usr/local/share/motion-3.2.12/examples.

Правим конфигурационные файлы.

Пример конфигурационного файла motion лежит здесь: /usr/local/etc/motion-dist.conf
1. Копируем файл примера в рабочий файл конфигурирования:
#cp /usr/local/etc/motion-dist.conf /usr/local/etc/motion.conf
2. В кофигурационном файле можно удалить все и оставить следующие строки (пример):
#режим демона
daemon on
#Выключаем звуковой сигнал при обнаружении движения
quiet on
#Подключаем файл конфигурации камер
#Камера в офисе, в кабинете 11
thread /usr/local/etc/thread1.conf
#Камера в г. Уфа где-то на Баландина
thread /usr/local/etc/thread2.conf
Основные директивы получившегося файлы - это thread подключающие описания IP камер.
3. Создаем файлы описаний IP камер (источников):
#touch /usr/local/etc/thread1.conf
#touch /usr/local/etc/thread2.conf
Пример наполнения файла настроек IP камеры для случая D-Link DSC-2102:
#Параметры доступа к камере
netcam_url http://10.200.16.231/video/mjpg.cgi
netcam_userpass <логин>:<пароль>

#Разрешение камеры. Числа должны быть кратны 16.
width 640
height 480

#Максимальное количество кадров, которые будут захвачены из камеры в секунду
framerate 30

#Отключаем сохранение фотографий с камеры
minimum_frame_time 0

#Максимальная длительность файла
max_mpeg_time 600

#Максимальный размер файла с движеним в секундах
gap 600

#Записывать все, даже если нет движения, если - off, то записывать будем только видео с движением 
output_all on

output_normal off
output_motion off

#Подключаем модуль ffmpeg для преобразования video
ffmpeg_cap_new on
ffmpeg_video_codec mpeg4

#Диретория, в которую будет писаться видео
target_dir /mnt/cam/cam1

#Порт web-сервера
webcam_port 8081

#Настройки качества в процентах для mjpeg изображения кадров
webcam_quality 90
webcam_motion 2
#Частота кадров с WEB камеры
webcam_maxrate 10
webcam_localhost off

#Задаем формат сохраняемого файла
movie_filename %Y%m%d%H%M%S

#Убираем текст-дату в правом нижнем углу видео
text_right

Для второй IP камеры параметры настройки могут быть такие:

#Параметры доступа к камере
netcam_url http://ХХ.ХХ.ХХ.ХХ/cgi-bin/nph-zms?mode=jpeg&monitor=9&scale=100&maxfps=25&user=admin&connkey=378295&rand=1370497894

#Разрешение камеры. Числа должны быть кратны 16.
width 352
height 288

#Максимальное количество кадров, которые будут захвачены из камеры в секунду
framerate 30

#Отключаем сохранение фотографий с камеры
minimum_frame_time 0

#Максимальная длительность файла
max_mpeg_time 600

#Максимальный размер файла с движеним в секундах
gap 600

#Записывать все, даже если нет движения, если - off, то записывать будем только видео с движением 
output_all on

output_normal off
output_motion off

#Подключаем модуль ffmpeg для преобразования video
ffmpeg_cap_new on
ffmpeg_video_codec mpeg4

#Диретория, в которую будет писаться видео
target_dir /mnt/cam/cam2

#Порт web-сервера
webcam_port 8082

#Настройки качества в процентах для mjpeg изображения кадров
webcam_quality 90
webcam_motion 2
#Частота кадров с WEB камеры
webcam_maxrate 10
webcam_localhost off

#Задаем формат сохраняемого файла
movie_filename %Y%m%d%H%M%S

#Убираем текст-дату в правом нижнем углу видео
text_right

Главное в этих файлах - это строки определяющие параметры доступа к камере. Для каждой модели камеры строки будут разные. В некоторых случаях требуется авторизация по логину и паролю (см первый пример)
По ссылке http://www.ispyconnect.com/sources.aspx можно найти описания подключений к разным моделям камер.
Для каждой камеры (источника) в файле thread<N>.conf необходимо индивидуально указать папку, куда будет вестись запись роликов с камеры и web-порт вещания камеры, к которому можно будет подключаться по HTTP для просмотра изображения on-line.
Директивы должны быть разными для каждой камеры:
target_dir /mnt/cam/cam<N>
webcam_port <N>
Дополнительные примеры по настройке файлов конфигурации лежать в папке:
/usr/local/share/motion-3.2.12/examples

4. Создаем папки для записей видео с камер:
#mkdir /mnt/cam/cam1
#mkdir /mnt/cam/cam2

Запускаем и останавливаем пакета motion

1. Запуск motion в режиме теста выполняется командой:
#motion –n
или
#motion –s
2. Для запуска сервиса в автоматическом режиме, необходимо добавить Motion в автозагрузку. Это делается в файле /etc/rc.local.
Сначала я добавил в файл строку
motion -c /usr/local/etc/motion.conf
Но так почему-то не заработало, так как система не могла распознать путь к программе motion.
Исправляем так:
- Узнаем путь к файлу-программе motion:
#whereis motion
motion: /usr/local/bin/motion /usr/local/etc/motion.conf
- Теперь вписываем в nano /etc/rc.local
/usr/local/bin/motion -c /usr/local/etc/motion.conf
- Перезагружаемся

3. Остановить пакет motion следует завершением процесса в системе.
Ищем номер процесса (PID) motion
# ps ax | grep motion
1532 pts/0 S+ 0:00 grep motion
9281 ? Sl 6190:58 motion
Завершаем процесс motion
#kill 9287

Настраиваем конвертирование видео и автоудаление старых файлов записей с камер.

После описанной выше настройки у нас будут иметься две папки (/mnt/cam/cam1 и /mnt/cam/cam2) в которые каждые 10 минут будут сохраняться видеофайлы в формате avi. Что бы файлы можно было просмотреть в браузере, необходимо их сконвенртировать в формат flv. Для этого используется следующий скрипт, который кроме конвертации файлов в flv, еще и удаляет старые файлы avi.

#!/bin/sh

#Задаем начальные переменные
FOLDERSOURCE="/mnt/cam/"
FOLDERDEST="/var/www/html/cam/"
SUFF="flv"

#Получаем список файлов с датой модификации более 30 минут
#конвертируем файлы и отправляем в папку web-сервера
for file in `find $FOLDERSOURCE -mmin +30 -print | grep '.avi'`
do
  XXX=${file:${#FOLDERSOURCE}} #Отрезаем начальный путь к файлу,
  #затем конструкцией ${XXX%avi} отрезаем окончание avi
  /usr/bin/ffmpeg -i $file -ar 22050 -ab 32k -f flv -b 700k -s      640x480 -y $FOLDERDEST${XXX%avi}$SUFF >/dev/null 2>&1
  rm -f $file
done

Теперь в папках /var/www/html/cam/cam1 и /var/www/html/cam/cam2 (они должны быть заранее созданы) копяться файлы, пригодные для просмотра в web-браузере. Что бы файлы не заняли пространство всего жесткого диска, необходимо удалять их с некоторой периодичностью.
Пример скрипта, который удаляет файлы старше 720 минут (12 часов)

#!/bin/sh
#Задаем папку для удаления
FOLDERSOURCE="/var/www/html/cam/"
for file in `find $FOLDERSOURCE -mmin +720 -print | grep '.flv'`
do
  rm -f $file
done

Оба описанных скрипта необходимо поместить в cron. Первый скрипт у меня называется convertvideo2.sh, а второй convertvideo_olddel.sh
Записи в /etc/cron выглядят так:
*/30 * * * * root /usr/bin/convertvideo2.sh
25 * * * * root /usr/bin/convertvideo_olddel.sh

Вывод результатов работы в браузер.

1. Для вывода видео в браузере записанных роликов воспользуемся плеером jwplayer (http://www.jwplayer.com/about-jwplayer/). Файлы плеера (swfobject.js, player.swf) положим в корень web-сервера. В html странине видео можно проиграть например так:
<script type=text/javascript src=swfobject.js></script>
<div id='player'>Невозможно загрузить фильм</div>
<script type=text/javascript><!--
var so = new SWFObject('player.swf','mpl','640','480','8');
so.addParam('allowfullscreen','true');
so.addParam('flashvars','file=http://ХХ.ХХ.ХХ.ХХ/cam/cam1/<Имя файла>');
so.write('player');
// --></script>

2. Для просмотра видео on-line можно воспользоваться скриптом cambozola (http://www.charliemouse.com/code/cambozola/).
Сам скрипт (cambozola.jar) помещается в корень web-сервера. А в HTML страницу вставляется:
<div>
<applet code='com.charliemouse.cambozola.Viewer' archive='cambozola.jar' width='640' height='480'>
<param name='url' value='http://10.200.104.13:8082'>
</applet>
</div>
Здесь http://10.200.104.13:8082 - это url по которому вещает motion.

Теперь для просмотра видео в режиме ON-LINE необходимо установить на компьютер бесплатное программное обесечение Java Runtime Environment (JRE). Скачать данную программу можно с официального сайта http://java.com/ru/download/index.jsp.

Полезные ссылки:

http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome - официальная документация
http://habrahabr.ru/post/72491/
http://www.ispyconnect.com/sources.aspx - база IP ссылок по камерам