Регистратор для IP камеры на основе персонального ПК

Понадобилось как-то собрать регистратор для трех ip-камер,
с железом был напряг,  поэтому под решение задачи было принято решение использовать виртуальную машину на сервере виртуализации Proxmox.
Камеры использовались такого типа:
ip камера
Сразу оговорюсь, что в  качестве хранилища использовался NAS и связь с ним осуществлялась через NFS, стоит отметить что NFS подключалась непосредственно к серверу Proxmox и через mount point виртуальный регистратор записывал в NFS дерикторию.

Что мне понадобилось для сборки регистратора

Операционная система для гостевой системы выбрана Debian 9.
По началу планировалось использовать VLC для записи потока, но после тестов пришлось отказаться от этой идеи — большое потребление ресурсов и периодические обрывы и невозможность записывать файлы определенного размера, от идеи использования VLC пришлось отказаться.

Следующим на очереди ПО выступил ffmpeg, который поставился из репозиториев командой:

1
apt install ffmpeg

Режим записи выбрал такой: записываю файлы по 10 минут, останавливаю запись и складываю в определенный каталог с именем кабинета и даты в которую ведется запись, раз в десять минут проверяются наличие старых файлов, которые удаляются. Циклическую перезапись по другому не нашел как реализовать.

Пишем скрипты для запуска регистратора

Скрипт запуска камеры /srv/registrator.sh

1
2
3
4
5
6
7
#!/bin/bash
#Подключаю конфигурационный файл
. /etc/cam/$1.cfg
if ! [ -d /mnt/cam/$kab/`/bin/date +%m`/`/bin/date +%d`]; then
    /bin/mkdir -p /mnt/cam/$kab/`/bin/date +%m`/`/bin/date +%d`;
fi
/usr/bin/ffmpeg -t 00:10:00 -i $url -vcodec copy -b 64k -acodec ac3 "/mnt/cam/$kab/`/bin/date +%m`/`/bin/date +%d`/$kab-$(/bin/date +%Y-%m-%m-%d+%H-%M-%S).avi"&

-t 00:10:00 — Записывать 10 минут и выйти

Скрипт /srv/watchdog.sh — перезапускает службы каждый 10 минут, с 8:40 до 20:00, в остальное время запись не ведется.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
if [ $(/bin/date +%H%M) -gt 840 ]
then
    if [ $(/bin/date +%H%M) -lt 2000 ]
        then
             /bin/systemctl start cam@cam1
        else
             /bin/systemctl stop cam@cam1
       fi
    else
       /bin/systemctl stop cam@cam1
fi
#Удаляем старые файлы и пустые каталоги.
/usr/bin/find /mnt/cam -type f -mtime +24 -delete -print
/usr/bin/find /mnt/cam/ -empty -type d -delete -print

Автоматический запуск службы регистратора

Создаем файл запуска службы камер /etc/systemd/system/cam@.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Cam Recoder
After=network.target

[Service]
#EnvironmentFile=-/etc/default/cam
ExecStart=/srv/registrator.sh %I
KillMode=process
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target

Добавляем конфигурационный файлы для камер в /etc/cam
cam1.cfg

1
2
url="rtsp://admin:admin@x.x.x.x:554/RVi/1/1"
kab="K207"

Ставим службу камеры в автозапуск:

1
systemctl enable cam@cam1

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

По поводу места на диске: у меня один 10-ти минутный файл занимает 300Мб на диске, три камеры ведут запись с 8:40 до 20:00, записи одной камеры в день занимают 19,5 Гб.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.