我使用以下方法将两个多播重新复用为一个:
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实际上不会失败,直到下一次从输入缓冲区读取到线程消息队列,这需要返回失败的多播,因为线程消息队列将被阻止(取决于指定的fifo_size
和thread_queue_size
选项(。