ffmpeg с источником rtmp и выводом обратной связи v4l2: нет остановки после потери источника после обновления Ubuntu 20.04 до 22.04

За последние несколько лет мои IP-камеры безопасности были преобразованы в устройства обратной связи /dev/videoX с помощью ffmpeg, а затем обработаны с помощью Motion и других инструментов в Ubuntu 20.04 LTS. Пример командной строки, как она была запущена, выглядит следующим образом:

ffmpeg -loglevel warning -hide_banner -nostats -re -i "rtmp://{IP_OF_CAM}/bcs/channel0_ext.bcs?channel=0&stream=0&user={USER}&password={PASSWD}" -bufsize 60000k -an -f v4l2 /dev/video0 > $HOME/security/logs/BACK_IN.log 2>&1 &

Соединение с камерами нестабильное и прерывается каждые несколько часов. Это было нормально, поскольку ffmpeg остановился, когда это произошло, поэтому я мог просто проверить и перезапустить.

Однако после обновления до Ubuntu 22.04 через некоторое время движение начало падать из-за тайм-аута сторожевого таймера. Проверка поврежденных потоков /dev/videoX с помощьюvlc v4l2:///dev/video0, я вижу в потоке только статический кадр, похоже, это последний кадр перед разрывом соединения.

В журнале нет ничего, кроме

      More than 1000 frames duplicated
More than 10000 frames duplicated
More than 100000 frames duplicated

У меня есть объяснение, что поведение ffmpeg каким-то образом изменилось: при потере соединения с входным потоком rtmp ffmpeg больше не завершает работу. Он остается в каком-то состоянии зомби и продолжает обслуживать последний кадр.

Проблема странная в том, что она, похоже, присутствует в скомпилированном ffmpeg-4.2, который я использовал под Ubuntu 20.04, точно так же, как и в ffmpeg-4.4.2, поставляемом с новым дистрибутивом. Так что это может быть как-то связано с изменениями в петле/ядре v4l2.

Интересно, есть ли в сумасшедшем лабиринте флагов ffmpeg какой-нибудь вариант, который я мог бы использовать, чтобы вернуть старое поведение?

Загрузка процессора сломанным процессом ffmpeg снижается до 1-2% с обычных 8-9%. По крайней мере, это можно использовать, чтобы вызвать уничтожение прерванного потока, но было бы жаль делать это таким образом.

0 ответов

Другие вопросы по тегам