Pergunta

Estou brincando com a nova API do YouTube AS3, mas ficou preso. Isto é quão longe eu tenho (de olhar para o seu código de exemplo).

http://pastie.org/656088

public class Main extends Sprite 
{
    Security.allowDomain("*");

    private var player:Object;
    private var loader:Loader;

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
        loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
    }

    private function onLoaderInit(e:Event):void
    {
        addChild(loader);
        loader.contentLoaderInfo.addEventListener("onReady", onPlayerReady);
        loader.contentLoaderInfo.addEventListener("onError", onPlayerError);
        loader.contentLoaderInfo.addEventListener("onStateChange", onPlayerStateChange);
        loader.contentLoaderInfo.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
    }

    private function onPlayerReady(e:Event):void
    {
        trace("Player ready: " + Object(e).Data);
    }
    private function onPlayerError(e:Event):void
    {
        trace("Player error: " + Object(e).Data);
    }
    private function onPlayerStateChange(e:Event):void
    {
        trace("Player state: " + Object(e).Data);
    }
    private function onVideoPlaybackQualityChange(e:Event):void
    {
        trace("Video quality: " + Object(e).Data);
    }
}

Eu realmente não sei o que o próximo passo é. Eu recebo nenhum erro e nada é rastreado. Tenho certeza que meus eventos não estão implementadas corretamente.

Update: Segui Amarghosh do respondidas e fez isso em vez disso:

private function onLoaderInit(e:Event):void
{
  player = Sprite(loader.content);
  addChild(player);
  player.addEventListener("onReady", onPlayerReady);
  player.addEventListener("onError", onPlayerError);
  player.addEventListener("onStateChange", onPlayerStateChange);
  player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
}

Agora, o onPlayerReady e os fogos eventos OnStateChange mas recebo erros. Quando o rastreamento de objetos (e) .Data eu recebo este erro

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value. (Stranslated de Sueco) Ao mudar para Object (e.target) .Data Ele traça "indefinido" e Object (e.target) traços [objeto SwfProxy].

Se eu tentar player.loadVideoById("uad17d5hR5s"); eu recebo este erro:

1061: Call to a possibly undefined method loadVideoById through a reference with static type flash.display:Sprite.

Foi útil?

Solução

pena de toda a confusão biblioteca, eu acho que tenho a resposta para seu outro erro embora. Quando você fizer isso Sprite(loader.content) você 'força' lançar o jogador a ser um sprite, porque você quer métodos da api Eu recomendaria usar um objeto velho liso, porque ele não vai reclamar métodos sem tipo:

// No particluar type
var player:Object;

private function onLoaderInit(e:Event):void
{
    player = loader.content;
    addChild(player as DisplayObject);

    var dispatcher:IEventDispatcher = player as IEventDispatcher;
    dispatcher.addEventListener("onReady", onPlayerReady);
    dispatcher.addEventListener("onError", onPlayerError);
    dispatcher.addEventListener("onStateChange", onPlayerStateChange);
    dispatcher.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
}

Outras dicas

Se o player variável é suposto para manter o jogador youtube carregado, alterar seu tipo de Object para algo mais sólido como Sprite.

private var player:Sprite;

Agora, eu não sei a API do YouTube, mas há um problema em seu método onLoaderInit. Você deve adicionar esses ouvintes para o conteúdo carregado em vez de seu objeto LoaderInfo. despachos LoaderInfo eventos relacionados ao processo de carregamento - não é relevante uma vez que o carregamento for bem sucedida. Os eventos mencionados nesses chamadas seriam despachados pelo conteúdo carregado. Alterar o método de:

private function onLoaderInit(e:Event):void
{
  player = Sprite(loader.content);
  addChild(player);
  player.addEventListener("onReady", onPlayerReady);
  player.addEventListener("onError", onPlayerError);
  player.addEventListener("onStateChange", onPlayerStateChange);
  player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
}

relativamente pouco youtube lançou uma biblioteca wrapper para seu jogador chromeless. Você deve definitivamente usar esta versão (você poderia escrevê-lo novamente a si mesmo, mas isso é reinventar a roda), confira o tutorial / exemplo, sobre esta página

ActionScript 3.0 Wrapper para Chromeless Jogador

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top