TubeLoc: Biblioteca AS3 do player do YouTube

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


Ben Longoria, Universidade de Wisconsin, Madison, tecnologia acadêmica
Fevereiro de 2009

Introdução

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

Uau! Em apenas um mês, até o presente momento, a API do Player do YouTube terá um ano. Quantos anos tem a Internet? Vários projetos foram criados na API. Você só precisa seguir o Blog da API YouTube Developer para ver se há muitas pessoas que fizeram isso bem.

O conjunto atual de aplicativos de player da API do YouTube é escrito em ActionScript 2 e, embora ele continue sendo uma ótima linguagem, muitas pessoas já usam o ActionScript 3 e/ou o Flex. O problema é que é preciso executar algumas etapas para que os aplicativos do ActionScript 2 se comuniquem com os aplicativos do ActionScript 3. "Mas espere, acho que já ouvi isso. Ainda não há algo para isso?", você pode perguntar.

Muitas pessoas já descobriram como fazer isso e gentilmente expuseram nos Fóruns de desenvolvedores da API do YouTube. Também temos os projetos AS3 Chromeless Wrapper e Flex Embedded Player para facilitar o uso desses recursos.

Eu queria uma maneira fácil e simples de reutilizar a funcionalidade da API do Player apenas em ActionScript 3 ou MXML. Uma aula flexível para projetos alérgicos e um componente Flex fácil de usar para projetos que amam o Flex. O TubeLoc atendeu aos dois requisitos

O TubeLoc (um mashup do YouTube e da LocalConnection) é uma biblioteca do ActionScript 3 que serve como adaptador para a API do Player do YouTube 2. Você pode adicionar facilmente a funcionalidade de vídeo do YouTube a seus aplicativos ActionScript 3 ou Flex com os players do YouTube completos ou sem controles. O TubeLoc usa a classe LocalConnection na comunicação com um SWF do mediador do ActionScript 2. O SWF do ActionScript 2 se comunica com o player oficial da API do YouTube. Como usamos isso?

A Lei da Terra

Primeiro, faça o download da versão atual da biblioteca no projeto do Google Code (link em inglês). Depois de descompactar o arquivo ZIP de lançamento, você encontrará um diretório as3 nele. Veja abaixo o diretório src, que inclui algumas classes de amostra. Use esses pontos como ponto de partida. Em com/enefekt/tubeloc, no diretório src, há dois arquivos. O Movie.as pode ser usado nos projetos Flex, e o MovieSprite.as pode ser usado nos projetos do ActionScript 3. Em com/enefekt/tubeloc/event, há várias classes de evento para as diferentes notificações que podem ser enviadas do player.

Antes de testar os exemplos neste 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, verifique a documentação do seu ambiente de desenvolvimento.

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

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 ver como usar a versão Flex do TubeLoc. Primeiro, veremos o player completo do Chrome (com todos os controles) e depois o player sem cromo BYOC. Veja como usar o player completo do Chrome no MXML:

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

Eu sei, doloroso, certo? De jeito nenhum. Vamos estragar a memória e fazer o Chromeless:

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

Estamos melhorando o processo com mais um atributo. Esta é a aparência de todo o arquivo 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> 

Observação: no elemento mx:Application, adicionamos o namespace tubeloc com o pacote para o componente "Filme". Depois de fazer isso, podemos usar o componente conforme demonstrado. Mais tarde, vamos ver o que está disponível para definir e chamar nesse componente.

Como usar o MovieSprite.as

Agora vamos ver como usar a versão 3 de TubeLoc do ActionScript 3. Essa versão não exige classes do framework Flex e usa apenas classes nativas do Flash Player. Primeiro, veremos como fazer o player completo do Chrome e depois o player sem cromo. Veja 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 necessárias do TubeLoc. Em seguida, no construtor, criamos uma instância da classe MovieSprite e passamos nosso ID de 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 completo do Chrome, vamos usar uma propriedade estática CHROME_HEIGHT na classe MovieSprite. Isso nos ajuda a dimensionar o filme, considerando a altura do cromo.

E o player sem cromo?

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 Chrome. Você também vai notar uma diferença no manipulador de eventos onPlayerReady. Aqui, carregamos nosso vídeo por ID usando o método loadVideoById.

Como posso chamar o quê?

O que está disponível e quais eventos precisamos trabalhar? No arquivo de versão transferido por download, há a documentação do código completo para ver os detalhes. Como visão geral, você pode usar os seguintes métodos para Movie.as e 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

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

Veja os eventos em que você pode se inscrever. Veja mais detalhes na documentação.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Conclusão

Espero que este artigo tenha ajudado a integrar a funcionalidade e o conteúdo do YouTube nos seus apps em Flash. Há uma limitação a ser lembrada durante o desenvolvimento com o TubeLoc: não é possível ter dois jogadores do YouTube no cenário ao mesmo tempo.

Esperamos que isso seja resolvido no prazo. Por isso, se você encontrar bugs ou algum recurso ausente, acesse o projeto do Google Code e informe o problema no Issue Tracker. Agradecemos por ler.

Biografia do autor


Ben longoria

Ben Longoria é desenvolvedor acadêmico de aplicativos para a Universidade de Wisconsin-Madison. Ele desenvolve com o Flash desde o Flash 5 e com o Flex desde a versão Flex 2. Nos últimos dois anos, ele também desenvolveu aplicativos com a tecnologia Mozilla. Ben já trabalhou em diversos projetos educacionais e acadêmicos, incluindo aplicativos multiplataforma voltados para navegadores e computadores. Ele assume um papel ativo no design de interfaces e interações e gosta do desafio de criar software utilizável. Veja o blog dele em http://enefekt.com/sansbrowser/ e leia as contribuições dele para InsideRIA.



Licença Creative Commons
Este trabalho está licenciado sob a Licença Creative Commons Attribution 3.0 Estados Unidos.