TubeLoc: biblioteca AS3 do player do YouTube

Este artigo foi escrito e enviado por um desenvolvedor externo. A equipe da API do YouTube agradece a Ben Longoria pelo tempo e pela experiência.


Ben Longoria, Universidade de Wisconsin - Madison, Academic Technology
fevereiro de 2009

Introdução

Demonstração do player sem controles do TubeLoc
Figura 1: demonstração do player TubeLoc sem Chrome

Uau. No momento em que este artigo foi escrito, a API Player do YouTube tinha apenas um mês. Quantos anos de Internet isso representa? Vários projetos incríveis foram criados com base na API. Basta seguir o blog da API YouTube Developer para saber que há muitas pessoas que fizeram coisas incríveis com ela.

O conjunto atual de aplicativos do player da API do YouTube é escrito em ActionScript 2. Embora essa seja uma linguagem excelente, muitas pessoas agora estão usando ActionScript 3 e/ou Flex. O problema é que você precisa passar por alguns obstáculos para que os aplicativos ActionScript 2 se comuniquem com os aplicativos ActionScript 3. "Mas espere... Acho que já ouvi isso antes. Não existe algo para isso?", você pode perguntar.

Muitas pessoas já descobriram como fazer isso e compartilharam suas experiências nos fóruns de desenvolvedores da API YouTube. Também houve os projetos AS3 Chromeless Wrapper e Flex Embedded Player para facilitar o uso por desenvolvedores.

Queria uma maneira fácil e simples de reutilizar a funcionalidade da API Player apenas no ActionScript 3 ou MXML. Uma classe sem Flex para projetos alérgicos a ele e um componente Flex fácil de usar para projetos que adoram o Flex. O TubeLoc atende aos dois requisitos

O TubeLoc (um mashup do YouTube e do LocalConnection) é uma biblioteca ActionScript 3 que funciona como um adaptador para a API Player do YouTube ActionScript 2. É possível adicionar facilmente a funcionalidade de vídeo do YouTube aos seus aplicativos ActionScript 3 ou Flex com os players do YouTube com ou sem moldura. O TubeLoc usa a classe LocalConnection para se comunicar com um SWF mediador do ActionScript 2. O SWF do ActionScript 2 se comunica com o player oficial da API do YouTube. Como usar isso?

O cenário atual

Primeiro, faça o download da versão atual da biblioteca no projeto Google Code. Depois de descompactar o arquivo ZIP de lançamento, você vai encontrar um diretório as3. Abaixo dele está o diretório src, que inclui algumas classes de exemplo. Use-os como ponto de partida. Em com/enefekt/tubeloc no diretório src, há dois arquivos. O Movie.as pode ser usado em projetos Flex, e o MovieSprite.as pode ser usado em projetos ActionScript 3. Em com/enefekt/tubeloc/event, há várias classes de eventos para as diferentes notificações que podem ser enviadas pelo player.

Antes de testar os exemplos deste tutorial, verifique se o diretório src no diretório as3 está no seu caminho de classe. O processo para fazer isso é diferente dependendo do que você usa para desenvolver. Portanto, consulte a documentação do seu ambiente de desenvolvimento.

Depois de compilar a demonstração ou o aplicativo, você vai precisar do SWF do ActionScript 2 que se comunica com a API Player do YouTube. Você pode encontrar esse SWF no arquivo de versões aqui: as3/lib/as2_tubeloc.swf. Basta verificar se ele está ao lado do arquivo HTML que está incorporando seu aplicativo SWF, como este:

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

Observação: é possível mudar o caminho para esse SWF usando a propriedade playerWrapperUrl com a biblioteca.

Como usar o Movie.as

Vamos conferir como usar a versão Flex do TubeLoc. Vamos analisar primeiro o player completo (com todos os controles) e depois o player sem controles. Confira como usar o player full-chrome em MXML:

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

Eu sei, eu sei, é doloroso, certo? De jeito nenhum. Vamos fazer uma loucura e remover o Chrome:

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

Estamos adicionando mais um atributo, só isso. Confira como o arquivo MXML ficaria:

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

Observação: no elemento mx:Application, adicionamos o namespace tubeloc com o pacote para o componente Movie. Depois disso, podemos usar o componente como demonstrado. Mais tarde, vamos analisar o que está disponível para definir e chamar esse componente.

Como usar o MovieSprite.as

Agora vamos conferir como usar a versão ActionScript 3 do TubeLoc. Essa versão não requer classes do framework Flex e usa apenas classes nativas do Flash Player. Vamos analisar como fazer o player com controles e depois o sem controles. Confira um exemplo 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;
		}
	}
}

Primeiro, importamos as classes TubeLoc necessárias. Em seguida, no construtor, criamos uma instância da classe MovieSprite e transmitimos o ID do vídeo para o construtor do MovieSprite. Em seguida, adicionamos um listener de eventos para o PlayerReadyEvent. No manipulador de eventos onPlayerReady, definimos o tamanho do filme. Observação: como estamos usando o player full-chrome, estamos aproveitando uma propriedade estática CHROME_HEIGHT na classe MovieSprite. Isso nos ajuda a dimensionar o filme considerando a altura do chrome.

E o player sem controles?

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

O que vai mudar? No construtor, transmitimos null para o ID do vídeo, e o segundo parâmetro true informa à classe MovieSprite que vamos usar o Chromeless. Você também vai notar uma diferença no manipulador de eventos onPlayerReady. É aqui que carregamos o vídeo por ID usando o método loadVideoById.

What Can I Call, What Do I Get?

O que está disponível para chamada e com quais eventos precisamos trabalhar? No arquivo de lançamento que você fez o download, há uma documentação completa do código para conferir os detalhes. Como visão geral rápida, para Movie.as e MovieSprite.as, você tem estes 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

Além desses métodos, no componente Movie.as, você tem acesso a estas propriedades:

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

Confira os eventos para se inscrever. Consulte mais detalhes na documentação.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Conclusão

Esperamos que este artigo tenha ajudado você a integrar a funcionalidade e o conteúdo do YouTube nos seus aplicativos Flash. Há uma limitação que você precisa considerar ao desenvolver com o TubeLoc: não é possível ter dois players do YouTube no palco ao mesmo tempo.

Esperamos que isso seja resolvido em breve. Portanto, quando você encontrar bugs ou recursos ausentes, acesse o projeto do Google Code e informe no Issue Tracker. Agradecemos por ler.

Biografia do autor


Ben Longoria

Ben Longoria é desenvolvedor de aplicativos acadêmicos da Universidade de Wisconsin-Madison. Ele desenvolve com o Flash desde a versão 5 e com o Flex desde a versão 2. Nos últimos dois anos, ele também desenvolveu aplicativos com tecnologia Mozilla. Ben trabalhou em vários projetos educacionais e acadêmicos, incluindo aplicativos multiplataforma voltados para navegadores e computadores. Ele tem um papel ativo no design de interface e interação e gosta do desafio de criar softwares úteis. O blog dele está em http://enefekt.com/sansbrowser/, e você pode ler as contribuições dele para o InsideRIA.



Licença Creative Commons
Este conteúdo está licenciado sob a Licença Creative Commons Atribuição 3.0 dos Estados Unidos.