1

YouTubeas3クロームレスプレーヤーを動作させようとしています。私はyoutubeas3APIの例に従いました、そしてこれは私がこれまでに得たものです:

public class Main extends Sprite 
{
    Security.allowDomain("*");

    private var player:Sprite;
    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
    {
        player = Sprite(loader.content);
        addChild(player);
        player.addEventListener("onReady", onPlayerReady);
        player.addEventListener("onError", onPlayerError);
        player.addEventListener("onStateChange", onPlayerStateChange);
        player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
    }

    private function onPlayerReady(e:Event):void
    {
        trace("Player ready: " + Object(e.target).Data);
        // player.loadVideoById("uad17d5hR5s");
    }
    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);
    }
}

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

1 に答える 1

1

loader.content をスプライトとしてキャストするべきではないと思います。代わりに、プレイヤーを Object タイプにキャストする必要があります。player 変数は、API 呼び出しにアクセスするためだけのものです。表示リストへの配置、移動、および追加に関しては、SwfProxy オブジェクトを含む Loader オブジェクトを使用します。このコードを試してください:

パッケージ
{
 インポート flash.display.*;
 インポート flash.events.*;
 flash.system.Security をインポートします。
 インポート flash.net.*;

 public class Main は MovieClip を拡張します
 {
  Security.allowDomain("*");

  プライベート var プレーヤー:オブジェクト;
  プライベート var ローダー:ローダー;

  パブリック関数 Main():void
  {
   if (ステージ) init();
   そうでなければ addEventListener(Event.ADDED_TO_STAGE, init);
  }

  プライベート関数 init(e:Event = null):void
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);

   ローダー = 新しいローダー();
   loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
   loader.load(新しい URLRequest("http://www.youtube.com/apiplayer?version=3"));
  }

  プライベート関数 onLoaderInit(e:Event):void
  {
   player = Sprite(loader.content);
   addChild(ローダー);
   player.addEventListener("onReady", onPlayerReady);
   player.addEventListener("onError", onPlayerError);
   player.addEventListener("onStateChange", onPlayerStateChange);
   player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
  }

  プライベート関数 onPlayerReady(e:Event):void
  {
   trace("Player ready: " + Object(e.target).Data);
   player.loadVideoById("uad17d5hR5s");
   player.setSize(480, 365);
  }
  プライベート関数 onPlayerError(e:Event):void
  {
   trace("プレイヤー エラー: " + Object(e).Data);
  }
  プライベート関数 onPlayerStateChange(e:Event):void
  {
   // trace("プレイヤーの状態: " + Object(e).Data);
  }
  プライベート関数 onVideoPlaybackQualityChange(e:Event):void
  {
   trace("ビデオ品質: " + Object(e).Data);
  }
 }
}
于 2009-10-25T01:44:24.747 に答える