HTML5AudioVideoFallback
Problem
Seit HTML5 können Audio- und Video-Dateien mittels der HTML-Elemente <audio>
und <video>
eingebunden werden. Die meisten neueren Browser können diese nativ abspielen. Ältere Browser wissen mit diesen Elementen aber leider nichts anzufangen und ignorieren oder misinterpretieren sie daher.
Desweiteren beherrschen neuere Browser zwar <audio>
und <video>
, können aber nicht alle Datei-Formate abspielen.
Lösung
Mit dem jQuery-Plugin HTML5AudioVideoFallback werden die Medien für alle Browser zugänglich. Dazu wird das Medium mit einem Flash-Player abgespielt, aber nur, wenn der Browser die Elemente nicht richtig interpretieren oder die zur Verfügung stehenden Datei-Formate nicht abspielen kann. Sollte der Flash-Player nicht eingebettet werden können, da zum Beispiel das Flash-Plugin fehlt, werden Links zum Download der Dateien angeboten. Selbiges geschieht auch, wenn dem Flash-Player kein geeignetes Datei-Format zur Verfügung steht. Ist das Flash-Plugin des Browsers veraltet, erscheint die Bitte, dieses zu aktualisieren (expressinstall).
Demo ansehen (mit FlowPlayer als Flash-Fallback)
Demo ansehen (mit NonverBlaster als Flash-Fallback)
Einbindung
Um HTML5AudioVideoFallback zu verwenden, müssen jQuery, swfobject, enablehtml5.min.js und html5audiovideofallback.min.js eingebunden sein. Die enablehtml5.min.js "repariert" die HTML5-Medien-Elemente für ältere Browser. Die html5audiovideofallback.min.js stellt das eigentliche Plugin dar. Auf SWFObject kann verzichtet werden, wenn die Option playerDirectEmbedCall
verwendet wird, um den Flash-Player einzubetten (siehe Beispiele).
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="js/swfobject.min.js"></script> <script type="text/javascript" src="js/enablehtml5.min.js"></script> <script type="text/javascript" src="js/html5audiovideofallback.min.js"></script>
Die Medien werden per ganz normalem HTML5 eingebunden, zum Beispiel wie folgt. Die Pfade zu den Medien können demnach relativ zur HTML-Datei oder absolut angegeben werden. Wenn der Mimetype der jeweiligen <source>
direkt angegeben ist, haben es der Browser und das HTML5AudioVideoFallback leichter, diesen herauszufinden.
<!-- Audio --> <audio controls> <source src="audios/myaudio.mp3" type="audio/mpeg" /> <source src="audios/myaudio.ogg" type="audio/ogg" /> </audio> <!-- Video --> <video width="380" height="285" poster="images/myposter.jpg" controls> <source type="video/mp4" src="videos/myvideo.mp4" /> <source type="video/ogg" src="videos/myvideo.ogv" /> <source type="video/webm" src="videos/myvideo.webm" /> </video>
Nun muss nur noch das Plugin mit der gewünschten Konfiguration aufgerufen werden.
<script type="text/javascript"> $(document).ready(function(){ // Videos mit Flowplayer als Flash-Fallback $('video').HTML5AudioVideoFallback(); // Audios mit Flowplayer als Flash-Fallback $('audio').HTML5AudioVideoFallback({ flashMediumSrcType: 'audio/mpeg', width: 300, height: 28, params: '{"flashvars": \"config={\'clip\': {\'url\': \'###MEDIUM_SRC###\', \'autoPlay\': 0}, \'canvas\': {\'backgroundColor\': \'#000000\'}, \'plugins\': {\'controls\': {\'fullscreen\': 0, \'height\': 28, \'autoHide\': 0}}}\"}' }); }); </script>
Konfiguration
Standardmäßig wird FlowPlayer als Flash-Player verwendet, der mittels swfobject eingebettet wird. Mit Hilfe der Parameter flashPlayerSrc
, initFunction
, flashvars
, params
und attributes
kann aber auch ein anderer Flash-Player, wie zum Beispiel NonverBlaster, verwendet werden.
Über die Option playerDirectEmbedCall
kann auch ein eigener Einbettungscode statt swfobject verwendet werden. Dies kann sinnvoll sein, um zum Beispiel beim FlowPlayer die Referenz auf das FlowPlayer-Objekt zu erhalten, um auf Events des Players zu reagieren. Die Optionen flashvars
, params
und attributes
haben in diesem Fall keine Auswirkung.
Per Default sind die Einstellungen außerdem für ein MP4-Video (flashMediumSrcType: 'video/mp4'
) gemacht. Für Audio-Dateien muss der flashMediumSrcType
entsprechend angepasst werden (zum Beispiel auf flashMediumSrcType: 'audio/mpeg'
für MP3-Dateien). Außerdem sollten für Audio-Dateien width
und height
spezifiziert werden.
Folgende Optionen können beim Aufruf des Plugins übergeben werden. Diese überschreiben dann die Default-Einstellungen.
Option | Beschreibung | Default-Wert |
---|---|---|
idPrefix |
Präfix für das id -Attribut des Flash-Containers/-Objekts. Wenn generateId true ist, wird an diesen Präfix zur Eindeutigkeit ein Zeitstempel angehängt. |
'HTML5AudioVideoFallback_' |
generateId |
Wenn true , wird die id des Flash-Containers/-Objekts generiert, indem an den idPrefix ein Zeitstempel angehängt wird. Andernfalls wird der idPrefix als id verwendet. |
true |
flashPlayerSrc |
Der Pfad zum Flash-Player-SWF, relativ zur aufrufenden HTML-Datei. | 'lib/flowplayer/flowplayer-3.2.7.swf' |
flashExpressInstallSrc |
Der Pfad zum expressinstall.swf, relativ zur aufrufenden HTML-Datei. | 'lib/expressinstall.swf' |
initFunction |
Der Name der Initialisierungsfunktion für den Flash-Player (falls benötigt). | null |
width |
Die Breite des Flash-Players, wenn die Breite nicht als width -Attribut des Video-Elements gegeben ist oder es sich um ein Audio handelt. |
600 |
height |
Die Höhe des Flash-Players, wenn die Höhe nicht als height -Attribut des Video-Elements gegeben ist oder es sich um ein Audio handelt. |
400 |
flashMediumSrcType |
Der Mimetype der Audio-/Video-Datei, die als Flash-Fallback eingebettet werden soll (zum Beispiel video/mp4, video/ogg, video/webm, video/x-flv, audio/mpeg, audio/ogg). Bitte sicherstellen, dass der Flash-Player diesen Medientyp auch abspielen kann. | 'video/mp4' |
flashVersion |
Die mindestens zu verwendende Flash-Version. Ist die Flash-Version des Clients älter, wird ein Update (expressinstall) angeboten. | '9' |
flashvars |
Die flashvars für den Flash-Player. Folgende Platzhalter können hierbei verwendet werden (siehe unten):###MEDIUM_SRC### , ###VIDEO_POSTER_SRC### , ###FLASH_ID### |
'' |
params |
Die params für den Flash-Player. Folgende Platzhalter können hierbei verwendet werden (siehe unten): ###MEDIUM_SRC### , ###VIDEO_POSTER_SRC### , ###FLASH_ID### |
'{"flashvars": \"config={\'clip\': {\'url\': \'###MEDIUM_SRC###\', \'autoPlay\': 0}, \'canvas\': {\'backgroundColor\': \'#000000\', \'backgroundImage\': \'###VIDEO_POSTER_SRC###\'}}\"}' |
attributes |
Die attributes für den Flash-Player. Folgende Platzhalter können hierbei verwendet werden (siehe unten): ###MEDIUM_SRC### , ###VIDEO_POSTER_SRC### , ###FLASH_ID### |
'' |
playerDirectEmbedCall |
Ein Ausdruck, der als Funktion aufgerufen wird (zum Beispiel "return $f(...)" beim FlowPlayer). Der Rückgabewert wird als data.flashMedium gesetzt. Wenn playerDirectEmbedCall nicht null ist, wird dieser statt SWFObject für die Flash-Player-Einbettung verwendet. Die Optionen flashvars , params und attributes haben in diesem Fall keine Auswirkung. Folgende Platzhalter können hierbei verwendet werden (siehe unten):###FLASH_ID### , ###MEDIUM_SRC### , ###VIDEO_POSTER_SRC### , ###WIDTH### , ###HEIGHT### , ###FLASH_PLAYER_SRC### , ###FLASH_EXPRESS_INSTALL_SRC### , ###FLASH_VERSION### |
null |
alternateMessageHTML |
Die Meldung (als HTML), die erscheinen soll, wenn der Flash-Player nicht eingebettet werden kann oder kein passendes Medium für den Flash-Player zur Verfügung steht. Folgende Platzhalter können hierbei verwendet werden (siehe unten):###ALTERNATE_MESSAGE_LINKS### , ###VIDEO_POSTER_SRC### |
'<div><p>Unable to play medium. Please use download links provided:</p><ul class="linklist">
###ALTERNATE_MESSAGE_LINKS### </ul></div>' |
alternateMessageLink |
Die HTML-Struktur, die einen Link in der alternateMessageHTML darstellt. Folgende Platzhalter können hierbei verwendet werden (siehe unten):###MEDIUM_SRC### , ###MEDIUM_SRC_FILENAME### , ###MEDIUM_MIMETYPE### |
'<li><a href=
"###MEDIUM_SRC###">
###MEDIUM_SRC_FILENAME###</a> (###MEDIUM_MIMETYPE###)</li>' |
alwaysUseFlash |
Wenn true , wird immer Flash anstelle des nativen HTML5-Audio/-Video verwendet. |
false |
Die Platzhalter werden folgendermaßen ersetzt:
Platzhalter | Beschreibung |
---|---|
###FLASH_PLAYER_SRC### |
Der Pfad zum Flash-Player-SWF (relativ zur aufrufenden HTML-Datei). |
###FLASH_EXPRESS_INSTALL_SRC### |
Der Pfad zum expressinstall.swf (relativ zur aufrufenden HTML-Datei). |
###FLASH_VERSION### |
Die mindestens zu verwendende Flash-Version. |
###MEDIUM_SRC### |
Der Pfad zur Audio-/Video-Datei. |
###MEDIUM_SRC_FILENAME### |
Der Dateiname der Audio-/Video-Datei. |
###MEDIUM_MIMETYPE### |
Der Mimetype der Audio-/Video-Datei. |
###VIDEO_POSTER_SRC### |
Der Pfad zum Poster-Bild eines Videos. |
###FLASH_ID### |
Die id des Flash-Containers/-Objekts. |
###WIDTH### |
Die Breite des Mediums. |
###HEIGHT### |
Die Höhe des Mediums. |
###ALTERNATE_MESSAGE_LINKS### |
Eine Liste mit Links zu den Audio-/Video-Dateien für die alternateMessageHTML . Jeder Link ist nach der per alternateMessageLink spezifizierten Struktur aufgebaut. |
Data-Eigenschaften
Auf alle Optionen kann via $('myElement').data('HTML5AudioVideoFallback').myOptionName
zugegriffen werden. Desweiteren kann auf folgende Eigenschaften zugegriffen werden:
Data-Eigenschaft | Beschreibung |
---|---|
isFlashSupported |
true wenn Flash vom Browser unterstützt wird, andernfalls false . |
medium |
Das jQuery-Objekt des Mediums. |
mediumSources |
Die <source> -jQuery-Objekte oder das jQuery-Objekt des Mediums selbst, wenn das Medium kein <source> -Kinder hat. |
posterSrc |
Der Pfad zum Poster-Bild eines Videos. |
flashId |
Die id des Flash-Containers/-Objekts. |
flashMediumSrc |
Der Pfad zur Audio-/Video-Datei, die mit dem Flash-Player abgespielt werden soll. |
fallbackContainer |
Das jQuery-Objekt des <div> -Containers, das das Flash-Medium oder die alternative Meldung mit Download-Links enthält. |
flashMedium |
Das Flash-Medium-Objekt, das von der Einbettung per SWFObjekt oder dem direkten Einbinden per playerDirectEmbedCall zurückgegeben wurde. |
Methoden
Die folgenden Methoden können per $('myElement').HTML5AudioVideoFallback('myMethodName')
aufgerufen werden:
Methodenname | Beschreibung |
---|---|
'remove' |
Entfernt den alternativen Fallback-Inhalt. |
Beispiele
Beispiel-Konfiguration mit FlowPlayer als Flash-Fallback
// Videos mit Flowplayer als Flash-Fallback $('video').HTML5AudioVideoFallback(); // Audios mit Flowplayer als Flash-Fallback $('audio').HTML5AudioVideoFallback({ flashMediumSrcType: 'audio/mpeg', width: 300, height: 28, params: '{"flashvars": \"config={\'clip\': {\'url\': \'###MEDIUM_SRC###\', \'autoPlay\': 0}, \'canvas\': {\'backgroundColor\': \'#000000\'}, \'plugins\': {\'controls\': {\'fullscreen\': 0, \'height\': 28, \'autoHide\': 0}}}\"}' });
Beispiel-Konfiguration mit NonverBlaster als Flash-Fallback
// Videos mit NonverBlaster als Flash-Fallback $('video').HTML5AudioVideoFallback({ flashPlayerSrc: 'lib/nonverblaster/NonverBlaster.swf', initFunction: initNonverBlaster, flashMediumSrcType: 'video/mp4', flashvars: '{"mediaURL": "###MEDIUM_SRC###", "teaserURL": "###VIDEO_POSTER_SRC###", "allowSmoothing": "true", "autoPlay": "false", "buffer": "6", "showTimecode": "true", "loop": "false", "controlColor": "0xffffff", "controlBackColor": "0x000000", "scaleIfFullScreen": "true", "showScalingButton": "true", "showTimecode": "true", "defaultVolume": "100", "crop": "false"}', params: '{"menu": "false", "allowFullScreen": "true", "allowScriptAccess": "always", "quality": "high", "wmode": "transparent"}', attributes: '{"id": "###FLASH_ID###", "bgcolor": "#000000"}' }); // Audios mit NonverBlaster als Flash-Fallback $('audio').HTML5AudioVideoFallback({ flashPlayerSrc: 'lib/nonverblaster/NonverBlaster.swf', initFunction: initNonverBlaster, flashMediumSrcType: 'audio/mpeg', width: 200, height: 20, flashvars: '{"mediaURL": "###MEDIUM_SRC###", "teaserURL": "###VIDEO_POSTER_SRC###", "allowSmoothing": "true", "autoPlay": "false", "buffer": "6", "showTimecode": "true", "loop": "false", "controlColor": "0xffffff", "controlBackColor": "0x000000", "scaleIfFullScreen": "true", "showScalingButton": "true", "showTimecode": "true", "defaultVolume": "100", "crop": "false"}', params: '{"menu": "false", "allowFullScreen": "true", "allowScriptAccess": "always", "quality": "high", "wmode": "transparent"}', attributes: '{"id": "###FLASH_ID###", "bgcolor": "#000000"}' });
Beispiel-Konfiguration mit FlowPlayer als Flash-Fallback (playerDirectEmbedCall)
// Videos mit Flowplayer als Flash-Fallback $('video').HTML5AudioVideoFallback({ playerDirectEmbedCall: "return $f('###FLASH_ID###', {src: '###FLASH_PLAYER_SRC###', expressinstall: '###FLASH_EXPRESS_INSTALL_SRC###', version: ['###FLASH_VERSION###', 0], width: '###WIDTH###', height: '###HEIGHT###'}, {'clip': {'url': '###MEDIUM_SRC###', 'autoPlay': false}, 'canvas': {'backgroundColor': '#000000', 'backgroundImage': '###VIDEO_POSTER_SRC###'}});"} ); // Audios mit Flowplayer als Flash-Fallback $('audio').HTML5AudioVideoFallback({ flashMediumSrcType: 'audio/mpeg', width: 300, height: 28, playerDirectEmbedCall: "return $f('###FLASH_ID###', {src: '###FLASH_PLAYER_SRC###', expressinstall: '###FLASH_EXPRESS_INSTALL_SRC###', version: ['###FLASH_VERSION###', 0], width: '###WIDTH###', height: '###HEIGHT###'}, {'clip': {'url': '###MEDIUM_SRC###', 'autoPlay': false}, 'canvas': {'backgroundColor': '#000000'}, 'plugins': {'controls': {'autoHide': 0}}});" });
Downloads
- HTML5AudioVideoFallback-Source als JS-Datei (YUI-komprimiert, ca. 6 KB)
- EnableHTML5-Source als JS-Datei (YUI-komprimiert, ca. 3 KB)
- HTML5AudioVideoFallback, EnableHTML5-Source und Demo als ZIP (ca. 338 KB)