youtube chromeless AS3-Player
-
05-07-2019 - |
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).
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.
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