我正在使用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
参考图片
编辑:
我已根据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
。
可能是什么问题?