【问题标题】:HLS on nginx, not stopping as expectednginx 上的 HLS,没有按预期停止
【发布时间】:2015-08-25 12:54:57
【问题描述】:

使用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 秒。

这是为什么?

【问题讨论】:

    标签: nginx mp4 http-live-streaming m3u8


    【解决方案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 秒。当您将带有 startend 查询字符串的 URL 传递给 Nginx 时,它显然会尝试返回两个关键帧之间的完整部分,并且不会截断确切的时间戳。

    start = 1.0end = 2.2 的情况下,这不起作用,因为第一个完整间隔在0.02.4 之间。对于start = 0end = 4.99,它将从0.0 播放到7.2,因为2.4 x 2 = 4.8 小于4.99

    文档没有说明这是否是所需的行为。一般来说,为避免出现问题,您必须将目标持续时间设置为关键帧间隔的倍数

    【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2017-10-15
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多