2010-09-22 22 views
18

Ho un video player HTML5 con una barra di ricerca personalizzata, funziona perfettamente su iPhone (riproduzione in linea) e sul browser.Ricerca video HTML5 su iPad

Suona anche sull'iPad e la barra di ricerca viene aggiornata mentre il film viene riprodotto, ma per qualche motivo, non posso cercare.

Tutti i valori sono corretti e sto cercando di impostare:

myPlayer.currentTime = XX; 

Purtroppo, l'iPad si rifiuta di impostare l'attributo .currentTime.

Da quello che ho potuto capire la differenza tra il browser e iPad è che sul browser ottengo:

myPlayer.networkState = 3 
myPlayer.readyState = 4 

Sul iPad ottengo:

myPlayer.networkState = 2 
myPlayer.readyState = 3 

È esattamente lo stesso codice, con un video MP4 locale.

Qualche idea sul perché questo sta accadendo?

Cheers, Andre

+0

Potrebbe pubblicare il codice che sta impostando l'ora corrente. Sono in grado di farlo senza troppe difficoltà. –

+0

Qui: videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ... questo funziona nel browser (molti di loro) e sull'iPad, il valore traccia ok, la proprietà non è impostata. Sono in esecuzione 3.2 – Andre

+1

Ho trovato che l'impostazione 'video.currentTime' su iOS sembra essere controllata da un'azione dell'utente. L'emissione di un 'alert()' o di un evento touch prima di impostare 'currentTime' sembra fornire la risposta corretta, tranne ovviamente per l'interazione dell'utente richiesta. – eug

risposta

6

ho avuto tutti i tipi di problemi per ottenere JavaScript per controllare gli elementi audio, e un sacco di frustrazione con la proprietà currentTime, insieme con le restrizioni di Apple su ciò che costituisce l'inizio utente diretta di eventi.

Non mi sorprenderebbe se ci fosse una specie di bizzarro bug con JavaScript & riproduzione video HTML5 su iPad (o "funzionalità" non documentata), che richiede una soluzione alternativa. Dalla mia esperienza, l'iPad ha un modo unico di fare le cose rispetto a quello contenuto nella documentazione ufficiale.

si dovrebbe verificare l'errore , tamponata, seekable, e cercando proprietà dell'elemento video. Osservando i valori di stateState & networkState, l'iPad sembra pensare che il video non sia stato caricato completamente, il che è strano per una risorsa locale.

tamponata e seekable dovrebbe essere pari al l'intervallo di tempo del vostro intero video. la ricerca dovrebbe essere VERA. Questo dovrebbe almeno darti qualche informazione in più sul problema.

Hai provato con altri video? È potrebbe essere che c'è un qualche tipo di problema di codifica con il video che l'iPad ha un problema con.

Oltre a ciò, c'era un errore in una precedente versione del sistema operativo iPad che ha interrotto la possibilità di impostare la proprietà currentTime. Stai usando la versione più recente del sistema operativo?

+0

Sto usando 3.2 (perché non posso limitarlo al più tardi) e ho provato una sorgente video diversa, con lo stesso problema:/ – Andre

0

Sto avendo lo stesso problema - qui sono le proprietà nel mio caso:

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 

così - niente è sempre tamponato e nulla è ricercabile. Sto riproducendo un clip locale dalla directory delle risorse di un pacchetto iPad, tramite UIWebView.

Nel mio caso, ho solo bisogno di per ripristinare la parte superiore del video dopo ogni gioco, e sono stato in grado di raggiungere questo obiettivo tramite una chiamata a "load()"

5

Questo problema è correlato con il valore utilizzato nella proprietà video.currentTime. Nel mio caso specifico ho risolto il problema assicurandomi sempre di utilizzare i numeri in virgola mobile con 1 cifra decimale durante la ricerca.

Impostazione video.currentTime a ZERO su iOS 3.2 sarà infatti cercare il video all'inizio, ma il valore non aggiornerà dopo che - evento timeupdate è ancora inviato normalmente, ma se si tenta di leggere currentTime essa ritorna sempre lo stesso valore.

per cercare l'inizio del video uso 0.1 invece di 0, per cercare di 12.2345 uso 12.2.

PS: è possibile utilizzare (+(12.2345).toFixed(1)) per limitare il numero di cifre decimali a 1.

+0

Ho lo stesso problema e ho provato l'arrotondamento come sopra, ma non lo fa t sembra funzionare su IOS 6.1. – mzedeler

1

risposta di Kyle è un buon compromesso. Aggiungerei, , non è possibile assumere che l'attributo seekable sia compilato dopo qualsiasi evento particolare. Ciò significa che non è possibile attendere eventi come loadedmetadata, canplay o qualsiasi altro e presupporre che sia possibile impostare in modo sicuro currentTime in quel punto.

Sembra il modo più sicuro per farlo è quello di controllare seekable dopo ogni evento relativo al video, e se comprende il tempo che si desidera cercare, impostare currentTime a quel punto. Su iPad, seekable non può essere riempito fino a dopo l'evento canplaythrough, che è piuttosto tardi.

Vedere my blog post per ulteriori informazioni.