2012-03-26 4 views
6

Ich habe ein HTML5-Video, das ich versuche, Callbacks in bestimmten Abständen während der Wiedergabe einzurichten. Das Video beginnt von javascript mit video.play() zu spielen. Im Moment wartet mein Code auf das Ereignis 'loadedmetadata', fragt dann die Dauer ab und richtet diese Rückrufe ein. Funktioniert gut auf mobilen Safari, aber nicht auf Android (2.3.4 und 2.3.7).Android video.duration lädt nicht bis video.play()

Auf Android scheint 'loadedmetadata' ausgegeben zu werden, bevor die Dauer tatsächlich verfügbar ist. Um dies zu testen, protokollierte ich die Dauer bei jedem Schritt des Ladevorgangs in meinem Code, um zu sehen, wo es tatsächlich gelesen werden kann. Bis video.play() und nach einem 'timeupdate' Ereignis ist die Eigenschaft video.duration 6000, unabhängig vom verwendeten Video. Ich habe das mit einer mp4-Datei und einer 3gp-Datei getestet. Sobald diese Bedingungen erfüllt sind, ist die tatsächliche Dauer verfügbar.

Ich fand diesen anderen Beitrag mit ähnlichen Problemen [1]. Die am höchsten gewählte Antwort, die nicht angenommen wurde, ist, wie ich das ursprünglich eingerichtet habe, und es funktioniert gut auf iOS. Die angenommene Antwort funktioniert auch nicht und schlägt vor, dass dies ein Webkit-Problem ist. Ich logge die video.readyState Eigenschaft ein und sehe, dass es '4' ist, bevor das Video anfängt zu spielen, aber die Dauer ist noch nicht verfügbar, bis es anfängt zu spielen und das erste 'timeupdate' Ereignis.

Unsere aktuelle Problemumgehung fragt den Wert video.duration ab und richtet nur die Ereignisrückrufe ein, wenn video.duration !== 6000. Das ist ziemlich hässlich und ich würde gerne auf den Grund gehen, damit dieser Hack nicht zurückkehrt. Eine Diskussion hier [2] schien darauf hinzudeuten, dass das Problem mit der Codierung zusammenhängen könnte. Das heißt, nicht richtig codiert, liest Android die Metadaten nicht korrekt, bis die Datei geladen ist, oder vielleicht überhaupt und berechnet die Dauer auf andere Weise.

Gibt es etwas, was ich tun kann, um das sauberer zu machen, oder bleibe ich vorerst mit dem Hack?

[1] Problem retrieving HTML5 video duration

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

+2

Ich habe einen 'v.addEventListener ('durationchange', repos, false);' Listener, um die Änderung zu verfolgen, aber ja ... scheint, es ist ein WebView/Video-Problem auf vielen Android-Builds – Offbeatmammal

+1

Mobile Device hat seine eigenen Einschränkungen, so dass sie nicht alles laden, was ein Desktop-Browser tun, in Android-Browser wird das Video nicht aufgerufen, bis Sie spielen, als das wird Bandbreite sparen und Speicher/Puffer verwenden .. Ich denke, dass Sie dort machen können es standardmäßig spielen und dann ein Skript verwenden, das Video nach 1-2 Sekunden stoppt ... das sollte Ihren Zweck erfüllen .. – MarmiK

Antwort

0

Id eine setTimeout verwenden, die eine Funktion aufruft, um zu überprüfen, ob die Dauer rekursiv zur Verfügung steht.

Auf diese Weise kann die Funktion sobald Informationen verfügbar sind, usw. die Dauer anzeigen.