質問

新しいyoutube as3 APIをいじくり回していますが、行き詰まりました。これは (サンプルコードを見て)どれくらいの距離にあるか。

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

次のステップが何であるかは本当にわかりません。エラーが発生せず、何もトレースされません。私のイベントが正しく実装されていないことを確信しています。

更新: Amarghoshの回答に従い、代わりにこれを行いました。

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イベントが発生しましたが、エラーが発生します。 Object(e).Dataをトレースすると、このエラーが発生します

ReferenceError:エラー#1069:com.google.youtube.event.ExternalEventのプロパティデータが見つかりませんでした。標準値はありません。 (スウェーデン語から翻訳) Object(e.target).Dataに変更すると、「未定義」をトレースします。およびObject(e.target)トレース[object SwfProxy]。

player.loadVideoById(" uad17d5hR5s");を試してみるとこのエラーが発生します:

1061:静的型flash.display:Spriteの参照を介して未定義の可能性があるメソッドloadVideoByIdを呼び出します。

役に立ちましたか?

解決

すべてのライブラリの混乱については申し訳ありませんが、他のエラーにも答えがあると思います。この 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);
}

他のヒント

変数 player がロードされたyoutubeプレーヤーを保持することになっている場合、そのタイプを Object から Sprite などのより強固なものに変更します。

private var player:Sprite;

現在、youtube APIはわかりませんが、 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);
}

比較的最近、youtubeはクロムレスプレーヤー用のラッパーライブラリをリリースしました。このバージョンを明確に使用する必要があります(自分でもう一度書くことができますが、それは車輪を再発明します)。このページのチュートリアル/例を参照してください

Chromeless Player用ActionScript 3.0ラッパー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top