【问题标题】:ffmpeg generate m3u8 and segments manuallyffmpeg 手动生成 m3u8 和分段
【发布时间】:2015-09-13 03:51:58
【问题描述】:

我们正在开发一个应用程序,在该应用程序中,应该为给定的 mp4 视频动态生成 m3u8 文件。有人可以让我们知道如何动态生成具有精确持续时间的 mp4 文件作为分段器。在我们的例子中,ffmpeg 分段器创建了可变长度的分段,并且是十进制大小。例如: #EXTM3U #EXT-X-版本:3 #EXT-X-TARGETDURATION:7 #EXT-X-PLAYLIST-TYPE:VOD

#EXTINF:5.005,
test.mp4.ts?start=0.000&end=5.005
#EXTINF:6.715,
test.mp4.ts?start=5.005&end=11.720
#EXTINF:6.548,

谁能帮助我们创建这样的 m3u8 文件而不创建任何段。我们将根据要求手动创建细分。

此外,当我们手动创建片段时,当视频进入下一个片段时,会出现轻微的卡顿(闪烁)。当我在网上阅读时,它说可能是由于连续性计数器。有人可以帮我们解决这个问题吗

谢谢。

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    解决方案 1

    您可以使用-hls_flags single_file 将所有段存储在单个ts 文件中。生成的播放列表将包含每个片段的长度和偏移量,客户端将自行请求它们。

    6s 段的示例:

    ffmpeg -i input -c:v libx264 -r 25 -g 75 -sc_threshold 0 -c:a libfdk_aac -hls_time 6 -hls_playlist_type vod -hls_flags single_file out.m3u8
    
    #EXTM3U
    #EXT-X-VERSION:4
    #EXT-X-TARGETDURATION:6
    #EXT-X-MEDIA-SEQUENCE:0
    #EXT-X-PLAYLIST-TYPE:VOD
    #EXTINF:6.000000,
    #EXT-X-BYTERANGE:1397404@0
    out.ts
    #EXTINF:6.000000,
    #EXT-X-BYTERANGE:1049416@1397404
    out.ts
    #EXTINF:6.000000,
    #EXT-X-BYTERANGE:1423348@2446820
    out.ts
    [...]
    #EXT-X-ENDLIST
    

    EXT-X-BYTERANGE 在版本 4 中受支持。如果您需要 3 版本,则需要将此播放列表转换为 3 版本,并制作一个处理程序以返回具有正确 MIME 类型的正确范围:

    #EXTINF:6.000000,
    handler?file=out.ts&offset=xxx&length=yyy
    

    解决方案 2

    nginxnginx-vod-module 一起使用,这也可以进行DASH 和其他操作

    【讨论】:

    • 有什么方法可以在不先创建 ts 文件的情况下创建 m3u8 列表(包含所有字节范围)?然后稍后再创建一个特定的文件(字节范围)?保留原始文件并仅创建一个 m3u8 然后动态创建零件会很好吗?
    • @FSDaniel 如果您想要精确的段持续时间并支持许多需要重新编码的编解码器,则不需要,在这种情况下,重新编码文件一次而不是即时重新编码会更有效。 nginx 模块为编解码器的子集提供on-the-fly repackaging of MP4 files to DASH, HDS, HLS, MSS,它都在自述文件的顶部。
    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多