ffmpeg手动生成m3u8和段

时间:2015-06-26 08:59:31

标签: ffmpeg

我们正在开发一个应用程序,其中应该为给定的mp4视频动态生成m3u8文件。有人可以告诉我们如何动态生成mp4文件,并具有与分段器完全相同的持续时间。在我们的例子中,ffmpeg segmenter是创建的可变长度段,并且是十进制大小的。例如:     #EXTM3U     #EXT-X-VERSION: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文件,而无需创建任何细分。我们将根据要求手动创建细分。

当我们手动创建片段时,当视频进入下一个片段时会出现小的口吃(闪烁)。当我在网上看到它时,它说它可能是由于连续性计数器。也有人可以帮我们解决这个问题

感谢。

1 个答案:

答案 0 :(得分:3)

解决方案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和其他