ffmpeg hls的持续时间在m3u8上是错误的

时间:2018-06-25 11:17:43

标签: ffmpeg hls

我正在使用ffmpeg使用以下命令以hls格式存储视频

~/bin/ffmpeg -r 15 -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -codec copy -hls_list_size 65535 -hls_time 2 -g 2 "./live.m3u8"

我在哪里获取ts文件和live.m3u8文件的列表。请注意,在上面的命令中,hls文件段的持续时间设置为2秒。

这是live.m3u8的内容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:2,
live0.ts
#EXTINF:2,
live1.ts
#EXTINF:2,
live2.ts
#EXTINF:2,
live3.ts
#EXTINF:1,
live4.ts
#EXTINF:2,
live5.ts
#EXT-X-ENDLIST

请注意,以上文件中的持续时间并不总是2秒,并且会有所不同。当我使用ffprob检查实际ts文件段的持续时间时,我得到的是float值,

例如,

~/bin/ffprobe -i live3.ts -show_entries format=duration -v quiet -of csv="p=0"

给予2.261556

还有

~/bin/ffprobe -i live4.ts -show_entries format=duration -v quiet -of csv="p=0"

给出持续时间1.298256

似乎ffmpeg文件将float的值四舍五入到int并写入live.m3u8文件。这会导致在查找视频文件时出现一些问题(寻找错误的时间戳),并且视频文件的总持续时间始终显示为小于实际持续时间。例如,如果我录制2小时的视频,然后使用vlc Player打开live.m3u8,则可以看到视频时长显示为1:45分钟,并且我最多可以搜索2小时。

可能是问题所在

ffmpeg版本: ffmpeg version git-2014-06-24-b52637c

参考图片

enter image description here

编辑:

我已根据https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu的说明将ffmpeg更新为较新的版本。但是仍然有些问题。现在,live.m3u8文件以float形式生成计时信息,但是该值不准确。 例如

生成的m3u8文件是

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.200000,
live0.ts
#EXTINF:3.100000,
live1.ts
#EXTINF:3.100000,
live2.ts
#EXTINF:2.340000,
live3.ts
#EXT-X-ENDLIST

如果我使用命令live0.ts检查~/bin/ffprobe -i live0.ts -show_entries format=duration -v quiet -of csv="p=0"的持续时间,则会打印2.3333,而在播放列表文件中则为3.200000

可能是什么问题?

0 个答案:

没有答案