YouTube Chromeless AS3 플레이어
-
05-07-2019 - |
문제
나는 새로운 YouTube AS3 API를 가지고 다니고 있지만 붙어 있습니다. 이것은 내가 샘플 코드를 보면서 얼마나 멀리 얻었는지입니다.
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 이벤트가 발생하지만 오류가 발생합니다. 객체를 추적 할 때 (e) .data 나는이 오류가 발생한다.
ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value.
(스웨덴어로부터 Stranslated) 물체 (E.TARGET)로 변경할 때 (대상).
내가 시도하면 player.loadVideoById("uad17d5hR5s");
이 오류가 발생합니다.
1061: Call to a possibly undefined method loadVideoById through a reference with static type flash.display:Sprite.
해결책
모든 도서관 혼란에 대해 죄송합니다. 그래도 다른 오류에 대한 답이 있다고 생각합니다. 당신이 할 때 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);
}
다른 팁
변수 인 경우 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);
}
비교적 최근에 YouTube는 Chromeless 플레이어를위한 래퍼 라이브러리를 출시했습니다. 이 버전을 확실히 사용해야합니다 (다시 직접 쓸 수는 있지만 바퀴를 재창조 할 수 있습니다).이 페이지의 자습서/예를 확인하십시오.