Right, as far as I can tell, my video player is working, so here is the code, so that I don't have to go hunting for it next time:
this.alpha = 0;
this.visible = false;
var skrBound:Rectangle = new Rectangle(skrbr.x,skr.y,skrbr.width,0);
function comeIn(vid:String) {
this.visible = true;
this.addEventListener(Event.ENTER_FRAME,fadeIn);
MovieClip(root).offFunction(this,Event.ENTER_FRAME,fadeIn);
MovieClip(this.parent).vidholder_mc.removeEventListener(Event.ENTER_FRAME,MovieClip(this.parent).vidholder_mc.rotateIt);
MovieClip(root).unoffFunction(MovieClip(this.parent).vidholder_mc,Event.ENTER_FRAME,MovieClip(this.parent).vidholder_mc.rotateIt);
trace(vid);
vempty.loadVideo(vid);
}
function fadeIn(evnt:Event):void {
this.alpha += (1-this.alpha)/MovieClip(root).easeVal;
if(this.alpha > 0.9) {
this.alpha = 1;
this.removeEventListener(Event.ENTER_FRAME,fadeIn);
MovieClip(root).unoffFunction(this,Event.ENTER_FRAME,fadeIn);
vempty.playVideo(null);
skr.addEventListener(Event.ENTER_FRAME,positionSeeker);
MovieClip(root).offFunction(skr,Event.ENTER_FRAME,positionSeeker);
}
}
function comeOut(evnt:MouseEvent) {
vempty.stopVideo(null);
this.addEventListener(Event.ENTER_FRAME,fadeOut);
MovieClip(root).offFunction(this,Event.ENTER_FRAME,fadeOut);
}
function fadeOut(evnt:Event):void {
this.alpha -= this.alpha/MovieClip(root).easeVal;
if(this.alpha < 0.1) {
this.alpha = 0;
this.visible = false;
MovieClip(this.parent).vidholder_mc.addEventListener(Event.ENTER_FRAME,MovieClip(this.parent).vidholder_mc.rotateIt);
MovieClip(root).offFunction(MovieClip(this.parent).vidholder_mc,Event.ENTER_FRAME,MovieClip(this.parent).vidholder_mc.rotateIt);
this.removeEventListener(Event.ENTER_FRAME,fadeOut);
MovieClip(root).unoffFunction(this,Event.ENTER_FRAME,fadeOut);
}
}
function setUpBtns() {
play_btn.addEventListener(MouseEvent.CLICK,vempty.playVideo);
play_btn.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
pause_btn.addEventListener(MouseEvent.CLICK,vempty.pauseVideo);
pause_btn.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
skip_btn.addEventListener(MouseEvent.CLICK,vempty.skipVideo);
skip_btn.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
close_btn.addEventListener(MouseEvent.CLICK,comeOut);
close_btn.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
skr.addEventListener(MouseEvent.MOUSE_DOWN,skVideo);
skr.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
skrbr.addEventListener(MouseEvent.ROLL_OVER,MovieClip(root).buttonReactionOn);
skrbr.addEventListener(MouseEvent.CLICK,skPositionVideo);
}
setUpBtns();
function positionSeeker(evnt:Event):void {
skr.x = skrbr.x + (vempty.giveProportion()*skrbr.width);
}
function skVideo(evnt:MouseEvent):void {
skr.removeEventListener(Event.ENTER_FRAME,positionSeeker);
MovieClip(root).unoffFunction(skr,Event.ENTER_FRAME,positionSeeker);
vempty.pauseVideo(null);
skr.startDrag(true,skrBound);
skr.addEventListener(Event.ENTER_FRAME,positionVideo);
MovieClip(root).offFunction(skr,Event.ENTER_FRAME,positionVideo);
stage.addEventListener(MouseEvent.MOUSE_UP,finPosition);
}
function positionVideo(evnt:Event):void {
var pos:Number = (skr.x - skrbr.x)/skrbr.width;
vempty.gotoPosition(pos);
}
function finPosition(evnt:MouseEvent):void {
stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP,finPosition);
skr.removeEventListener(Event.ENTER_FRAME,positionVideo);
MovieClip(root).unoffFunction(skr,Event.ENTER_FRAME,positionVideo);
skr.addEventListener(Event.ENTER_FRAME,positionSeeker);
MovieClip(root).offFunction(skr,Event.ENTER_FRAME,positionSeeker);
vempty.playVideo(null);
}
function skPositionVideo(evnt:MouseEvent):void {
var pos:Number = ((this.mouseX - skrbr.x)/skrbr.width);
vempty.gotoPosition(pos);
}
That is the code that sits in the movie clip with all the buttons. The empty movie clip ('vempty') on stage has the code inside that handles the netstream etc:
var connection:NetConnection = new NetConnection();
var stream:NetStream;
var video:Video = new Video(MovieClip(this.parent).igs.width,MovieClip(this.parent).igs.height);
var metaObj:Object = new Object();
var duratn:Number;
function onMetaData(obj:Object):void {
duratn = obj.duration;
}
connection.connect(null);
stream = new NetStream(connection);
stream.client = metaObj;
metaObj.onMetaData = onMetaData;
video.attachNetStream(stream);
addChild(video);
stream.addEventListener(NetStatusEvent.NET_STATUS,comped);
function comped(evnt:NetStatusEvent) {
if(String(evnt.info.code) == "NetStream.Play.Stop"){
stream.seek(0);
stream.pause();
takedownVideo();
}
}
function loadVideo(vid:String):void {
stream.play(vid);
stream.seek(0);
stream.pause();
}
function pauseVideo(evnt:MouseEvent) {
stream.pause();
takedownVideo();
}
function playVideo(evnt:MouseEvent) {
stream.resume();
holdupVideo();
}
function skipVideo(evnt:MouseEvent) {
stream.seek(0);
stream.resume();
holdupVideo();
}
function holdupVideo() {
MovieClip(root).logobg.addEventListener(MouseEvent.CLICK,stopVideo);
}
function takedownVideo() {
MovieClip(root).logobg.removeEventListener(MouseEvent.CLICK,stopVideo);
}
function stopVideo(evnt:MouseEvent) {
stream.pause();
}
function giveProportion():Number {
return stream.time/duratn;
}
function gotoPosition(pos:Number):void {
stream.seek(pos*duratn);
}
And thanks to http://flashenabledblog.com/2007/06/12/as3-mouse-events-and-mouse-related-user-actions/ and the commenters for showing how to imitate an 'onReleaseOutside' event, by temporarily adding a MOUSEUP event listener to the stage.
Very handy...