如何检查HLS提要是否仍然有效

时间:2018-12-02 04:06:42

标签: video-streaming hls

我有一个m3u8供稿,我正在寻找一种方法来检测它是否仍在使用Javascript。 当我获取url时,我仍然会得到所有块的列表,但是直播很久以前就停止了。并且播放器没有在播放。 所以我想知道是否有一种方法可以检查m3u8 feed是否仍然有效,而无需在播放器上尝试。

1 个答案:

答案 0 :(得分:2)

常见的实时流行为是,每x秒就会有一个新的分段可用,即在播放列表的末尾添加。

因此,您可以做的是一次加载播放列表,然后等待x秒,然后再次加载。如果实时流仍在运行,则播放列表中的最后一个片段应该已更改(即向上移动)。

关于等待时间: 最初加载播放列表时,您会在播放列表中看到一个EXT-X-TARGETDURATION标签,用于指定最大片段时长。因此,如果我们在重新加载之前等待至少一个目标持续时间,则必须至少添加了一个新的分段。

示例:

  1. 初始负载:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:8
    #EXT-X-MEDIA-SEQUENCE:0
    
    #EXTINF:8.0,
    https://priv.example.com/0.ts
    #EXTINF:8.0,
    https://priv.example.com/1.ts
    #EXTINF:8.0,
    https://priv.example.com/2.ts
    
  2. 等待8秒,因此#EXT-X-TARGETDURATION:8

  3. 第二次加载:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:8
    #EXT-X-MEDIA-SEQUENCE:1
    
    #EXTINF:8.0,
    https://priv.example.com/1.ts
    #EXTINF:8.0,
    https://priv.example.com/2.ts
    #EXTINF:8.0,
    https://priv.example.com/3.ts
    

侧注

上面的示例是一个滑动窗口实时流,即,播放列表顶部的片段丢失,EXT-X-MEDIA-SEQUENCE递增。在这种情况下,可以检查是否EXT-X-MEDIA-SEQUENCE进行了更改。但是,如果播放列表指定了EXT-X-PLAYLIST-TYPE中的EVENT,则没有段会退出顶部[1] EXT-X-MEDIA-SEQUENCE不会改变。但是,在任何情况下,都可以使用检查最后一段的方法。

[1] https://tools.ietf.org/html/rfc8216#section-4.3.3.5

编辑

HLS规范进一步指出:

  

如果媒体播放列表不包含EXT-X-ENDLIST标签,则      服务器必须提供可用的新版本的播放列表文件      包含至少一个新的媒体细分。必须提供      相对于播放列表文件先前版本的时间      可用:不早于目标持续时间的一半      在此之后,且不得超过目标持续时间的1.5倍      在那之后。这使客户可以利用网络      

实际上,我们必须至少等待目标时间的1.5倍才能重新加载。