我通过管道将处理过的视频从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。
任何帮助都会很棒。
答案 0 :(得分:1)
我知道我正在回答我自己的问题,但我已经更改了以下代码
./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 `
好像已经成功了。