2012-03-26 15 views
6

Ho un video html5 che sto cercando di impostare i callback a determinati intervalli durante la riproduzione. Il video inizia a giocare da javascript con video.play(). In questo momento il mio codice ascolta l'evento 'loadedmetadata', quindi interroga la durata e imposta tali callback. Funziona bene su mobile safari, ma non su Android (2.3.4 e 2.3.7).Android video.duration non viene caricato fino a video.play()

Su Android, 'loadedmetadata' sembra essere emesso prima che la durata sia effettivamente disponibile. Per verificare ciò, ho registrato la durata in ogni fase del processo di caricamento nel mio codice per vedere dove può essere effettivamente letto. Fino allo video.play() e dopo un evento 'timeupdate', la proprietà video.duration è 6000, indipendentemente dal video utilizzato. Ho provato questo con un file mp4 e un file 3gp. Una volta soddisfatte tali condizioni, la durata effettiva è disponibile.

Ho trovato questo altro post con problemi simili [1]. La risposta più votata che non è stata accettata è il modo in cui l'ho originariamente impostato e funziona perfettamente su iOS. Anche la risposta accettata non funziona e suggerisce che si tratta di un problema del webkit. Registro la proprietà video.readyState e vedo che è '4' prima che inizi la riproduzione del video, ma la durata non è ancora disponibile fino a quando non inizia la riproduzione e il primo evento 'timeupdate'.

La nostra soluzione attuale è la ricerca del valore video.duration e la sola impostazione dei callback degli eventi quando video.duration !== 6000. Questo è piuttosto brutto e mi piacerebbe arrivare fino in fondo, per paura che questo hack ritorni a mordere. Una discussione qui [2] sembra suggerire che il problema potrebbe essere correlato alla codifica. Cioè, non codificato correttamente, Android non legge correttamente i metadati finché il file non viene caricato, o forse del tutto e calcola la durata in un altro modo.

C'è qualcosa che posso fare per rendere questo pulitore, o sono bloccato con l'hack per ora?

[1] Problem retrieving HTML5 video duration

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

+2

Ho usato un 'v.addEventListener ('durationchange', repos, false);' listener per tracciare il cambiamento, ma sì ... sembra che si tratti di un problema WebView/Video su molte build Android – Offbeatmammal

+1

Il dispositivo mobile ha i suoi limiti in modo che non caricino tutto ciò che fa un browser desktop, nel browser Android, il video non viene chiamato fino a quando non si suona, in quanto ciò consente di risparmiare larghezza di banda e ridurre l'uso di memoria/buffer .. Penso che ci si può fare per impostazione predefinita riproduci e poi usa uno script che interrompe il video dopo 1-2 secondi ... che dovrebbe servire al tuo scopo ... – MarmiK

risposta

0

Id utilizzare un setTimeout che chiama una funzione per controllare se la durata è disponibile ricorsivo.

In questo modo la funzione può non appena sono disponibili informazioni, visualizzare ecc. La durata.

Problemi correlati