我有一个HTML5视频播放器,带有自定义搜索栏,可以在iPhone上播放(在线播放)和浏览器。
它在iPad上播放效果也很好,搜索条在电影播放时更新,但出于某种原因,我无法寻求。
所有值都是正确的,我正在尝试设置:
myPlayer.currentTime = XX;
不幸的是,iPad拒绝设置.currentTime属性。
我可以从浏览器和iPad之间收集的差异是我在浏览器上的:
myPlayer.networkState = 3
myPlayer.readyState = 4
在iPad上我得到:
myPlayer.networkState = 2
myPlayer.readyState = 3
这是完全相同的代码,运行本地MP4视频。
知道为什么会这样吗?
干杯, 安德烈
答案 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
属性。这意味着您不能等待loadedmetadata
,canplay
或其他任何事件,并假设您能够在此时安全地设置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()”来完成此操作