我有一个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/
答案 0 :(得分:0)
Id使用setTimeout调用函数来检查持续时间是否可递归。
这样,只要有任何信息可用,功能就可以显示等持续时间。