将https://gist.github.com/45sound/bd2a5ee699e428d63bcd用作http://54.204.158.100/1.m3u8(您也可以直接下载)
http://54.204.158.100/hls/clock.mp4是源mp4。
http://54.204.158.100/hls/clock.mp4.ts?start=0.0&end=4.99是要播放的片段。
在osmfhls.kutu.ru播放器中,播放6.99秒而不是4.99秒。
为什么会这样?
答案 0 :(得分:1)
您的Nginx HLS模块配置为服务器7s
片段。实际持续时间为7.180s
:
curl "http://<ip_address>/hls/clock.mp4.m3u8"
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:7.200,
clock.mp4.ts?start=0.000&end=7.200
#EXTINF:7.200,
clock.mp4.ts?start=7.200&end=14.400
#EXTINF:5.400,
clock.mp4.ts?start=14.400&end=19.800
...
在http://<ip_address>/hls/clock.mp4.ts?start=0.0&end=4.99
请求的情况下,如果玩家在.ts
之后忽略查询字符串,那么它将仅播放第一段,总持续时间为7.180s
,如模块。检查Nginx access.log
以查看其请求的内容。
<强>更新强>
检查mp4
文件的规格后,我发现您使用GOP
大小的60
,网速为25
。这意味着每1
秒60 / 25 = 2.4
个关键帧。当您将带有start
和end
查询字符串的网址传递给Nginx时,它显然会尝试返回两个关键帧之间的完整部分,并且它不会切断确切的时间戳。
如果start = 1.0
和end = 2.2
这不起作用,因为第一个完整时间间隔介于0.0
和2.4
之间。对于start = 0
和end = 4.99
,它将从0.0
到7.2
播放,因为2.4 x 2 = 4.8
小于4.99
。
文档没有说明这是否是所需的行为。通常,为避免出现问题,您必须将目标持续时间设置为等于关键帧间隔的倍数。