Nginx 上的 HLS,没有按预期停止
HLS on nginx, not stopping as expected
使用https://gist.github.com/45sound/bd2a5ee699e428d63bcd as 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 秒。
这是为什么?
您的 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
文件的规格后,我注意到您使用 60
的 GOP
大小,帧率为 25
。这意味着每 60 / 25 = 2.4
秒 1
个关键帧。当您将带有 start
和 end
查询字符串的 URL 传递给 Nginx 时,它显然会尝试 return 两个关键帧之间的完整部分并且它不会准确地切入时间戳。
在 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
.
文档没有说明这是否是所需的行为。通常,为避免出现问题,您必须将 目标持续时间设置为关键帧间隔的倍数 。
使用https://gist.github.com/45sound/bd2a5ee699e428d63bcd as 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 秒。
这是为什么?
您的 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
文件的规格后,我注意到您使用 60
的 GOP
大小,帧率为 25
。这意味着每 60 / 25 = 2.4
秒 1
个关键帧。当您将带有 start
和 end
查询字符串的 URL 传递给 Nginx 时,它显然会尝试 return 两个关键帧之间的完整部分并且它不会准确地切入时间戳。
在 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
.
文档没有说明这是否是所需的行为。通常,为避免出现问题,您必须将 目标持续时间设置为关键帧间隔的倍数 。