HTML5 video seeking on iPad

前端 未结 4 739
小蘑菇
小蘑菇 2021-02-05 08:19

I have an HTML5 video player with a custom seek bar, that\'s working great on the iPhone (playing inline) and on the browser.

It plays great on the iPad too and the seek

相关标签:
4条回答
  • 2021-02-05 08:25

    This issue is related with value used on the video.currentTime property. On my specific case I fixed the problem by always making sure I was using floating point numbers with 1 decimal digit during the seek.

    Setting video.currentTime to ZERO on iOS 3.2 will indeed seek the video to the beginning but the value won't update after that - timeupdate event is still dispatched normally but if you try to read currentTime it will always return the same value.

    To seek to the begin of the video use 0.1 instead of 0, to seek to 12.2345 use 12.2.

    PS: you can use (+(12.2345).toFixed(1)) to limit the number of decimal digits to 1.

    0 讨论(0)
  • 2021-02-05 08:42

    I've had all kinds of problems getting JavaScript to control audio elements, and a lot of frustration with the currentTime property, along with Apple's restrictions on what constitutes direct user initiation of events.

    It wouldn't surprise me if there were some kind of weird bug with JavaScript & HTML5 video playback on the iPad (or "feature" that's undocumented), which requires a workaround. From my experience, the iPad has a unique way of doing things than what's in the official documentation.

    You should check the error, buffered, seekable, and seeking properties of the video element. Looking at your readyState & networkState values, the iPad seems to think that the video has not been completely loaded - which is odd for a local resource.

    buffered and seekable should be equal to the time range of your entire video. seeking should be TRUE. That should at least give you a little more information about the problem.

    Have you tested it with other videos? It might be that there is some kind of encoding problem with the video that the iPad has a problem with.

    Other than that - there was a bug in a previous iPad OS version that broke the ability to set the currentTime property. Are you using the latest OS version?

    0 讨论(0)
  • 2021-02-05 08:46

    Kyle's answer is a good one. I would add, you can't assume the seekable attribute is filled in after any particular event. This means you can't wait for events like loadedmetadata, canplay, or any other and assume that you're able to set currentTime safely at that point.

    It seems the safest way to do it is to check seekable after every video-related event, and if it encompasses the time you want to seek to, set currentTime at that point. On iPad, seekable may not be filled until after the canplaythrough event, which is quite late.

    See my blog post for more on this.

    0 讨论(0)
  • 2021-02-05 08:48

    I am having the same issue - here are the properties in my case:

    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
    

    so - nothing is getting buffered and nothing is seekable. i am playing a local clip from the resources directory of an iPad bundle, via a UIWebView.

    In my case, all i need is to reset to the top of the video after each play, and I was able to accomplish this via a call to "load()"

    0 讨论(0)
提交回复
热议问题