Question

Je rigole avec la nouvelle API youtube as3 mais je suis resté bloqué. C'est à quelle distance je suis (de regarder leur exemple de code).

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

Je ne sais pas vraiment quelle est la prochaine étape. Je ne reçois aucune erreur et rien ne se trace. Je suis à peu près sûr que mes événements ne sont pas implémentés correctement.

Mise à jour: J'ai suivi la réponse d'Amarghosh et je l'ai fait à la place:

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

Maintenant, les événements onPlayerReady et onStateChange se déclenchent, mais des erreurs se produisent. Lors du traçage de l'objet (e) .Data, j'obtiens cette erreur

ReferenceError: Erreur # 1069: la propriété Data n'a pas été trouvée pour com.google.youtube.event.ExternalEvent et il n'y a pas de valeur standard. (traduit du suédois) Lorsque vous passez à Object (e.target) .Data, il trace "" non défini". et traces d'objet (e.target) [objet SwfProxy].

Si j'essaie player.loadVideoById ("uad17d5hR5s"); j'obtiens cette erreur:

1061: Appel de la méthode loadVideoById éventuellement indéfinie via une référence de type statique flash.display: Sprite.

Était-ce utile?

La solution

désolé pour toute la confusion de la bibliothèque, je pense cependant avoir la réponse à votre autre erreur. Lorsque vous faites cela, Sprite (loader.content) , vous forcez le joueur à être transformé en sprite, car vous souhaitez utiliser les méthodes de l'API, je vous recommanderais d'utiliser un ancien objet se plaindre de méthodes non typées:

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

Autres conseils

Si la variable lecteur est censée contenir le lecteur youtube chargé, changez son type de Objet à quelque chose de plus solide, tel que Sprite .

private var player:Sprite;

Maintenant, je ne connais pas l'API youtube, mais il y a un problème dans votre méthode onLoaderInit . Vous devriez ajouter ces écouteurs au contenu chargé à la place de son objet LoaderInfo . LoaderInfo distribue les événements liés au processus de chargement - ce n'est pas pertinent une fois le chargement réussi. Les événements mentionnés dans ces appels seraient envoyés par le contenu chargé. Changez la méthode pour:

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

relativement récemment, YouTube a publié une bibliothèque d’emballages pour son lecteur sans chrome. Vous devriez définitivement utiliser cette version (vous pouvez la réécrire vous-même, mais c'est réinventer la roue), consultez le tutoriel / exemple sur cette page

Encapsuleur ActionScript 3.0 pour lecteur sans chrome

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top