我有一个带有自定义搜索栏的HTML5视频播放器,它在iPhone(在线播放)和浏览器上运行良好 .
它在iPad上播放效果也很好,搜索条在电影播放时更新,但出于某种原因,我无法寻求 .
所有的值都是正确的,我试图设置:
myPlayer.currentTime = XX;
不幸的是,iPad拒绝设置.currentTime属性 .
从我可以收集到的浏览器和iPad之间 the difference 是 on the browser I get:
myPlayer.networkState = 3
myPlayer.readyState = 4
On the iPad I get:
myPlayer.networkState = 2
myPlayer.readyState = 3
这是完全相同的代码,运行本地MP4视频 .
知道为什么会这样吗?
干杯,安德烈
4 回答
我在使用JavaScript来控制音频元素方面遇到了各种各样的问题,并且对currentTime属性感到非常沮丧,以及Apple对直接用户启动事件的限制 .
如果iPad上的JavaScript和HTML5视频播放存在某种奇怪的错误(或者没有记录的“功能”),这不会让我感到惊讶,这需要一种解决方法 . 根据我的经验,iPad具有独特的处理方式,而不是官方文档中的方式 .
您应该检查视频元素的 error , buffered , seekable 和 seeking 属性 . 看看你的readyState和networkState值,iPad似乎认为视频还没有完全加载 - 这对本地资源来说很奇怪 .
buffered 和 seekable 应该等于整个视频的时间范围 . 寻求应该是真的 . 这应该至少可以为您提供有关该问题的更多信息 .
你有其他视频测试过吗?可能是iPad存在问题的视频存在某种编码问题 .
除此之外 - 之前的iPad操作系统版本中存在一个错误,该错误打破了设置currentTime属性的能力 . 您使用的是最新的操作系统版本吗?
此问题与
video.currentTime
属性上使用的值有关 . 在我的具体情况下,我通过始终确保在搜索期间使用 1 decimal digit 的浮点数来解决问题 .在iOS 3.2上将
video.currentTime
设置为ZERO确实会将视频设置为开头,但之后该值不会更新 - 仍然会正常调度timeupdate
事件,但如果您尝试读取currentTime
,它将始终返回相同的值 .要寻找视频的开头,请使用
0.1
而不是0
,以寻求12.2345
使用12.2
.PS:您可以使用
(+(12.2345).toFixed(1))
将小数位数限制为1 .凯尔的答案很好 . 我想补充一下, you can't assume the seekable attribute is filled in after any particular event . 这意味着您不能等待
loadedmetadata
,canplay
等任何其他事件,并假设您可以在此时安全地设置currentTime
.看起来最安全的方法是在每个视频相关事件之后检查
seekable
,如果它包含你想要寻找的时间,那么设置currentTime
. 在iPad上,seekable
可能在canplaythrough
事件之后才会被填充,这已经很晚了 .有关详细信息,请参阅my blog post .
我遇到了同样的问题 - 这是我案例中的属性:
所以 - 什么都没有得到缓冲,没有什么是可以寻找的 . 我正在通过UIWebView从iPad包的资源目录中播放本地剪辑 .
在我的情况下,我需要的是在每次播放后重置到视频的顶部,我能够通过调用“load()”来完成此操作