【问题标题】:HLS protocol: get absolute elapsed time during a live streamingHLS 协议:获取直播期间的绝对经过时间
【发布时间】:2020-09-15 22:19:23
【问题描述】:

我有一个非常基本的问题,如果我在谷歌上搜索错了,或者答案太简单以至于我没有看到它,我没有得到答案。

我正在使用hls.js 作为 Javascript 库来实现一个网络应用程序,我需要一种方法来获取实时流媒体的绝对经过时间,例如如果用户在 10 分钟后加入直播,我需要一种方法来检测用户的第 1 秒是流媒体的第 601 秒。

检查流式片段我发现了一些信息,例如 startPTS 和 endPTS,但所有这些信息始终与检索到的块相关,而不是与整个流式块相关,例如如果用户在 10 分钟后加入直播并且块持续时间为 2 秒,我将获得的第一个块将具有 startPTS = 0 和 endPTS = 2,我将获得的第二个块将具有 startPTS = 2 和 endPTS = 4依此类推(将值四舍五入到最接近的整数)。

有没有办法从 HLS 实时流中提取我需要的绝对经过时间?

【问题讨论】:

    标签: http-live-streaming elapsedtime hls.js


    【解决方案1】:

    我在 iOS (AVPlayer) 上有完全相同的需求,并提供了以下解决方案:

    1. 阅读 m3u8 清单,对我来说它看起来像这样:
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:410
    #EXT-X-TARGETDURATION:8
    #EXTINF:8.333,
    410.ts
    #EXTINF:8.333,
    411.ts
    #EXTINF:8.334,
    412.ts
    #EXTINF:8.333,
    413.ts
    #EXTINF:8.333,
    414.ts
    #EXTINF:8.334,
    415.ts
    
    1. 请注意,前 409 段不是清单的一部分
    2. EXT-X-MEDIA-SEQUENCE 乘以EXT-X-TARGETDURATION 即可得到第一个可用段的时钟时间的近似值。

    我们还要注意,每个段不完全是 8s 长,所以当我使用目标持续时间时,我实际上每段累积了大约 333ms 的错误:

    410 * 8 = 3280 seconds = 54.6666 minutes
    

    在这种情况下,对我来说,段始终是 8.333 或 8.334,所以通过 EXTINF,我得到:

    410 * 8.333 = 3416.53 seconds = 56.9421 minutes
    

    这将近 56.9421 分钟仍然是一个近似值(因为我们不确切知道我们累积了多少次新的0.001 错误),但它更接近于真正的时钟时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2011-06-08
      相关资源
      最近更新 更多