Prima release di un player realizzato con le nuove API per caricare i video di youTube direttamente in flash, non ho trovato molti esempi così ho deciso di farne uno, ma c’è ancora da lavorare…
Tanto per cambiare.
Il sorgente sarà disponibile a giorni, nel frattempo ecco il codice utilizzato
Security.allowInsecureDomain("*");
Security.allowDomain("*");
var player:Object;
var loader:Loader;
var flag:Boolean=false;
var apiPlayer:String="http://www.youtube.com/apiplayer?version=3";
var id:String="u1zgFlCw8Aw";
var _duration:uint;
var rect:Rectangle;
var _time;
var sec;
var rect_volume:Rectangle;
container.mask=maschera;
function playTube() {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
loader.load(new URLRequest(apiPlayer));
}
function onLoaderInit(e:Event):void {
container.addChild(loader);
loader.content.addEventListener("onReady", onPlayerReady);
loader.content.addEventListener("onError", onPlayerError);
loader.content.addEventListener("onStateChange", onPlayerStateChange);
loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
}
function onPlayerReady(e:Event):void {
player=loader.content;
startVideo();
}
function startVideo():void {
player.loadVideoById(id);
player.setSize(540, 305);
}
function onPauseVideo(e:MouseEvent):void {
player.pauseVideo();
removeEventListener(Event.ENTER_FRAME, onProgress);
}
function onPlayVideo(e:MouseEvent):void {
player.playVideo();
addEventListener(Event.ENTER_FRAME, onProgress);
}
function onPlayerError(e:Event):void {
trace("player error:", Object(e).data);
}
function onPlayerStateChange(e:Event):void {
addEventListener(Event.ENTER_FRAME, onProgress);
trace("player state:", Object(e).data);
var _state=Object(e).data;
switch (_state) {
case -1 :
//unstarted;
break;
case 0 :
//ended;
break;
case 1 :
//playing;
break;
case 2 :
//paused;
break;
case 3 :
//buffering;
break;
case 5 :
//cued;
break;
}
}
function playClick(e:MouseEvent) {
if (!flag) {
play_pause.gotoAndStop(2);
onPauseVideo(e);
} else {
play_pause.gotoAndStop(1);
onPlayVideo(e);
}
flag=! flag;
}
function volume_press(e:MouseEvent) {
volume_mc.maskera.startDrag(false, rect_volume);
volume_mc.addEventListener(flash.events.Event.ENTER_FRAME, setVolume);
stage.addEventListener(flash.events.MouseEvent.MOUSE_UP, volume_release);
}
function volume_release(e:MouseEvent) {
volume_mc.maskera.stopDrag();
volume_mc.removeEventListener(Event.ENTER_FRAME, setVolume);
}
function setVolume(e:Event) {
var vol = ((volume_mc.maskera.x+volume_mc.maskera.width)*2);
player.setVolume(vol)
}
function onProgress(e:Event):void {
_time=player.getCurrentTime();
_duration=player.getDuration();
var loaded=player.getVideoBytesLoaded()/player.getVideoBytesTotal();
loader_mc.bar.width = (loaded * loader_mc.line_bar.width );
loader_mc.btn.x = (_time / _duration) * loader_mc.line_bar.width;
var t=getTime(_time);
var d=getTime(_duration);
txt.text=t+" / "+d;
}
function setSeek(e:MouseEvent) {
removeEventListener(Event.ENTER_FRAME, onProgress);
addEventListener(Event.ENTER_FRAME, seekStatus);
rect=new Rectangle(0,loader_mc.btn.y,loader_mc.bar.width,0);
e.target.startDrag(false, rect);
addEventListener(MouseEvent.MOUSE_UP, seekRelease);
}
function seekRelease(e:MouseEvent) {
_time=sec;
removeEventListener(Event.ENTER_FRAME, seekStatus);
addEventListener(Event.ENTER_FRAME, onProgress);
loader_mc.btn.stopDrag();
}
function seekStatus(e:Event) {
sec = Math.floor((loader_mc.btn.x / loader_mc.line_bar.width) * _duration);
player.seekTo(sec,false);
}
function onVideoPlaybackQualityChange(e:Event):void {
//
}
function getTime(sec:Number) {
var min=Math.floor(sec/60);
sec-=min*60;
if (sec<10) {
var sec_str="0"+Math.floor(sec);
} else {
sec_str=Math.floor(sec);
}
if (min<10) {
var min_str="0"+min;
} else {
min_str=min;
}
var time=min_str+":"+sec_str;
return time;
}
volume_mc.maskera.buttonMode=true;
volume_mc.maskera.addEventListener(MouseEvent.MOUSE_DOWN, volume_press);
volume_mc.maskera.mask=volume_mc.clip;
rect_volume=new Rectangle(- volume_mc.width+2,0,volume_mc.width-2,0);
play_pause.buttonMode=true;
play_pause.addEventListener(MouseEvent.CLICK, playClick);
loader_mc.btn.buttonMode=true;
loader_mc.btn.addEventListener(MouseEvent.MOUSE_DOWN, setSeek);
playTube();
ho notato che cliccando sul logo di youTube, per andare al link relativo al video, il player si blocca, così in attesa di capire perchè succede, c'ho messo sopra un bottone trasparente.



