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).

Verschiedene Browser- und Flash-Video-Player.
Verschiedene Browser- und Flash-Video-Player.

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. 'HTML5AudioVideo­Fallback_'
generate­Id 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
flash­Player­Src Der Pfad zum Flash-Player-SWF, relativ zur aufrufenden HTML-Datei. 'lib/flowplayer/­flowplayer-3.2.7.swf'
flash­Express­Install­Src Der Pfad zum expressinstall.swf, relativ zur aufrufenden HTML-Datei. 'lib/­expressinstall.swf'
init­Function 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
flash­Medium­Src­Type 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'
flash­Version Die mindestens zu verwendende Flash-Version. Ist die Flash-Version des Clients älter, wird ein Update (expressinstall) angeboten. '9'
flash­vars 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###
''
player­Direct­Embed­Call 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
alternate­Message­HTML 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>'
alternate­Message­Link 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>'
always­Use­Flash 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}}}\"}'
});

Demo ansehen

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"}'
});

Demo ansehen

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}}});"                         
});

Demo ansehen

Downloads