2009-10-23 66 views
1

我试图让YouTube的as3 chromeless播放器工作。我按照youtube as3 API examples,这是我得到迄今:Youtube as3播放器API错误

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事件触发,但我得到的错误。当跟踪对象(e)中。数据我得到这个错误:

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value.
(来自瑞典stranslated)

当改变到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.

+0

这是http://stackoverflow.com/questions/1608027/youtube-chromeless-as3-player – 2009-10-23 13:08:56

+0

的后续问题关于'1061'错误MovieClip类,您可以通过将'player'的类型更改为MovieClip而不是Sprite来消除此错误。否则,你将不得不将它输回到对象 - 我知道我让你改变它:( – Amarghosh 2009-10-24 07:42:21

回答

1

我不认为你应该投loader.content的雪碧。您应该将播放器转换为对象类型。 player变量只能访问API调用。在放置,移动和添加到显示列表方面,使用包含SwfProxy对象的Loader对象。如果加载播放器扩展了:试试这个代码:

 
package 
{ 
import flash.display.*; 
import flash.events.*; 
import flash.system.Security; 
import flash.net.*; 

public class Main extends MovieClip 
{ 
    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 
    { 
    player = Sprite(loader.content); 
    addChild(loader); 
    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"); 
    player.setSize(480, 365); 
    } 
    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); 
    } 
} 
} 
相关问题