2009-10-23 5 views
1

youtube as3 크롬리스 플레이어를 작동 시키려고합니다. 나는 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 이벤트 화재하지만 난이 오류를 얻을. .DATA를 객체 (예)를 추적 할 때 내가이 오류 :

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) 흔적을 추적 Object(e.target).Data로 변경 "[객체 SwfProxy]". 내가 player.loadVideoById("uad17d5hR5s");을하려고하면

나는이 오류가 발생합니다 :

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

+0

이것은'1061' 오류에 대한 http://stackoverflow.com/questions/1608027/youtube-chromeless-as3-player –

+0

에서 후속 질문은 :이 코드를 사용해보십시오 MovieClip 클래스에서 'player'유형을 Sprite 대신 MovieClip으로 변경하여이 오류를 제거 할 수 있습니다. 그렇지 않으면 Object에 다시 입력해야 할 것입니다. – Amarghosh

답변

1

난 당신이 스프라이트로 loader.content 캐스팅해야한다고 생각하지 않습니다. 대신 플레이어를 Object 유형으로 캐스팅해야합니다. 플레이어 변수는 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); 
    } 
} 
}