【发布时间】:2020-03-07 01:04:23
【问题描述】:
假设我有一批代表 2 FPS 视频的 40 个 JPEG,我想为 HLS 直播流生成一个 m3u8 播放列表 + h264 ts 片段 - 所以我这样做:
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 个 JPEGS,我想删除 stream0.ts(最初 40 个 JPEGS 的前 4 秒 / 8 帧),并添加一个新的 stream5.ts(前 4 秒 /接下来 40 张 JPEG 的 8 帧):
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 做到这一点?
【问题讨论】:
-
未实施。考虑在 trac.ffmpeg.org 上开一张票 - 虽然先搜索,但我想已经有一张了。
-
谢谢@Gyan。太糟糕了 - 但是,如果我在每个段之间包含一个 #EXT-X-DISCONTINUITY 标记,我似乎可以避免 HLS 流中的连续性计数器错误。所以我认为这将是我现在的方法。