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
()