在 iPad 上搜索 HTML5 视频
Posted
技术标签:
【中文标题】在 iPad 上搜索 HTML5 视频【英文标题】:HTML5 video seeking on iPad 【发布时间】:2011-04-15 16:11:46 【问题描述】:我有一个带有自定义搜索栏的 html5 视频播放器,它在 iPhone(内联播放)和浏览器上运行良好。
它在 iPad 上的播放效果也很好,并且搜索栏会随着电影的播放而更新,但由于某种原因,我无法搜索。
所有值都是正确的,我正在尝试设置:
myPlayer.currentTime = XX;
很遗憾,iPad 拒绝设置 .currentTime 属性。
据我所知,浏览器和 iPad 之间的区别是 在我得到的浏览器上:
myPlayer.networkState = 3
myPlayer.readyState = 4
在 iPad 上我得到:
myPlayer.networkState = 2
myPlayer.readyState = 3
完全相同的代码,运行本地 MP4 视频。
知道为什么会这样吗?
干杯, 安德烈
【问题讨论】:
您能否发布设置当前时间的代码。我可以毫不费力地做到这一点。 这里:videoPlayerElement.currentTime = x * videoPlayerElement.duration /scrubberBg.width(); ...这在浏览器(其中几个)和 iPad 上有效,值可以跟踪,但未设置属性。我正在运行 3.2 我发现 ios 上的设置video.currentTime
似乎是在用户操作之后进行的。在设置currentTime
之前发出alert()
或触摸事件似乎提供了正确的响应——当然除了它需要的用户交互。
【参考方案1】:
我在让 javascript 控制音频元素时遇到了各种各样的问题,并且对 currentTime 属性感到非常沮丧,以及 Apple 对什么构成直接用户启动事件的限制。
如果 iPad 上的 JavaScript 和 HTML5 视频播放存在某种奇怪的错误(或未记录的“功能”),我不会感到惊讶,这需要解决方法。根据我的经验,iPad 的处理方式比官方文档中的方式独特。
您应该检查视频元素的 error、buffered、seekable 和 seeking 属性。查看您的 readyState 和 networkState 值,iPad 似乎认为视频尚未完全加载 - 这对于本地资源来说很奇怪。
缓冲和可搜索应该等于整个视频的时间范围。寻求应该是真实的。这至少应该为您提供有关该问题的更多信息。
你用其他视频测试过吗? 可能是 iPad 有问题的视频存在某种编码问题。
除此之外 - 以前的 iPad OS 版本中存在一个错误,该错误破坏了设置 currentTime 属性的能力。您使用的是最新的操作系统版本吗?
【讨论】:
我正在使用 3.2(因为我不能将其限制为最新版本)并且我尝试了不同的视频源,但同样的问题:/【参考方案2】:此问题与 video.currentTime
属性上使用的值有关。在我的具体情况下,我通过始终确保在查找期间使用具有 1 个十进制数字的浮点数来解决问题。
在 iOS 3.2 上将 video.currentTime
设置为零确实会将视频搜索到开头,但此后值不会更新 - timeupdate
事件仍会正常发送,但如果您尝试读取 currentTime
,它将始终返回相同的值。
要寻找视频的开头使用0.1
而不是0
,寻找12.2345
使用12.2
。
PS:您可以使用(+(12.2345).toFixed(1))
将小数位数限制为1。
【讨论】:
我有同样的问题并尝试按照上面的方法进行四舍五入,但它似乎不适用于 IOS 6.1。【参考方案3】:Kyle 的回答很好。我要补充一点,你不能假设seekable
属性是在任何特定事件之后填写的。这意味着您不能等待loadedmetadata
、canplay
或任何其他事件,并假设您可以在此时安全地设置currentTime
。
似乎最安全的方法是在每次与视频相关的事件后检查seekable
,如果它包含您想要寻找的时间,则在该点设置currentTime
。在 iPad 上,seekable
可能要等到canplaythrough
事件之后才会被填充,这已经很晚了。
有关更多信息,请参阅my blog post。
【讨论】:
【参考方案4】:我遇到了同样的问题 - 以下是我的情况:
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()”来完成此操作
【讨论】:
以上是关于在 iPad 上搜索 HTML5 视频的主要内容,如果未能解决你的问题,请参考以下文章