【问题标题】:ffmpeg - how to "set" continuity counters when generating .ts segments for HLS live streaming?ffmpeg - 在为 HLS 直播流生成 .ts 段时如何“设置”连续性计数器?
【发布时间】: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 流中的连续性计数器错误。所以我认为这将是我现在的方法。

标签: ffmpeg mpeg2-ts


【解决方案1】:

尽量使用-hls_flags discont_start来防止抄送错误

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2016-11-24
    • 2014-01-24
    • 2019-12-12
    • 2018-01-28
    • 2015-05-28
    相关资源
    最近更新 更多