使用 FFMPEG 通过 HLS 实时传输文件,无需重新编码

使用 FFMPEG 通过 HLS 实时传输文件,无需重新编码

大家好!我真希望有人能帮助我。FFMPEG 必须能够做我想做的事情。

我想要做的是:我想通过 HLS 从硬盘实时流式传输(即广播)文件。这些文件已经按照我想要的方式进行了编码,因此无需重新编码。我想要做的就是使用 FFMPEG 将文件从 MP4 复制到 HLS 流输出。

如果您只是将 sample.mp4 复制到 HLS,FFMPEG 就可以正常工作:它会非常快速地将整个 MP4 文件拆分成多个 .ts 文件,并带有准确对应的 M3U8 文件。

但问题是:这不是广播。这是点播。区别在于,当观众加入直播时,他们应该加入正在进行的节目。例如,如果我正在播出一档名为“卡车司机日记”的长达一小时的节目,该节目于晚上 7 点开始,如果我的观众在晚上 7:15 收看,他不应该从头开始观看视频,而应该先观看已经进行 15 分钟的视频。

因此,FFMPEG 应在“实时”模式下动态生成 M3U8 文件。每隔 X 秒,FFMPEG 应通过将下一个片段添加到播放列表底部并从顶部删除旧片段来更新 M3U8 文件。

事情是这样的:如果我告诉 FFMPEG 重新编码,它工作正常。由于 FFMPEG 需要几秒钟来渲染每个片段,因此它会在每个片段渲染完成后更新 M3U8 文件。

但因为我是在复制而不是重新编码,所以这个过程进行得太快了!FFMPEG 确实会像描述的那样更新 M3U8 文件,但它是在几分之一秒内完成更新的,而不是像它应该的那样每隔几秒就逐步更新。所以我最终得到了一个 M3U8 播放列表,它只包含节目的最后几个片段。必须有一种方法可以告诉 FFMPEG,“嘿,无论每个片段有多长,都要更新一次播放列表文件。”

我希望这是合理的。我做错了什么?

感谢大家!

相关内容