Установка Motion на Linux Ubuntu
В двух словах, сервер Motion позволяет записывать видео с IP-камер и предоставить доступ его просмотру посредством веб-интерфейса.
Установка и запуск
Motion в Ubuntu устанавливается из репозитория:
apt-get install motion
Создаем каталог и файл для логов motion:
Редактируем владельца для лог-файла:
chown motion:motion /var/log/motion/motion.log
В нем либо не должно быть параметра start_motion_daemon, либо он должен иметь значение:
Разрешаем автоматический запуск демона и перезапускаем сервис:
systemctl enable motion
systemctl restart motion
Можно проверить, что сервис работает корректно:
systemctl status motion
Настройка веб-интерфейса
По умолчанию, веб-интерфейс motion запускается на адресе localhost, что означает, что он будет доступен только с локального компьютера, что не совсем удобно для сервера.
Открываем конфигурационный файл:
Редактируем следующие строки:
webcontrol_localhost off
.
stream_localhost off
systemctl restart motion
Зайти на веб-интерфейс можно по адресу http://192.168.0.15:8080 для управления конфигурацией сервера, и http://192.168.0.15:8081 для подключения к трансляции в реальном времени (где 192.168.0.15 — адрес сервера с установленным motion).
Добавление камер
Добавим несколько камер. Для этого сначала открываем конфигурационный файл:
Добавляем строки с описаниями камер (для каждой камеры свой файл с настройками):
camera /etc/motion/camera1.conf
camera /etc/motion/camera2.conf
* до версии 3.4.1 вместо camera используется thread.
Теперь создаем данные файлы:
width 1920
height 1080
framerate 20
netcam_url http://192.168.0.15/video
netcam_userpass login:password
text_left CAMERA 1\nStreet 1
target_dir /video/motion/cam1
threshold 2000
lightswitch_percent 60
minimum_motion_frames 5
event_gap 10
locate_motion_mode on
locate_motion_style redbox
text_changes on
* до версии 4.1.1 вместо lightswitch_percent используется lightswitch.
. и для второй камеры:
width 1280
height 768
framerate 20
netcam_url rtsp://192.168.0.16:554/user=admin&password=&channel=1&stream=1.sdp
text_left CAMERA 2\nStreet 2
target_dir /video/motion/cam2
threshold 2000
lightswitch_percent 60
minimum_motion_frames 5
event_gap 10
locate_motion_mode on
locate_motion_style redbox
text_changes on
ffmpeg_timelapse 1
- width — разрешение видео по горизонтали.
- height — разрешение видео по вертикали.
- framerate — число кадров в секунду.
- netcam_url — ссылка на поток камеры.
- netcam_userpass — логин и пароль для доступа к видеопотоку.
- text_left — текст, который будет наложен слева снизу экрана.
- target_dir — каталог для хранения записи с камеры.
- threshold — число пикселей, которые должны измениться для срабатывания детектора движения.
- lightswitch_percent — игнорировать резкие изменения интенсивности света.
- minimum_motion_frames — количества кадров, в которых должно быть замечено движение, чтобы сработал детектор.
- event_gap — количество секунд, по прошествии которых без движения отключать действие детектора.
- locate_motion_mode — отрисовка рамки вокруг движущегося объекта.
- locate_motion_style — стиль окна. Возможны значения box, redbox, cross, redcross.
- text_changes — текст, отображающий измененные пиксели при движении.
- ffmpeg_timelapse — как часто делать запись фрагмента в файл, если нет движения.
* первая камера настроена на запись при движении, видеопоток берем посредством http-запроса. Вторая — на запись при движении + посекундная постоянная запись, видеопоток забираем с использованием RTSP.
Linux motion web интерфейс
После обновления видеосервера под debian, было принято решение переделать систему видеонаблюдения.
Motion было решено оставить, но возникла необходимость в более человеческом интерфейсе для просмотра архивных записей. Очередные поиски в Интернет так и не дали никаких приемлемых результатов, в результате чего было принято решение о создании собственного продукта. После небольших колебаний, выбор пал на Rails. Никакой религии, просто захотелось получше изучить этот фреймворк и замечательный язык программирования. В качестве СУБД используется PostgreSQL. Результат работы под капотом.
Для начала чуть-чуть поподробнее про настройку motion.
В связи с тем, что хотелось, по-возможности, обойтись чистым HTML5, пришлось переустановить motion вручную, включив ему поддержку записи файлов в ogg. Благо авторы данной программы реализовали ее, за что им большое спасибо. Процесс сборки и установки описан хорошо на странице проекта, поэтому не буду его здесь расписывать, тем более, что под разные дистрибутивы он будет отличаться. Ссылка на домашнюю страницу www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuideInstallation.
Заострю внимание только на настройке продукта.
Так как изначально motion был установлен из пакетов, то после переустановки не стал переносить папку с конфигурацией из /etc в /usr/local/etc . И еще один пункт, сам motion запускается при помощи runit, поэтому в конфиге он отключен режим демона. Расстановка сил следующая:
- Конфиги motion лежат в /etc/motion.
- Видео пишется на отдельный жесткий диск, смонтированный в директорию /video, в папки с именами камер.
- В базу откладываются записи, в которых хранится информация о времени события, полному пути к файлу события, типом файла (в моем случае видео).
CREATE TABLE records
(
id serial NOT NULL,
thread integer,
filename character varying(255),
frame integer,
file_type integer,
event_timestamp timestamp without time zone,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
CONSTRAINT records_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE records
OWNER TO motion;
CREATE INDEX thread
ON records
USING btree
(thread );
4. Для живого просмотра (в режиме реального времени) с камер использутеся интерфейс motion.
Основные изменения в конфиге следующие:
webcontrol_port 8080
webcontrol_localhost off (в том случае, если web-interface будет запускаться на другом сервере)
webcontrol_html_output on
webcontrol_authentication login:pass
sql_query insert into records(thread, filename, frame, file_type, event_timestamp, created_at, updated_at) values(‘%t’, ‘%f’, ‘%q’, ‘%n’, ‘%Y-%m-%d %T’, NOW(), NOW())
И соответственно настройки для подключения к БД.
Далее подключаем камеры
thread /etc/motion/thread2.conf
…
thread /etc/motion/threadN.conf,
где N зависит от количества наших камер.
Основные пункты в threadX.conf, где X — любое число
stream_port PortNumber — данный порт надо будет писать в поле «Порт потокового вещания» при настройке камер в web-interface. Это основные изменения при настройке motion. Как настроить сам motion в данной статье расписывать не буду. По настройке Rails хорошо расписано в статье habrahabr.ru/post/140910 . Также может возникнуть необходимость в установке NodeJS — github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
Теперь перейдем непосредственно к настройке интерфейса:
1. Клонировать при помощи git сайт.
git clone webdev4u@bitbucket.org/webdev4u/motion_web.git
git clone github.com/webdev4u/motion_web.git
2. Переименовать config/settings.local.yml в config/settings.yml и вписать туда адрес сервера, на котором запущен motion.
3. Переименовать config/database.yml.example в config/database.yml и вписать туда настройки для вашей базы.
4. Измените данные в db/seeds.rb для пользователя admin .
7. Для проверки можно будет запустить rails s . Сервер будет слушать на 3000 порту. Если все нормально, можно работать.
8. И напоследок, настроить задание для крона по чистке базы. По умолчанию хранятся записи за 21 день, но можно изменить этот параметр в файле app/models/record.rb 12 строка, но лучше в lib/tasks/crontask.rake строку
После чего прогнать команду
из под пользователя, от имени которого будет работать сайт.
Скриншот главной страницы:
Страница входа:
Просмотр архива:
Добавление пользователя:
Добавление камеры: