我知道这个问题已被问过无数次,但也从未得到过令人满意的答案。
如何让 ffmpeg 在源不可用的情况下继续工作?VLC 会等待连接再次恢复,为什么 ffmepg 没有这样的功能?
我曾尝试过:
-reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 4962 -timeout 2000000000
但都无法按预期工作。FFmpeg 仅几秒后就退出。如果连接中断,我不想重新启动 ffmpeg,因为我需要输出 HLS 片段可用。重新启动 ffmpeg 会使片段从头开始被覆盖。
答案1
FFmpeg 命令行参数是位置敏感的,所以你可能没有把它们添加到正确的位置。尝试将这些选项放在输入之前。例如:
ffmpeg -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -i input -c:v copy -c:a copy outputfile.m3u8
‘reconnect_delay_max’ 范围是 [0 - 4294]
它对我有用。
答案2
如果中断持续超过 4 秒,FFmpeg 将不会重新连接。当网络会话丢失时,ffmpeg 将退出。
原因在于,保存最大重新连接次数的变量显然是 32 位大小,包含一个数字,将其除以 1,000,000 即可得到毫秒数。因此,最大等待时间为 2^32 / 1000000 = 4294.9673 毫秒或 4.294 秒。
答案3
我有解决 TCP 连接中断问题的解决方案!只需添加选项暂停(以微秒为单位)
ffmpeg -timeout 10000000 \
-i rtsp://input_ip/h264 \
-c copy \
-f flv rtmp://output_ip