LINUX.ORG.RU

Скрипт автоматического запуска ffmpeg

 , ,


0

1

Доброго времени!

Требуется скрипт автоматической загрузки двух экземпляров ffmpeg для записи с двух камер rtsp. Встаёт вопрос по проверке работы самих камер при запуске и непосредственно записи, например если камеру принудительно выключить и включить, то ffmpeg при этом продолжает писать квадрат Малевича и соответственно запись не ведётся. На ум приходит брать из stdout строку со временем записи и раз в несколько секунд смотреть изменилось ли время (т.к. при неактивности камеры время не идёт). А по поводу проверки при запуске тоже анализировать stdout и если какие проблемы перезапуск. Вопрос к вам по реализации такого алгоритма? Или может есть решение проще? Может ffmpeg имеет какой API чтоб не парсить stdout?

Если ты будешь этот велосипед переизобретать, в такие дебри залезешь… Используй готовое. Бери motion.

anonymous
()
Ответ на: комментарий от anonymous

Изначально собственно я и хотел motion и чтобы только по движению запись велась, но из за постоянного детектирования железо не справляется и при записи идёт перекодировка потока, что ещё более нагружает машину! Железо древнее, intel atom n330 и 2gb оперативы нагрузка катастрофическая у motion, а чисто захватить поток и записать его в файл никаких ресурсов не требуется, и очистка файлов старше n дней запускается по cron раз в сутки и всё великолепно работает! Но вот хотелось бы чтобы проверка на доступность была

sanekru
() автор топика
Ответ на: комментарий от sanekru

ты пошарься, тут ещё один такой же знаменоносец ходит. Он несколько лет уже пилит то, что планировалось сделать за выходные.

max_lapshin ★★★★★
()
Ответ на: комментарий от sanekru

Я бы написал обертку для ffmpeg на питоне, чтобы видео поток выдавался в stdout, питон бы читал этот вывод в буфер, скажем 5 секунд (сколько-то байт) и записывал на диск. Попутно раз в n секунд/минут проверял бы что лежит в буфере. С черным квадратом там скорее всего будут какие-нибудь нули или почти все нули, можно вычислить среднеквадратичное значение (RMS) нампаем, посмотреть как оно выглядит и задать порог, ниже которого требуется перезапуск.

masa ★★
()

если камеру принудительно выключить и включить, то ffmpeg при этом продолжает писать квадрат Малевича и соответственно запись не ведётся.

ffmpeg не может писать когда когда источник прерывается, он завершается, можно указать таймаут побольше-поменьше -timeout 1000000 1М -секунда.

Работает годами примерно такой скрипт:

#!/bin/bash

while true; do

ffmpeg -loglevel quiet -rtsp_transport tcp -i rtsp://... -c copy -t 01:00:00 $(date +"%Y-%m-%d_%H-%M-%S").mp4

done;

случалось когда ffmpeg зависал, но очень редко.

yandrey ★★
()
Ответ на: комментарий от max_lapshin

Он несколько лет уже пилит то, что планировалось сделать за выходные.

Выходные у всех разные. Может у человека они ещё и не кончились.

mamina_radost
()

А у этих камер нет какого-нибуть healthcheck, который можно было бы нп каждую секунду опрашивать?

Тогда параллельно запусти скрипт, если healthcheck говорит, что все плохо, останавливай ffmpeg, как только запустилось, запускай ffmpeg.

chkalov
()

Если в этом случае ffmpeg перестает писать в stdout, то systemd юниты имеют опцию в таком случае перезапускаться

goingUp ★★★★★
()
Ответ на: комментарий от yandrey

В том и дело что процесс висит, может time out там гигантский, пару минут точно висит. По скрипту мне кажется прям совсем без проверок не good, Я думаю хотя бы узнать PID процесса и по нему уже проверять раз хотя бы в пол минуты + log какой никакой прикрутить и в принципе нормально получиться!

sanekru
() автор топика
Ответ на: комментарий от chkalov

Не, там тупо поток и ещё пара портов для своего сервера, обычная Китай поворотная камера за 1500 рэ

sanekru
() автор топика
Ответ на: комментарий от masa

Ну как то через чур выходит, да и как сказали выше вроде как должен прерываться по отваливанию, так что думаю это через чур будет, да и ресурсов будет поджирать думаю тоже из за буферизации.

sanekru
() автор топика
Ответ на: комментарий от sanekru

Может через чур, но по идее строчек 20 кода и интересное приключение. Просадки из-за буфера не будет, это просто байтики перекладываются в памяти. Просадка может быть в момент анализа картинки, но если это делать не часто, раз в несколько секунд, то и тут разницы не будет.

masa ★★
()
Последнее исправление: masa (всего исправлений: 1)
Ответ на: комментарий от anonymous

я в motionplus этого не нашёл! Установил, настроил, посмотрел запредельную нагрузку на проц, поигрался немного с параметрами, посмотрел веб морду, и решил что достаточно будет голого ffmpeg

sanekru
() автор топика
Ответ на: комментарий от masa

Идея то интересная конечно, но с питоном не знаком от слова совсем, да и собственно с программированием только только…

sanekru
() автор топика
Ответ на: комментарий от sanekru

mediamtx всё в одном, один процесс будет писать со всех камер

...
  record: yes

  recordPath: ./recordings/%path/%Y-%m-%d/%H-%M-%S-%f

...

paths:

  cam1:
     source: rtsp://10.1.1.1

  cam2:
     source: rtsp://10.1.1.2

yandrey ★★
()
Последнее исправление: yandrey (всего исправлений: 1)
Ответ на: комментарий от anonymous

А оно реально работает для записи видео? Если кадр снять - то норм, но вот что motion, что его eyemotion в режиме видео выдавали слайдшоу в 8fps.

ofp
()
Ответ на: комментарий от ofp

Да не нормально работает, сначала попробывал на ноуте завести, так там всё отлично было, единственное что от снега запись по движению была, но это легко решается корректировкой срабатывания. Железо на ноуте AMD Ryzen 5 5500U и загрузка с двух камер была %40 в среднем.

sanekru
() автор топика
Ответ на: комментарий от yandrey

Да интересное предложение, прям видео комбайн на все случаи жизни! Но для моей задачи это прям very much!

sanekru
() автор топика

А разве он что то пишет, когда камера не пишет? Какой квадрат малевича не понял? Пусть процесс висит, сделай лимит по duration на час только что бы файл не раздувался, ну или в hls сразу муксировать, что имхо круче. А если конекта нет с камерой, то тут только сам процесс запускать каждые 5 сек. Ну а скриптов готовых...имхо бред искать, проще самому наляпать

gobot ★★★★
()
Последнее исправление: gobot (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.