获取HTML5视频(直播流)的持续时间

3

我正在寻找从Flash(Strobe)切换到HTML5解决方案的选项(使用带有DASH或HLS的媒体源扩展)。

根据HTML5视频规格,我们无法获取直播流视频的持续时间。

duration属性必须返回媒体资源在媒体时间轴上结束的时间,以秒为单位。如果没有媒体数据可用,则属性必须返回非数字(NaN)值。如果已知媒体资源是无界限的(例如流媒体广播),则该属性必须返回正无穷大值。

我的直播流不是“滑动窗口”,这意味着我们有一个固定的开始日期。我目前正在使用Strobe播放器,它实际上会随着播放而增加持续时间,而HTML5始终返回 Infinity 。

我想知道是否有一些选项可用于自行维护持续时间(例如通过解析片段,这个就是这样做的)。


同样的问题,在 iPhone 上出现了无限大。 - mjs
我也遇到了同样的问题,尝试停止媒体轨道并访问视频持续时间属性,但是返回Infinity。 - demian85
1个回答

1

我没有足够的声望来发表评论,所以我会在这里输入。

我认为最好研究 HTMLMediaElement.seekable.buffered 属性。您可以使用返回 TimeRanges 对象的 .buffered 来跟踪媒体流的持续时间,但媒体元素本身无法知道流可能有多长。

问题在于,如果您长时间暂停,则 .buffered 可能不总是告诉您那里有多少数据流。

当我在 Android 虚拟设备和 Chrome 中测试它们的行为时,在几秒钟的播放后,buffered 返回了一个长度为 1 的 TimeRanges 对象,而 video.buffered.end(0) 为 0,.seekable 返回相同的内容,但 video.seekable.end(0) == Infinity

如果您想要精确的数据,我同意解析库(例如解析 HLS 播放列表的持续时间)是最佳选择,尽管并不优雅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接