Frage

Ich bin vermasseln um mit dem neuen AS3 API youtube aber blieb stecken. Das ist wie weit ich habe (aus einem Blick auf ihrem Beispielcode).

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

Ich weiß wirklich nicht, was der nächste Schritt ist. Ich bekomme keine Fehler und nichts wird zurückgeführt. Ich bin mir ziemlich sicher, dass meine Ereignisse nicht korrekt umgesetzt werden.

Update: Ich folgte Amarghosh des beantwortet und tat dies statt:

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

Nun ist die onPlayerReady und die OnStateChange Ereignisse ausgelöst, aber ich Fehler bekommen. Wenn Objektverfolgung (e) .Data i diesen Fehler

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value. (Stranslated aus schwedischem) Beim Wechsel (e.target) Objekt .Data es "undefiniert" und Object (e.target) Spuren Spuren [Objekt SwfProxy].

Wenn ich player.loadVideoById("uad17d5hR5s"); versuche ich diesen Fehler:

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

War es hilfreich?

Lösung

Entschuldigung für die ganze Bibliothek Verwirrung, ich glaube, ich aber die Antwort auf Ihre anderen Fehler haben. Wenn Sie diese Sprite(loader.content) Sie tun werfen ‚Kraft‘ der Spieler ein Sprite zu sein, weil Sie Methoden der api möchte ich mit einem einfachen alten Objekt empfehlen, weil es nicht über untypisierten Methoden beschweren:

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

Andere Tipps

Wenn der Variable player soll den geladenen YouTube-Player halten, ändert ihre Art von Object zu etwas festeren wie Sprite.

private var player:Sprite;

Nun, ich weiß nicht, den youtube-API, aber es gibt ein Problem in Ihrer onLoaderInit Methode. Sie sollten statt dessen LoaderInfo Objekt jene Zuhörer auf den geladenen Inhalt hinzufügen. LoaderInfo entsendet Ereignisse an den Ladevorgang in Verbindung stehend - es ist nicht relevant, wenn das Laden erfolgreich ist. Die Ereignisse in diesen Anrufen erwähnt würden durch den geladenen Inhalt versandt werden. Ändern Sie die Methode:

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

relativ kürzlich veröffentlichte youtube eine Wrapper-Bibliothek für ihre chromeless Spieler. Sie sollten auf jeden Fall diese Version verwenden (man könnte es wieder schreibt selbst, aber das ist, das Rad neu zu erfinden), besuchen Sie das Tutorial / Beispiel auf dieser Seite

Actionscript 3.0 Wrapper für Chromeless Spieler

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top