savostin
@savostin
Еще один программист

FFMPEG и обрыв входящего HTTP (mjpeg) потока?

Подскажите пожалуйста как реализовать выход из ffmpeg при обрыве входящего http потока с ip-камеры?

Т.е. есть, скажем, понятие как сессия: камера включилась -> началась запись, камера выключилась -> запись прекратилась, перешел в режим ожидания.

Сейчас реализовано так:
#!/bin/bash
while true; do
    while true; do
        ping -c1 -o -n -W 1 192.168.1.4 > /dev/null 2>&1 && break;.
        sleep 5s;
    done
    now=`date +"%Y-%m-%d-%H-%M-%S"`
    ffmpeg -f mjpeg -shortest -i "http://192.168.1.4/stream.cgi" -timeout 30 cam1-${now}.avi
done


Но ни timeout, ни shortest нужного эффекта не дают — ffmpeg зависает напрочь при пропадании потока и только Ctrl-C спасает.

Можно записывать по 1 минуте с ключом "-t 60", но не хотелось бы плодить столько файлов, их потом склеивать и т.п.

Можно отправлять ffmpeg в background с сохранением pid и при пропадании ping'а слать SIGINT, но тоже что-то не нравится.

Заветного ключика для ffmpeg так и не нашел.
  • Вопрос задан
  • 6258 просмотров
Пригласить эксперта
Ответы на вопрос 2
demimurych
@demimurych
хм. странная ситуация. Буквально месяц назад писал с камеры как раз mjpeg, который стабильно отваливался как только пропадала связь.
ffmpeg version 0.8.2.git, Copyright © 2000-2011 the FFmpeg developers
built on Sep 14 2011 18:29:34 with gcc 4.1.2 20080704 (Red Hat 4.1.2-50)
Ответ написан
@AlexeyNovikov
Может Вам поможет следующая информация
FreeBSD 9.1 ffmpeg 0.7.15,1
В руках недавно крутил ffmpeg c записью в файл. ffmpeg как и ffmpeg1 при исчезновении rtsp потока на менее чем примерно 25 секунд возобновляет работоспособность при его появлении. Поток прерывается переподключением не PoE ethernet хвоста. Если проходит более примерно 25 секунд при отсутствии обмена с камерой, то ffmpeg завершает свою работу самостоятельно.
Если работу ffmpeg завершать не через нажатие 'q', а по нажатию 'ctrl+z', то он остаётся звпущенным и последующие его запуски с выходам по 'ctrl+z' плодят висящие ffmpeg процессы. Чтобы от них избавиться использую:
# killall -9 ffmpeg
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы