2009-10-23 4 views
1

Я пытаюсь заставить youtube as3 chromeless player работать. Я последовал за youtube as3 API examples и это то, что я получил до сих пор:Ошибки API-интерфейса Youtube as3

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 от Swedish)

При переходе на 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 –

+0

О '1061' ошибки: Если загруженный игрок расширяет MovieClip, вы можете удалить эту ошибку, изменив тип 'player' на MovieClip вместо Sprite. В противном случае вам придется набрать его обратно в Object - я знаю, что заставил вас изменить его :( – Amarghosh

ответ

1

Я не думаю, что вы должны бросить Loader.content как Sprite. Вместо этого вы должны перевести игрока в тип объекта. Переменная игрока предназначена только для доступа к вызовам API. С точки зрения размещения, перемещения и добавления в список отображения используйте объект Loader, который содержит объект SwfProxy. Попробуйте этот код:

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