TubeLoc: Biblioteca AS3 del reproductor de YouTube

Un desarrollador externo escribió y envió este artículo. El equipo de la API de YouTube agradece a Ben Longoria por su tiempo y experiencia.


Ben Longoria, Universidad de Wisconsin - Madison, Tecnología Académica
Febrero de 2009

Introducción

Demostración del reproductor sin bordes de TubeLoc
Figura 1: Demostración del reproductor sin Chrome de TubeLoc

¡Vaya! En el momento en que se escribe este documento, la API de YouTube Player cumplirá un año. ¿Cuántos años de Internet son? Se crearon varios proyectos excelentes con la API. Solo tienes que seguir el Blog de la API de YouTube Developer para ver que hay muchas personas que han hecho grandes cosas con ella.

El conjunto actual de aplicaciones de reproductores de la API de YouTube está escrito en ActionScript 2 y, si bien sigue siendo un excelente lenguaje, muchas personas ahora usan ActionScript 3 o Flex. El problema es que debes realizar algunos pasos para que las aplicaciones de ActionScript 2 se comuniquen con las de ActionScript 3. Es posible que te preguntes: “Pero espera… Creo que ya escuché esto antes. ¿No hay algo para esto?”.

Muchas personas ya descubrieron cómo hacerlo y compartieron su sabiduría en los Foros para Desarrolladores de la API de YouTube. También se crearon los proyectos AS3 Chromeless Wrapper y Flex Embedded Player para facilitar su uso a los desarrolladores.

Quería una forma fácil y sencilla de volver a usar la funcionalidad de la API de Player solo en ActionScript 3 o MXML. Una clase sin Flex para los proyectos alérgicos a Flex y un componente de Flex fácil de usar para los proyectos que aman Flex. TubeLoc cumple con ambos requisitos.

TubeLoc (un mashup de YouTube y LocalConnection) es una biblioteca de ActionScript 3 que funciona como adaptador de la API de YouTube ActionScript 2 Player. Puedes agregar fácilmente la funcionalidad de video de YouTube a tus aplicaciones de ActionScript 3 o Flex con los reproductores de YouTube con o sin marco. TubeLoc usa la clase LocalConnection para comunicarse con un SWF de mediador de ActionScript 2. El SWF de ActionScript 2 se comunica con el reproductor oficial de la API de YouTube. ¿Cómo usamos esto?

El panorama

Primero, debes descargar la versión actual de la biblioteca del proyecto de Google Code. Después de descomprimir el archivo ZIP de la versión, encontrarás un directorio as3. Debajo de este, se encuentra el directorio src, que incluye algunas clases de muestra. No dudes en usarlos como punto de partida. En com/enefekt/tubeloc, en el directorio src, hay dos archivos. Movie.as es lo que puedes usar en tus proyectos de Flex, y MovieSprite.as es lo que puedes usar en tus proyectos de ActionScript 3. En com/enefekt/tubeloc/event, hay varias clases de eventos para las diferentes notificaciones que se pueden enviar desde el reproductor.

Antes de probar los ejemplos de este instructivo, asegúrate de que el directorio src en el directorio as3 esté en tu ruta de clase. El proceso para hacerlo es diferente según lo que uses para desarrollar, así que consulta la documentación de tu entorno de desarrollo.

Una vez que hayas compilado tu demo o aplicación, necesitarás el archivo SWF de ActionScript 2 que se comunica con la API de YouTube Player. Puedes encontrar este SWF en el archivo de lanzamiento aquí: as3/lib/as2_tubeloc.swf. Solo asegúrate de que esté junto al archivo HTML que incorpora tu aplicación SWF, de la siguiente manera:

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

Nota: Puedes cambiar la ruta de acceso a este SWF con la propiedad playerWrapperUrl de la biblioteca.

Cómo usar Movie.as

Veamos cómo usar la versión flexible de TubeLoc. Primero, analizaremos el reproductor con borde completo (con todos los controles) y, luego, el reproductor sin borde de BYOC. Así es como se usa el reproductor de Chrome completo en MXML:

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

Lo sé, lo sé, es doloroso, ¿no? Para nada. Así que, hagamos lo siguiente:

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

Agregaremos un atributo más, eso es todo. Así es como se vería todo el archivo MXML:

<?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> 

Nota: En el elemento mx:Application, agregamos el espacio de nombres tubeloc con el paquete para el componente Movie. Después de hacerlo, podemos usar el componente como se muestra. Más adelante, veremos qué está disponible para configurar y llamar a este componente.

Cómo usar MovieSprite.as

Ahora, veamos cómo usar la versión de ActionScript 3 de TubeLoc. Esta versión no requiere clases del framework de Flex y solo usa clases nativas de Flash Player. Primero, veremos cómo crear el reproductor con borde completo y, luego, el reproductor sin borde. Este es un ejemplo completo:

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

Primero, importamos las clases de TubeLoc necesarias. Luego, en el constructor, creamos una instancia de la clase MovieSprite y pasamos nuestro ID de video al constructor de MovieSprite. A continuación, agregamos un objeto de escucha de eventos para PlayerReadyEvent. En el controlador de eventos onPlayerReady, configuramos el tamaño de la película. Nota: Como usamos el reproductor de Chrome completo, aprovechamos una propiedad estática CHROME_HEIGHT en la clase MovieSprite. Esto nos ayuda a ajustar el tamaño de la película teniendo en cuenta la altura del marco.

Muy bien. ¿Qué sucede con el reproductor sin bordes?

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

Entonces, ¿qué es diferente? En el constructor, pasamos null para el ID de video, y el segundo parámetro true le indica a la clase MovieSprite que no usaremos el navegador Chrome. También notarás una diferencia en el controlador de eventos onPlayerReady. Aquí es donde cargamos nuestro video por ID con el método loadVideoById.

¿A qué número puedo llamar? ¿Qué obtengo?

¿Qué podemos llamar y con qué eventos tenemos que trabajar? En el archivo de lanzamiento que descargaste, hay documentación completa del código para obtener los detalles. Como resumen rápido, para Movie.as y MovieSprite.as, tienes estos métodos:

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

Además de estos métodos, en el componente Movie.as, tienes acceso a estas propiedades:

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

Estos son los eventos a los que puedes suscribirte. Puedes encontrar más detalles en la documentación.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Conclusión

Espero que este artículo te haya ayudado a integrar la funcionalidad y el contenido de YouTube en tus aplicaciones para Flash. Ten en cuenta que, mientras desarrollas con TubeLoc, no puedes tener dos reproductores de YouTube en el escenario al mismo tiempo.

Esperamos que esto se solucione a su debido tiempo. Por lo tanto, cuando encuentres errores o funciones faltantes, visita el proyecto de código de Google y, luego, infórmalo en la herramienta de seguimiento de errores. ¡Gracias por leer esta información!

Biografía del autor


Ben Longoria

Ben Longoria es desarrollador de aplicaciones académicas para la Universidad de Wisconsin-Madison. Desarrolla con Flash desde la versión 5 y con Flex desde el lanzamiento de Flex 2. Durante los últimos 2 años, también ha estado desarrollando aplicaciones con tecnología de Mozilla. Ben trabajó en varios proyectos educativos y académicos, incluidas aplicaciones multiplataforma orientadas al navegador y a la computadora de escritorio. Participa activamente en el diseño de interfaces y de interacciones, y disfruta del desafío de crear software utilizable. Puedes encontrar su blog en http://enefekt.com/sansbrowser/ y leer sus contribuciones a InsideRIA.



Licencia de Creative Commons
Este trabajo cuenta con la licencia Atribución 3.0 de Estados Unidos de Creative Commons.