TubeLoc: YouTube-Player – AS3-Bibliothek

Dieser Artikel wurde von einem externen Entwickler verfasst. Das YouTube API-Team dankt Ben Longoria für seine Zeit und seine Fachkenntnisse.


Ben Longoria, University of Wisconsin – Madison, Academic Technology
Februar 2009

Einführung

TubeLoc – Demo für Chromeless Player
Abbildung 1: Chromeless Player-Demo

Wow. In etwa einem Monat wird die YouTube Player API ab dem aktuellen Datum ein Jahr alt sein. Wie viele Internetjahre sind das? Es wurden bereits einige tolle Projekte mit der API entwickelt. Im YouTube Developer API-Blog siehst du, dass dort eine Reihe großartiger Entwickler mitarbeitet haben.

Die aktuelle Version der YouTube API Player-Anwendungen ist in der Skriptsprache ActionScript 2 geschrieben. Die Sprache ist zwar weiterhin eine tolle Sprache, aber viele Nutzer verwenden heute ActionScript 3 und/oder Flex. Das Problem ist, dass Sie ein paar Schritte ausführen müssen, damit die Anwendungen von ActionScript 2 mit den Anwendungen von ActionScript 3 kommunizieren können. „Aber warte... Ich glaube, das habe ich schon einmal gehört. Gibt es dafür schon etwas?“, fragen Sie sich vielleicht.

Viele Nutzer haben sich bereits überlegt, wie man das macht, und uns in den YouTube API-Entwicklerforen um Rat fragen. Es gibt auch die Projekte AS3 Chromeless Wrapper und Flex Embedded Player, die Entwicklern die Nutzung erleichtern.

Ich wollte die Player API-Funktionalität ganz einfach in ActionScript 3 oder MXML wiederverwenden. Ein Flex-kostenloser Kurs für diese Flex-Allergic-Projekte und eine nutzerfreundliche Flex-Komponente für diese Flex-Lieblingsprojekte. TubeLoc erfüllt beide Anforderungen.

TubeLoc (eine Kombination aus YouTube und LocalConnection) ist eine ActionScript 3-Bibliothek, die als Adapter für die YouTube ActionScript 2 Player API dient. Sie können YouTube Video-Funktionen ganz einfach zu Ihren ActionScript 3- oder Flex-Anwendungen hinzufügen. Verwenden Sie dazu entweder den YouTube-Player in Chrome oder Chromeless. TubeLoc verwendet die LocalConnection-Klasse für die Kommunikation mit einer ActionScript 2-Media- SWF-Datei. Die SWF-Datei von ActionScript 2 kommuniziert mit dem offiziellen YouTube API-Player. Wie verwenden wir das?

Die Lage des Landes

Laden Sie zuerst die aktuelle Version der Bibliothek aus dem Google Code-Projekt herunter. Nach dem Entpacken des Release-ZIP-Archivs befindet sich ein as3-Verzeichnis. Darunter befindet sich das Verzeichnis src mit einigen Beispielklassen. Sie können diese als Ausgangspunkt verwenden. Unter com/enefekt/tubeloc im Verzeichnis src gibt es zwei Dateien. Sie können Movie.as in Ihren Flex-Projekten und Ihre ActionScript 3-Projekte in MovieSprite.as verwenden. In com/enefekt/tubeloc/event gibt es verschiedene Ereignisklassen für die verschiedenen Benachrichtigungen, die vom Player gesendet werden können.

Bevor Sie die Beispiele in dieser Anleitung ausprobieren, prüfen Sie, ob sich das Verzeichnis src im Verzeichnis as3 im Klassenpfad befindet. Wie Sie dabei vorgehen, hängt davon ab, wofür Sie die Entwicklungsumgebung verwenden. Sehen Sie sich daher die Dokumentation Ihrer Entwicklungsumgebung an.

Nachdem du deine Demo oder Anwendung kompiliert hast, benötigst du die ActionScript 2 SWF, die mit der YouTube Player API kommuniziert. Du findest diese SWF-Datei im Release-Archiv hier: as3/lib/as2_tubeloc.swf. Achten Sie darauf, dass es sich neben der HTML-Datei befindet, in die Ihre SWF-Anwendung eingebettet ist. Beispiel:

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

Hinweis: Sie können den Pfad zu dieser SWF-Datei mithilfe der Eigenschaft playerWrapperUrl mit der Bibliothek ändern.

Movie.as verwenden

Sehen wir uns an, wie die Flex-Version von TubeLoc verwendet wird. Wir sehen uns zuerst den gesamten Chrome-Player (mit allen Steuerelementen) an, dann den BYOC Chromeless Player. So verwenden Sie den Chrome-Player in MXML:

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" />

Das weiß ich wirklich. Nein, gewiss nicht. Gehen wir also verrückt nach Chrome:

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" chromeless="true" />

Wir ergänzen den Schmerz mit einem weiteren Attribut. Das ist alles. So sieht die gesamte MXML-Datei aus:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
		xmlns:tubeloc="com.enefekt.tubeloc.*">
   
	<!-- TubeLoc Movie Component -->
	<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
			videoId="GJ1sZBTnbuE" chromeless="true" />
	
</mx:Application> 

Hinweis: Im mx:Application-Element fügen wir den Namespace tubeloc mit dem Paket für die Movie-Komponente hinzu. Danach können wir die Komponente wie gezeigt verwenden. Später sehen wir uns an, welche Komponenten für diese Komponente verfügbar sind und festgelegt werden.

MovieSprite.as verwenden

Sehen wir uns nun an, wie Sie die ActionScript 3-Version von TubeLoc verwenden. Diese Version erfordert keine Klassen aus dem Flex-Framework und verwendet nur native Flash Player-Klassen. Wir werden uns zuerst damit befassen, wie der vollwertige Player funktioniert, dann sehen wir uns den Chromeless Player an. Hier ein vollständiges Beispiel:

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;

	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromed extends Sprite {
		private var youtubeMovie:MovieSprite;

		public function MainChromed() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite("7tTNOX8jfno");
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}

		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480 + MovieSprite.CHROME_HEIGHT;
		}
	}
}

Zuerst importieren wir die erforderlichen TubeLoc-Klassen. Anschließend erstellen wir im Konstruktor eine Instanz der Klasse MovieSprite und übergeben unsere Video-ID an den Konstruktor von MovieSprite. Als Nächstes fügen wir einen Ereignis-Listener für PlayerReadyEvent hinzu. Im Event-Handler onPlayerReady legen wir die Größe des Films fest. Hinweis: Da wir den Chrome-Player verwenden, nutzen wir eine statische CHROME_HEIGHT-Eigenschaft für die MovieSprite-Klasse. So können wir die Größe des Films unter Berücksichtigung der Chrome-Höhe anpassen.

Was ist mit dem Chromeless Player?

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
		
	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;
	
	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromeless extends Sprite {
		private var youtubeMovie:MovieSprite;
		
		public function MainChromeless() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite(null, true);
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}
		
		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480;
			youtubeMovie.loadVideoById("7tTNOX8jfno");
		}
	}
}

Was ist anders? Im Konstruktor übergeben wir null für die Video-ID und der zweite true-Parameter teilt der MovieSprite-Klasse mit, dass wir „chromeless“ verwenden werden. Außerdem bemerken Sie im Event-Handler onPlayerReady einen Unterschied. Hier wird das Video mithilfe der Methode loadVideoById nach ID geladen.

Was kann ich anrufen und was bekomme ich?

Welche Anrufe sind möglich und mit welchen Veranstaltungen müssen wir zusammenarbeiten? Im heruntergeladenen Release-Archiv finden Sie eine vollständige Code-Dokumentation, um die Details zu erhalten. Kurzer Überblick über Movie.as und MovieSprite.as:

seekTo(seconds:Number, allowSeekAhead:Boolean=true):void

setVolume(volume:Number):void

getVolume():Number

unMute():void

mute():void

clearVideo():void

setSize(width:Number, height:Number):void

loadVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

cueVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

stopVideo():void

playVideo():void

pauseVideo():void

destroy():void

Zusätzlich zu diesen Methoden haben Sie in der Movie.as-Komponente Zugriff auf folgende Eigenschaften:

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

Hier sind die Ereignisse, die du abonnieren kannst. Weitere Informationen finden Sie in der Dokumentation.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Fazit

Ich hoffe, dass du mit diesem Artikel YouTube-Funktionen und -Inhalte in deine Flash-Anwendungen integrieren kannst. Beachten Sie bei der Entwicklung mit TubeLoc die folgende Einschränkung: Es können nicht zwei YouTube-Player gleichzeitig auf der Bühne sein.

Wir hoffen, dass sich das Problem so schnell beheben lässt. Wenn Sie Fehler finden oder Funktionen fehlen, rufen Sie das Google Code-Projekt auf und melden Sie es in der Problemverfolgung. Vielen Dank, dass Sie sich die Zeit zum Lesen dieser E-Mail genommen haben.

Biografie des Autors


Ben Longoria

Ben Longoria ist Entwickler von akademischen Anwendungen für die University of Wisconsin-Madison. Er entwickelt seit Flash 5 Flash, seit Flex 2 Flex. In den letzten zwei Jahren hat er außerdem Mozilla-gestützte Anwendungen entwickelt. Er hat an einer Reihe von Bildungs- und wissenschaftlichen Projekten mitgearbeitet, darunter plattformübergreifende Anwendungen, die sowohl auf den Browser als auch auf den Desktop ausgerichtet sind. Er nimmt aktiv an der Gestaltung von Benutzeroberflächen und Interaktionen teil und genießt die Herausforderung, nutzerfreundliche Software zu entwickeln. Sein Blog ist unter http://enefekt.com/sansbrowser/ verfügbar und seine Beiträge zu InsideRIA sind verfügbar.



Creative-Commons-Lizenz
Dieses Werk ist unter einer Creative Commons Attribution 3.0-Lizenz für die USA lizenziert.