Понадобилось как-то собрать регистратор для трех ip-камер,
с железом был напряг, поэтому под решение задачи было принято решение использовать виртуальную машину на сервере виртуализации Proxmox.
Камеры использовались такого типа:
Сразу оговорюсь, что в качестве хранилища использовался 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 Гб.