youtube chromeless as3 player - PullRequest
       9

youtube chromeless as3 player

0 голосов
/ 22 октября 2009

Я бездельничаю с новым API youtube as3, но застрял. Это как далеко я добрался (глядя на их пример кода).

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

Я действительно не знаю, каков будет следующий шаг. Я не получаю ошибок и ничего не отслеживается. Я почти уверен, что мои события не реализованы правильно.

Обновление: Я последовал за ответом Амаргоша и сделал вместо этого:

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

Теперь события onPlayerReady и onStateChange запускаются, но я получаю ошибки. При трассировке объекта (e). Данные я получаю эту ошибку

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value. (переведено со шведского) При изменении на Object (e.target) .Data он отслеживает «неопределенный», а Object (e.target) отслеживает [объект SwfProxy].

Если я попытаюсь player.loadVideoById("uad17d5hR5s");, я получу эту ошибку:

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

Ответы [ 3 ]

0 голосов
/ 23 октября 2009

сравнительно недавно youtube выпустил библиотеку-оболочку для своего бесхромового плеера. Вы обязательно должны использовать эту версию (вы могли бы написать ее снова самостоятельно, но это заново изобретать колесо), посмотрите руководство / пример на этой странице

Оболочка ActionScript 3.0 для Chromeless Player

0 голосов
/ 26 октября 2009

извините за всю путаницу в библиотеке, я думаю, что у меня есть ответ на вашу другую ошибку, хотя. Когда вы делаете это Sprite(loader.content), вы «заставляете» бросить игрока в спрайт, потому что вам нужны методы API, я бы порекомендовал использовать обычный старый объект, потому что он не будет жаловаться на нетипизированные методы:

// 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);
}
0 голосов
/ 23 октября 2009

Если переменная player должна содержать загруженный проигрыватель YouTube, измените ее тип с Object на более твердый, например Sprite.

private var player:Sprite;

Теперь я не знаю API youtube, но в вашем методе onLoaderInit есть проблема. Вы должны добавить этих слушателей к загруженному контенту вместо его LoaderInfo объекта. LoaderInfo отправляет события, связанные с процессом загрузки - это не актуально после успешной загрузки. События, упомянутые в этих вызовах, будут отправлены загруженным контентом. Измените метод на:

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