我正在通过管道将处理后的视频从 openCV 传递到 ffmpeg,这是代码
./OpenCV &
tail -n +0 -f out.avi | ffmpeg -i pipe:0 -hls_time 1 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8
我的问题是输出.ts文件没有在统一的持续时间内,它们从一个文件到另一个文件。
这些大多是长,比如 60 秒。这意味着连接客户端必须等待第一个流完成,然后才能创建播放列表文件 (.m3u8( 文件。因此,在本例中,它们比实时视频晚 60 秒左右,如果下一个 .ts 文件较大,则流式传输将停止,直到完成。如果客户端尝试在创建下一个 .ts 文件之前播放,则会播放第一个 .ts 文件。
openCV 的帧速率为每秒 1 帧。
tail 将 openCV 的输出文件称为 (out.avi( 更改为 stdout。
任何帮助都会很棒。
我在回答我自己的问题,但我更改了下面的代码
./OpenCV &
tail -n +0 -f out.avi | ffmpeg -i pipe:0 -hls_time 1 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8 `
自
./OpenCV &
tail -n +0 -f out.avi | ffmpeg -i pipe:0 -f hls -g 2 -hls_time 2 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8 `
似乎已经做到了。