19

我有一个带有自定义搜索栏的 HTML5 视频播放器,它在 iPhone(内联播放)和浏览器上运行良好。

它在 iPad 上的播放效果也很好,并且搜索栏会随着电影的播放而更新,但由于某种原因,我无法搜索。

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

myPlayer.currentTime = XX;

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

从我可以收集到的浏览器和 iPad 之间的区别是,在浏览器上我得到:

myPlayer.networkState = 3
myPlayer.readyState = 4

在 iPad 上,我得到:

myPlayer.networkState = 2
myPlayer.readyState = 3

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

知道为什么会这样吗?

干杯,安德烈

4

4 回答 4

6

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

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

您应该检查视频元素的errorbufferedseekableseek属性。查看您的 readyState 和 networkState 值,iPad 似乎认为视频尚未完全加载——这对于本地资源来说很奇怪。

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

你用其他视频测试过吗?可能是iPad 存在问题的视频存在某种编码问题。

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

于 2010-10-01T19:18:57.570 回答
5

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

在 iOS 3.2 上设置video.currentTime为零确实会将视频搜索到开头,但此后该值不会更新 -timeupdate事件仍会正常发送,但如果您尝试读取currentTime它,它将始终返回相同的值。

寻找到视频的开头使用0.1而不是0寻找12.2345使用12.2

PS:您可以使用(+(12.2345).toFixed(1))将小数位数限制为1。

于 2011-03-29T03:48:34.577 回答
2

凯尔的回答很好。我要补充一点,您不能假设seekable在任何特定事件之后填充了该属性。这意味着您不能等待诸如loadedmetadata,canplay或任何其他事件,并假设您能够currentTime在那时安全地设置。

似乎最安全的方法是seekable在每个与视频相关的事件之后进行检查,如果它包含您想要寻找的时间,请currentTime在该时间点进行设置。在 iPad 上,seekable可能要等到活动结束后才能填满canplaythrough,这已经很晚了。

有关更多信息,请参阅我的博客文章

于 2011-06-16T00:06:36.377 回答
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()”来完成此操作

于 2010-10-05T17:49:32.757 回答