Ich habe dies eine ganze Weile erforscht und ich versuche das Gleiche zu tun, also hoffe ich, dass dies jemand anderem hilft. Ich habe crossbrowsertesting.com verwendet und dies buchstäblich in fast jedem dem Menschen bekannten Browser getestet. Die Lösung, die ich derzeit habe, funktioniert in Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+ und Windows Phone 8.
Dynamisch wechselnde Quellen
Das dynamische Ändern des Videos ist sehr schwierig. Wenn Sie einen Flash-Fallback wünschen, müssen Sie das Video aus dem DOM / der Seite entfernen und erneut hinzufügen, damit Flash aktualisiert wird, da Flash keine dynamischen Aktualisierungen von Flash-Variablen erkennt. Wenn Sie JavaScript verwenden, um es dynamisch zu ändern, würde ich alle <source>
Elemente vollständig entfernen und nur verwenden canPlayType
, um das src
in JavaScript und break
oder return
nach dem ersten unterstützten Videotyp festzulegen, und vergessen Sie nicht, die Flash-Variable mp4 dynamisch zu aktualisieren. Einige Browser registrieren auch nicht, dass Sie die Quelle geändert haben, es sei denn, Sie rufen an video.load()
. Ich glaube, das Problem mit .load()
Ihnen kann durch einen ersten Anruf behoben werdenvideo.pause()
. Das Entfernen und Hinzufügen von Videoelementen kann den Browser verlangsamen, da das entfernte Video weiterhin gepuffert wird . Es gibt jedoch eine Problemumgehung .
Browserübergreifende Unterstützung
Was den eigentlichen browserübergreifenden Teil betrifft, bin ich auch zu Video For Everybody gekommen . Ich habe bereits das MediaelementJS Wordpress-Plugin ausprobiert, das viel mehr Probleme verursachte als es löste. Ich vermute, die Probleme waren auf das Wordpress-Plug-In und nicht auf die eigentliche Bibliothek zurückzuführen. Ich versuche, etwas zu finden, das wenn möglich ohne JavaScript funktioniert. Bisher habe ich mir dieses einfache HTML ausgedacht:
<video width="300" height="150" controls="controls" poster="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" class="responsive">
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv" type="video/ogg" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm" type="video/webm" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone.mp4" type="video/mp4" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone3g.mp4" type="video/mp4" />
<object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="561" height="297">
<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
<param name="flashVars" value="config={'playlist':['http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg',{'url':'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4','autoPlay':false}]}" />
<img alt="No Video" src="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="561" height="297" title="No video playback capabilities, please download the video below" />
</object>
<strong>Download video:</strong> <a href="video.mp4">MP4 format</a> | <a href="video.ogv">Ogg format</a> | <a href="video.webm">WebM format</a>
</video>
Wichtige Hinweise :
- Am Ende wurde das Ei als erstes gesetzt,
<source>
da Mac OS Firefox den Versuch, das Video abzuspielen, beendet, wenn es als erstes auf einen MP4 stößt <source>
.
- Die richtigen MIME - Typen sind wichtige .ogv Dateien sein sollten
video/ogg
, nicht video/ogv
- Wenn Sie HD-Video haben, ist Firefogg der beste Transcoder, den ich für OGG-Dateien in HD-Qualität gefunden habe
- Die
.iphone.mp4
Datei ist für das iPhone 4+ vorgesehen, das nur MPEG-4-Videos mit H.264 Baseline 3-Video und AAC-Audio wiedergibt. Der beste Transcoder, den ich für dieses Format gefunden habe, ist Handbrake. Die Verwendung der Voreinstellung für iPhone und iPod Touch funktioniert auf dem iPhone 4+. Damit das iPhone 3GS funktioniert, müssen Sie die Voreinstellung für den iPod verwenden, die eine viel niedrigere Auflösung aufweist, als die ich hinzugefügt habe video.iphone3g.mp4
.
- In Zukunft können wir ein
media
Attribut für die <source>
Elemente verwenden, um auf mobile Geräte mit Medienabfragen abzuzielen. Derzeit unterstützen die älteren Apple- und Android-Geräte dies jedoch nicht gut genug.
Bearbeiten :
- Ich verwende immer noch Video für alle, aber jetzt habe ich FlowPlayer verwendet, um den Flash-Fallback zu steuern, der über eine fantastische JavaScript-API verfügt , mit der er gesteuert werden kann.