在iPad上寻找HTML5视频

时间:2010-09-22 10:58:11

标签: ipad html5-video seekbar

我有一个HTML5视频播放器,带有自定义搜索栏,可以在iPhone上播放(在线播放)和浏览器。

它在iPad上播放效果也很好,搜索条在电影播放时更新,但出于某种原因,我无法寻求。

所有值都是正确的,我正在尝试设置:

myPlayer.currentTime = XX;

不幸的是,iPad拒绝设置.currentTime属性。

我可以从浏览器和iPad之间收集的差异是我在浏览器上的

myPlayer.networkState = 3
myPlayer.readyState = 4

在iPad上我得到:

myPlayer.networkState = 2
myPlayer.readyState = 3

这是完全相同的代码,运行本地MP4视频。

知道为什么会这样吗?

干杯, 安德烈

4 个答案:

答案 0 :(得分:6)

我在使用JavaScript来控制音频元素方面遇到了各种各样的问题,并且对currentTime属性感到非常沮丧,以及Apple对直接用户启动事件的限制。

如果JavaScript和JavaScript存在某种奇怪的错误,我不会感到惊讶。 iPad上的HTML5视频播放(或“未记录的”功能),需要一种解决方法。根据我的经验,iPad具有独特的处理方式,而不是官方文档中的内容。

您应该检查视频元素的错误缓冲可搜索搜索属性。看看你的readyState& networkState值,iPad似乎认为视频尚未完全加载 - 这对于本地资源来说是奇怪的。

缓冲可搜索应该等于整个视频的时间范围。寻求应该是真的。这应该至少可以为您提供有关该问题的更多信息。

您是否已使用其他视频进行过测试? 可能是因为iPad出现问题的视频存在某种编码问题。

除此之外 - 以前的iPad OS版本中存在一个错误,该错误破坏了设置currentTime属性的能力。您使用的是最新的操作系统版本吗?

答案 1 :(得分:5)

此问题与video.currentTime属性上使用的值有关。在我的具体情况下,我通过始终确保在搜索期间使用 1十进制数字的浮点数来解决问题。

在iOS 3.2上将video.currentTime设置为ZERO确实会在开始时搜索视频,但在此之后值不会更新 - timeupdate事件仍然正常发送但是如果您尝试阅读{{ 1}}它将始终返回相同的值。

要使用currentTime而不是0.1来寻求视频开头,请设法0使用12.2345

PS:您可以使用12.2将小数位数限制为1。

答案 2 :(得分:2)

凯尔的答案很好。我想补充一点,你不能认为在任何特定事件之后填写了seekable属性。这意味着您不能等待loadedmetadatacanplay或其他任何事件,并假设您能够在此时安全地设置currentTime

最安全的方法是在每个与视频相关的事件后检查seekable,如果它包含您想要查找的时间,请在此时设置currentTime。在iPad上,seekable可能在canplaythrough事件发生之后才会被填充,这已经很晚了。

有关详情,请参阅my blog post

答案 3 :(得分:0)

我遇到了同样的问题 - 这是我案例中的属性:

UIWebView - iPad Simulator
duration=4.861666679382324
startTime=0
currentTime=4.861666679382324
buffered(1)=[0-0]
seekable(0)=
seeking=false
error=null
readystate=4
networkstate=3

Chrome:
duration=4.9226298332214355
startTime=0
currentTime=4.9226298332214355
buffered(1)=[0-4.9226298332214355]
seekable(1)=[0-4.9226298332214355]
seeking=false
error=null
readystate=4
networkstate=1

所以 - 什么都没有得到缓冲,没有什么是可以寻找的。我正在通过UIWebView从iPad包的资源目录中播放本地剪辑。

在我的情况下,我需要的是在每次播放后重置到视频的顶部,我可以通过调用“load()”来完成此操作