Есть ли способ в ffmpeg показать зацикленное видео или изображение, если входящий поток udp:// не активен?
Очень похоже на то, как проигрыватель показывает ожидание braodcast, чтобы запустить изображение / видео, пока не начнется прямая трансляция.
Есть ли способ в ffmpeg показать зацикленное видео или изображение, если входящий поток udp:// не активен?
Очень похоже на то, как проигрыватель показывает ожидание braodcast, чтобы запустить изображение / видео, пока не начнется прямая трансляция.
Вот трюк ... FFmpeg и связанные с ним инструменты, FFserver и FFplay, не имеют никакого механизма для непосредственного переключения ввода на один работающий вывод. У них также нет встроенного способа запуска внешнего события при запуске потока UDP; по крайней мере, ничего, что я смог найти.
Чтобы осуществить запланированные действия, одним из решений будет запуск экземпляра FFmpeg для передачи потока вашего изображения PSB на ваш сервер, а затем - как только начнет проходить подлинный поток UDP - убить этот поток и запустите второй с содержимым потока UDP. И FFmpeg, и FFplay будут «вращаться» (то есть сидеть в состоянии прослушивания), если задан вход потока UDP, но поток не принимается, поэтому зарегистрированный экземпляр FFplay можно использовать в качестве триггера. (Запуск второго экземпляра FFmpeg во время работы первого из них просто испортит передачу потока на ваш сервер).
Конечно, уничтожение первого потока и запуск второго может быть не идеальным, но если допустимо очень короткое прерывание в потоке RTMP, это должно помочь вам. Если прерывание неприемлемо, вам придется пойти по пути передачи как PSB-образа, так и UDP-потоков в именованные каналы, а затем отправить их на ваш RTMP-сервер через 3-й экземпляр FFmpeg с помощью демультиплексора concat. В этом случае вам понадобится точно совпадающее кодирование видео и аудио в обоих исходных потоках, чтобы concat работал, и, поскольку вы используете сторонний поток, могут возникнуть проблемы, если исходный стример изменит свои настройки.
В любом случае, вот ссылка на довольно простой bash-скрипт, который запускает сценарий kill1-start2, как я описал. (Скрипт на Slexy.org). Я предупрежу вас, что я не эксперт по написанию сценариев, поэтому кто-то может придумать более простой и / или более чистый способ сделать это.