当多个循环输入缓冲区中的任何一个溢出时如何使 ffmpeg 失败

How to make ffmpeg fail when any of multiple circular input buffers overruns

我使用如下方式将两个多播重新复用为一个:

ffmpeg -i udp://239.1.1.1:5000 -i udp://239.1.1.2:5000 -map 0:v -map 0:a -map 1:a -codec copy -f mpegts udp://239.1.1.3:5000

如果其中一个多播消失,另一个很快就会超出其循环缓冲区,导致该输入线程按预期退出。

不幸的是,由于没有输入,另一个循环缓冲区没有溢出,所以 ffmpeg 挂起,什么都不做。

是否可以将 ffmpeg 配置为如果 任何 输入线程退出,ffmpeg 将停止?

提前致谢!

答案是在选项中添加-xerror以强制ffmpeg在错误时停止并退出。

这可以与相关输入的 -timeout 值结合使用,在这种情况下,ffmpeg 将在该时间段内没有数据到达时立即退出。

或者,可以使用循环缓冲区溢出来触发错误,但是ffmpeg直到next从输入缓冲区读取到线程消息队列时才会真正失败,这需要失败的多播返回,因为线程消息队列将被阻塞(取决于指定的 fifo_sizethread_queue_size 选项)。