0

私は新しいyoutubeas3APIをいじくり回していますが、行き詰まりました。これは私が(彼らのサンプルコードを見ることから)どこまで得たかです。

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: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value. (スウェーデン語から翻訳)Object(e.target).Dataに変更すると、「undefined」をトレースし、Object(e.target)は[objectSwfProxy]をトレースします。

試しplayer.loadVideoById("uad17d5hR5s");てみると、次のエラーが発生します。

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

4

3 に答える 3

0

変数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);
}
于 2009-10-23T05:27:53.463 に答える
0

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

ChromelessPlayer用のActionScript3.0ラッパー

于 2009-10-23T18:44:36.077 に答える
0

すべてのライブラリの混乱をお詫び申し上げますが、私はあなたの他のエラーに対する答えがあると思います。これを行う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);
}
于 2009-10-25T22:31:14.443 に答える