Android video.duration直到video.play()才加载

时间:2012-03-26 21:16:19

标签: javascript html5 video duration

我有一个html5视频,我试图在播放期间以特定间隔设置回调。该视频开始使用video.play()的javascript播放。现在我的代码侦听'loadedmetadata'事件,然后查询持续时间并设置这些回调。适用于移动游猎,但不适用于Android(2.3.4和2.3.7)。

在Android上,'loadedmetadata'似乎在持续时间实际可用之前发出。为了对此进行测试,我在代码中记录了加载过程中每个步骤的持续时间,以查看实际可以读取的位置。在video.play()和一个'timeupdate'事件之后,video.duration属性为6000,无论使用何种视频。我用mp4文件和3gp文件测试了这个。一旦满足这些条件,就可以获得实际持续时间。

我在其他帖子中发现了类似的问题[1]。未被接受的最高投票答案是我最初的设置,它在iOS上运行良好。接受的答案也不起作用,并表明这是一个webkit问题。我记录了video.readyState属性,并在视频开始播放之前看到它是'4',但是在开始播放之后,持续时间仍然不可用,以及第一个'timeupdate'事件。

我们当前的解决方法是查询video.duration值,并仅在video.duration !== 6000时设置事件回调。这非常难看,我想深究它,以免这个黑客回来咬人。这里的讨论[2]似乎表明该问题可能与编码有关。也就是说,没有正确编码,android在加载文件之前不会正确读取元数据,或者可能根本没有读取元数据,而是以另一种方式计算持续时间。

我能做些什么才能让这个更干净,或者我现在仍然坚持使用黑客?

[1] Problem retrieving HTML5 video duration

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

1 个答案:

答案 0 :(得分:0)

Id使用setTimeout调用函数来检查持续时间是否可递归。

这样,只要有任何信息可用,功能就可以显示等持续时间。