假设我有一批代表 2 FPS 视频的 40 个 JPEG,我想为 HLS 直播流生成一个m3u8播放列表 + h264ts片段 - 所以我做这样的事情:
ffmpeg -y -framerate 2 -start_number 0 -i /frames/frame_%d.jpg -frames:v 40 \
-c:v libx264 -crf 21 -preset veryfast -g 2 \
-f hls -hls_time 4 -hls_list_size 5 -hls_flags omit_endlist \
-start_number 0 -segment_start_number 0 -segment_list_flags +live video/stream.m3u8
它给了我一个像这样的播放列表:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
stream0.ts
#EXTINF:4.000000,
stream1.ts
#EXTINF:4.000000,
stream2.ts
#EXTINF:4.000000,
stream3.ts
#EXTINF:4.000000,
stream4.ts
伟大的。现在假设我在第一批之后得到另一批 40 个 JPEG,我想删除stream0.ts(原始 40 个 JPEGS 的前 4 秒 / 8 帧),并添加一个新stream5.ts的(接下来 40 个 JPEG 的前 4 秒 / 8 帧) JPEG):
ffmpeg -y -framerate 2 -start_number 8 -i /frames/frame_%d.jpg -frames:v 40 \
-c:v libx264 -crf 21 -preset veryfast -g 2 \
-f hls -hls_time 4 -hls_list_size 5 -hls_flags omit_endlist \
-start_number 1 -segment_start_number 1 -segment_list_flags live video/stream.m3u8
然后我得到这个:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:4.000000,
stream1.ts
#EXTINF:4.000000,
stream2.ts
#EXTINF:4.000000,
stream3.ts
#EXTINF:4.000000,
stream4.ts
#EXTINF:4.000000,
stream5.ts
伟大的。但是,当我尝试使用 HLS.js 或 video.js 之类的东西播放 HLS 流时,我的视频流会停止。当我用 来检查流时TSLemurs HLS Checker tool,它会警告我“CC”错误,我认为这意味着连续性计数器错误:
如何修复这些连续性计数器错误?无论如何用ffmpeg做这件事吗?
