首页 文章

在iPad上寻找HTML5视频

提问于
浏览
19

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

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

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

myPlayer.currentTime = XX;

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

从我可以收集到的浏览器和iPad之间 the differenceon the browser I get:

myPlayer.networkState = 3
myPlayer.readyState = 4

On the iPad I get:

myPlayer.networkState = 2
myPlayer.readyState = 3

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

知道为什么会这样吗?

干杯,安德烈

4 回答

  • 5

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

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

    您应该检查视频元素的 errorbufferedseekableseeking 属性 . 看看你的readyState和networkState值,iPad似乎认为视频还没有完全加载 - 这对本地资源来说很奇怪 .

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

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

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

  • 0

    此问题与 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 .

  • 6

    凯尔的答案很好 . 我想补充一下, you can't assume the seekable attribute is filled in after any particular event . 这意味着您不能等待 loadedmetadatacanplay 等任何其他事件,并假设您可以在此时安全地设置 currentTime .

    看起来最安全的方法是在每个视频相关事件之后检查 seekable ,如果它包含你想要寻找的时间,那么设置 currentTime . 在iPad上, seekable 可能在 canplaythrough 事件之后才会被填充,这已经很晚了 .

    有关详细信息,请参阅my blog post .

  • 2

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

    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()”来完成此操作

相关问题