LINUX.ORG.RU

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

 , ,


0

1

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

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

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

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

sanekru
() автор топика
Ответ на: комментарий от 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 ★★
()

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

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

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

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

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

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

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