Donnerstag, 7. Juli 2011

Anbindung der Media-On-Demand Anbieter

Grundsätzlich werden die gespielten Medien nach Typ unterschieden. Derzeit gibt es Videos, die in Flash-Containern gespielt werden (dazu gehören YouTube und Vimeo), und Sounds, die eine eigene Visualisierung besitzen (dazu gehören Jamendo und generell MP3s im Web).
Um die Anbindung in Flash zu abstrahieren, wurde das Interface IPlayer eingeführt. Dieser erlaubt den Zugriff auf alle gängigen Operationen (wie Play, Pause, Seek etc.) und gibt eine Visualisierung in Form eines MovieClips zurück. Das Interface sieht dabei wie folgt aus:

package com.strix.player
{
                import flash.display.MovieClip;
                interface IPlayer
                {
                               //initial
                               function init():void;
                               function destroy():void;

                               //actions
                               function playVideo():void;
                               function pauseVideo():void;
                               function stopVideo():void;
                               function resizeVideo(width:Number, height:Number):void;

                               //setter
                               function setVolume(volume:Number):void;
                               function setMute(mute:Boolean):void;
                               function setPlaybackSpeed(speed:Number):void;
                               function seekTo(seconds:Number):void;
                              
                               //getter
                               function isMuted():Boolean;
                               function isReady():Boolean;
                               function getVolume():Number;
                               function getCurrentTime():Number;
                               function getDuration():Number;
                               function getPercentLoaded():Number;
                               function getPlayerState():Number;
                               function getErrorState():Number;
                               function getPlaybackSpeed():Number;
                               function getVisualRepresentation():MovieClip;
                               function getLogo():MovieClip;
                               function getLink():String;
                }             
}

Für YouTube wird zur Laufzeit eine SWF-Datei eingeladen, welche den Chromeless-Player mit dem entsprechenden Video enthält. Chromeless bedeutet dabei, dass die von YouTube bekannten Steuerelemente im Player nicht angezeigt werden. Das Sound- und Video-Abspielen übernimmt der Black-Box-Container. Dieser wird gleichzeitig auch als visuelle Referenz zurückgegeben. Vimeo funktioniert ähnlich wie YouTube, mit dem Unterschied, dass es keinen Chromeless-Player gibt. Stattdessen werden alle Steuerelemente im Video angezeigt.
Der Jamendo-Player ist eine Erweiterung der MP3-Player-Klasse. Sie gibt als visuelle Referenz das eingeladene Album-Cover zurück. Der MP3 Player existiert in 2 Versionen, dem MP3-Player und dem MP3-Pitch-Player. Der MP3-Player ist die einfache Variante: Er lädt die angeforderte Datei in ein Sound-Objekt und lässt sich über die AS3-typischen Funktionen (play(), stop() etc.) steuern. Das Problem dabei ist allerdings, dass ein Verändern der Geschwindigkeit oder ein Visualisieren des Spektrums nicht realisierbar ist.
Der MP3-Pitch-Player lädt eine Datei in ein Sound-Objekt und wandelt dieses in ein Byte-Stream um. Dies geschieht nicht über die Methode SoundMixer.computeSpectrum(), sondern direkt auf dem Sound-Objekt (Sound.extract()). Die Nachteile der einfach zu benutzenden SoundMixer-Klasse sind vielfältig. Der SoundMixer ist eine statische Klasse, die für den kompletten Applikationskontext gilt. Einerseits kann diese also nur das Spektrum aller gespielten Sounds ermitteln. Wir wollen allerdings beide Decks getrennt behandeln. Andererseits kann es beim Spielen von MP3 parallel zu YouTube zu Sandbox-Problemen führen. Dadurch mussten wir aber auch auf die einfache Möglichkeit verzichten eine FFT (Fast Fourier Transformation) zu nutzen. 

Keine Kommentare:

Kommentar veröffentlichen