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

bro*_*ney 6 javascript video html5 duration

我有一个html5视频,我试图在播放期间以特定间隔设置回调.该视频开始使用javascript播放video.play().现在我的代码侦听'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] 检索HTML5视频时长的问题

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

Dav*_*iña 0

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

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