Web-Interface для Motion

    После обновления видеосервера под debian, было принято решение переделать систему видеонаблюдения.
    Motion было решено оставить, но возникла необходимость в более человеческом интерфейсе для просмотра архивных записей.
    Очередные поиски в Интернет так и не дали никаких приемлемых результатов, в результате чего было принято решение о создании собственного продукта.
    После небольших колебаний, выбор пал на Rails. Никакой религии, просто захотелось получше изучить этот фреймворк и замечательный язык программирования. В качестве СУБД используется PostgreSQL.
    Результат работы под капотом...

    Для начала чуть-чуть поподробнее про настройку motion.
    В связи с тем, что хотелось, по-возможности, обойтись чистым HTML5, пришлось переустановить motion вручную, включив ему поддержку записи файлов в ogg. Благо авторы данной программы реализовали ее, за что им большое спасибо. Процесс сборки и установки описан хорошо на странице проекта, поэтому не буду его здесь расписывать, тем более, что под разные дистрибутивы он будет отличаться. Ссылка на домашнюю страницу www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuideInstallation.
    Заострю внимание только на настройке продукта.
    Так как изначально motion был установлен из пакетов, то после переустановки не стал переносить папку с конфигурацией из /etc в /usr/local/etc.
    И еще один пункт, сам motion запускается при помощи runit, поэтому в конфиге он отключен режим демона.
    Расстановка сил следующая:
    1. Конфиги motion лежат в /etc/motion.
    2. Видео пишется на отдельный жесткий диск, смонтированный в директорию /video, в папки с именами камер.
    3. В базу откладываются записи, в которых хранится информация о времени события, полному пути к файлу события, типом файла (в моем случае видео).
    Структура таблицы
    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;

    -- Index: thread

    -- DROP INDEX thread;

    CREATE INDEX thread
    ON records
    USING btree
    (thread );

    4. Для живого просмотра (в режиме реального времени) с камер использутеся интерфейс motion.

    Основные изменения в конфиге следующие:
    /etc/motion.conf
    ffmpeg_video_codec ogg

    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/thread1.conf
    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 сайт.
    Bitbucket:
    git clone webdev4u@bitbucket.org/webdev4u/motion_web.git
    Github:
    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.
    5. rake db:migrate
    6. rake db:seed
    7. Для проверки можно будет запустить rails s. Сервер будет слушать на 3000 порту. Если все нормально, можно работать.
    8. И напоследок, настроить задание для крона по чистке базы. По умолчанию хранятся записи за 21 день, но можно изменить этот параметр в файле app/models/record.rb 12 строка, но лучше в lib/tasks/crontask.rake строку
    Record.clean_old_records
    заменить на
    Record.clean_old_records Нужное_количество_дней.
    После чего прогнать команду
    whenever --update-crontab из под пользователя, от имени которого будет работать сайт.

    Скриншот главной страницы:

    Страница входа:

    Живой просмотр:

    Список камер:

    Просмотр архива:

    Добавление пользователя:

    Добавление камеры:
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 24
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Потому что тот mpeg, который пишет motion, невозможно просматривать в браузере средствами HTML5. Надо устанавливать сторонние плееры, чего хотелось избежать. Только по этой причине.
      • 0
        За проделанную работу конечно плюс, но вопрос — выбор postgres т.к. уже была задействована данная СУБД? ибо согласно схеме БД из трёх таблиц думаю, что можно обойтись и sqlite… Да и беглым взглядом на код не увидел каких-то сложных выборок или хранимок
        • +1
          И не совсем понятна фраза
          Возможно понадобится установка NodeJS

          Вы не уверены нужен ли Node.js? Не холивара ради, но если используете Node.js почему бы не сделать front-end к Motion именно на нем?
          • 0
            Или на Event Machine и закопать ноду
            • 0
              На сервере (debian7) Rails потребовал какой-то JavaScript интерпретатор. На локальной машине(Ubuntu 12.04) такого не было, видно что-то было уже установлено. Поэтому и написал, что «возможно потребует».
              • 0
                Если Node.js не установлен, можно просто добавить гем therubyracer
            • 0
              Базу можно поставить любую, не отрицаю. Просто изначально хранились записи за большее количество дней, плюс все картинки, что составляло порядка 300000 записей в день. По этой причине и отказался от хранения картинок. Сложных выборок и хранимок нет, вы правы. Ну, и как написал в статье, хотелось таким образом Rails изучить и как раз в связке с PostgreSQL.
            • +1
              Насколько я знаю, Motion еще имеет детектор движения? Какие у него требования к железу? Хотелось бы узнать вашу связку: кол-во камер, качество съемки, характеристики железа.
              • 0
                Да, у меня motion настроен как раз для записи только по событиям, а не постоянно. В данный момент 9 камер, процессор Intel® Core(TM)2 CPU 6400 @ 2.13GHz, RAM 2GB, средняя загрузка около 20%. Камеры Axis разных серий. Размер изображения 640х480. На 21 день хватает винта на 300Gb. Но это в моем случае. Вполне возможно, что при большем количестве событий, может не хватить данного пространства.
              • 0
                Пользуясь случаем, у кого-нибудь получилось снимать h264 rtp видео и конвертировать его в mjpg для motion?

                Я использую для этого vlc, но в результате конвертированное видео mjpg постоянно лагает. А motion записывает его то ускоренно, то не записывает вовсе.

                Процессора достаточно, используется сего около 20%.
                • 0
                  У VLC вообще с MJPG как-то не задалось. Я когда-то пробовал делать трансляцию с /dev/videoX в MJPG формате в веб — это просто ад адовый. То видео отстаёт, то вообще не понятно в каком формате передаёт, что браузер отказывается это отображать. В итоге забил я с этой идеей.
                • 0
                  Спасибо большое за отличную работу. Для своих будущих идей как раз искал что-то подобное. Скоро, когда будет время, обязательно попробую Ваш интерфейс =) Уверен, должен оказаться удобным.
                  • 0
                    Красавцы, большое спасибо за проделанную работу!!!
                    Год назад поднимал систему видеонаблюдения на motion, и не нашел ни одного веб интерфейса. А тут такой классный, с богатым функционалом и на html5, шик!!!
                    • 0
                      А как же KMotion?
                      Но вообще, разнообразие это отлично, спасибо ТС за статью и оупенсорс!
                      • 0
                        О, спасибо за подсказку :). Надо его попробовать.
                        • 0
                          KMotion более не поддерживается. Последняя версия за 2011 год и то тестовая.
                      • 0
                        Я хотел развернуть собственную систему видеонаблюдения, но ничего не получилось motion постоянно терял камеры, я так и не нашел причину, в результате — забросил.
                        • 0
                          У меня motion дома крутится года три уже. Снимает вход в подъезд и парковки часть. Так меня по началу раздражало как сделать архив по дням. Программа делала тучу файлов за сутки. Но написав пару скриптов на питоне полностью автоматизировал процесс. Теперь у меня есть архивы за последние пол месяца всегда.
                          • 0
                            А в чём была проблема? Он там умеет раскладывать материал в папки по дням. Если надо удалять старые записи, то можно навестить скрипт на одно из событий. Ну или по крону…
                            • 0
                              Может конечно все устаканилось, но у меня получалось за сутки не один файл суточного видео, а туча мелких файликов. Их просмотреть было накладно, так как кусочек видео в пару секунд как то утомляло. Грешен, но я не разобрался как сделать чтоб был один файл. Сейчас же я когда написал пару скриптов то дергаю их по крону, один сначала все переносит в временную папку, потом в 4 утра когда само меньше активности я запускаю склейку всего этого с перекодировкою с более ужатый формат. Делаю это в 4 утра вспомнил так как я сплю, если в 12 ночи запускать то я как раз бывает сижу чтото пишу и тут оно чуствуется нагружено как то. Ну и после все темповое у меня удаляется как и очередная дата. Файл за сутки около 2 гб получается, что мне как раз. А бывали и 15 гб за сутки что было перебор.
                          • 0
                            А сразу по теме кто использует, получилось ли у кого запускать нормально работать в HD формате? 640 на 480 маловато, хотелось бы больше деталей но когда я пробовал — работало все это очень нестабильно, иногда сваливалось разрешение вообще в 170 на 140 точек.

                            Спасибо за советы.
                            • +1
                              Около года боролся с motion в плане юзабилити = писал скрипты сортировки, конвертирования, чистки архива, удобного и удаленного просмотра архива, веб морды. Все вроде работало, но с вечными проблемами и требовало к себе постоянного внимания.
                              Потом набрел на avreg и забыл обо всех проблемах. Русский проект основанный на LinuxDVR. Бесплатно доступно 4 канала(4 камеры), но при необходимости находятся ключики.
                              Очень много настроек захвата, обработки, просмотра, детектора, уровней доступа, вообщем делает все что умеет и не умеет motion. Ставится из своих репозитариев и отдельным дистрибутивом. Все управление через браузер. Советую обратить на него внимания, после motion в avreg забыл что такое консоль на сервере видеонаблюдения.
                              • 0
                                Интересно, а на MR3020 такая штука поставится? Достал сегодня один, стоило бы попробовать…

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое