如何通过 hls.js 跳转到 hls 流中的具体 UTC 时间戳

Posted

技术标签:

【中文标题】如何通过 hls.js 跳转到 hls 流中的具体 UTC 时间戳【英文标题】:How do I jump to a concrete UTC timestamp in an hls stream via hls.js 【发布时间】:2019-11-27 07:55:41 【问题描述】:

我们正在使用一个音频播放器,它使用 hls.js 库来播放 hls 格式的广播直播。我们正在尝试实现一项功能,允许我们的用户在直播中跳转到某个时间点(歌曲的开始时间)。在过去两个小时的时间范围内播放的每首歌曲中,我们都有该歌曲的开始时间作为 UTC 时间戳。由于 hls.js 似乎没有提供任何实用方法来直接寻找某个 utc 时间戳的位置,我们试图找出其他方法来计算流中的那个点。

我们的想法是找出流正在播放的时刻的 utc 时间戳,使用这个时间戳来计算流中的 livetime 和我们想要跳转并添加的歌曲的 starttime 之间的差异(以秒为单位)与播放器在流中的当前位置的差异(我们将这个位置作为流在小时两小时时间窗口中播放的秒数)。但不幸的是,我们只设法确定了流中当前播放片段的开始时间,但未能找到流在片段中实际播放的确切时间点。由于我们有 5 秒的片段持续时间,因此我们对跳跃位置的计算并不那么精确。

有人知道如何通过 hls.js 获取当前正在播放的直播的确切 utc 时间戳吗? 例如,在带有 exoplayer 的 android 上,可以借助 HLSManifest 类计算直播中当前位置的 utc 时间戳。该类提供了一种方法,可以随时返回配置的 hls 时间窗口起点的 utc 时间戳。通过在该时间窗口中添加当前位置的时间(以秒为单位),我们可以轻松计算流在某个时间点的确切 utc 时间戳。

感谢任何帮助,即使是关于如何使用 hls.js 的最小提示。提前致谢。

【问题讨论】:

【参考方案1】:

你能解决这个问题吗? 我可以为 MPD (DASH) 实现这个,但不能为 M3U8 (HLS) 对于 MPD,使用下面的标签来实现相同的效果。

保持视频点播

type="static"
mediaPresentationDuration="PT2M7.3S"
minBufferTime="PT10.0S">

允许视频仅在特定时间开始

type="dynamic"
minimumUpdatePeriod="PT5S"
suggestedPresentationDelay="PT5S"
availabilityStartTime="2020-07-16T09:23:30Z"
publishTime="2020-07-16T09:23:30Z"
timeShiftBufferDepth="PT20M50.0S"
minBufferTime="PT10.0S">

【讨论】:

以上是关于如何通过 hls.js 跳转到 hls 流中的具体 UTC 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 hls.js 和 plyr 配置多个视频实例

如何让 HLS.js 从服务器端获取数据?

如何在反应中使用 hls.js

如何让 Hls.js 在准备好后自动播放视频?

TS 文件不播放 hls.js

hls.js CORS 使用 AWS Cloudfront 的 Cookie 问题