XML video player
Mouse over the video in order to display FLV playback controls + volume




XML FILE STRUCTURE

<gallery>

<vid>
<vidurl>video_01.swf</vidurl>
<desc>DESCRIPTION 01</desc>
</vid>

<vid>
<vidurl>video_02.swf</vidurl>
<desc>DESCRIPTION 2</desc>
</vid>

</gallery>


++++++++++++++++++++++++++++++++++++++++++++++++

AS3 FRAME CODE

++++++++++++++++++++++++++++++++++++++++++++++++

stop();

//// INITIATE YOUR COUNTER VARIABLE

var counter:Number = 0;

//// INITIATE YOUR NEWALPHA VARIABLE

var newAlpha:Number = 0;

//// VARS

var desc:String;

var url:String;

var urlReq:URLRequest;

/// INITIATE YOUR LOADER

var ldr:Loader = new Loader();

ldr.name = "myDisplay";// <====== VERY IMPORTANT WE USE THIS TO REMOVE THE CHILD
ldr.x = 0;
ldr.y = 0;

///// HANDLE XML

var mainXML:XML;
var loaderXML:URLLoader = new URLLoader();
loaderXML.addEventListener(Event.COMPLETE, onComplete);
loaderXML.load(new URLRequest("videolist.xml"));

function onComplete(event:Event):XML {
try {
mainXML = new XML(loaderXML.data);
init(mainXML);
} catch (event:Error) {
trace("Error: " + event.message);
return;
}
}

function init(mainXML) {

/// SPECIFY THE LOCATION OF YOUR DEFAULT SOURCE

url = mainXML.vid[counter].vidurl.text();

desc = mainXML.vid[counter].desc.text();

/// REQUEST THE VIDEO FROM THE SPECIFIED URL
urlReq = new URLRequest(url);

/// "ATTACH" THE VIDEO INTO THE LOADER
ldr.load(urlReq);

//// DISPLAY THE STARTING VALUE OF videosDescription = desc
//// IN descriptionDisplay FIELD

descriptionDisplay.text = desc;

//// DISPLAY THE STARTING VALUE OF COUNTER
//// IN counterDisplay FIELD AS A STRING
//// TO BE COMPATIBLE WITH THE TEXT FIELD CONTENT

counterDisplay.text = counter.toString();

}

// THIS IS THE PRELOADER INFORMATION
// CHECK THE VALUES OF THE THE BYTESLOADED/BYTESTOTAL
// NOTICE THE progressEvent.PROGRESS EVENT

ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, checkProgress);

function checkProgress(event:ProgressEvent):void {

preloader.text = Math.round(event.bytesLoaded/event.bytesTotal*100) + "%";

}

///////////////
// ONLY IF THE LOADING PROCESS IS COMPLETE
// GO AHEAD AND ADD THE CHILD

ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, createLdr);

function createLdr(event:Event):void {
/// GIVE BIRTH TO THE LOADER ON THE STAGE
addChild(ldr);
}

/// INCREASE THE VALUE OF COUNTER BY 1
/// EVERY TIME YOU CLICK ON PLUS BUTTON

PLUS.addEventListener(MouseEvent.CLICK, plus);

function plus(event:MouseEvent):void {

counter += 1;

if (counter > mainXML.vid.length() - 1) {
counter = 0;
}
//// CALL THE changeVideo FUNCTION
changeVideo(counter);

newAlpha = 0;

}

/// DECREASE THE VALUE OF COUNTER BY 1
/// EVERY TIME YOU CLICK ON MINUS BUTTON

MINUS.addEventListener(MouseEvent.CLICK, minus);

function minus(event:MouseEvent):void {

counter -= 1;

if (counter < 0) {
counter = mainXML.vid.length() - 1;
}

//// CALL THE changeVideo FUNCTION
changeVideo(counter);

newAlpha = 0;

}

// THIS FUNCTION IS AVAILABLE FOR BOTH
// THE PLUS AND MINUS ACTIONS
// WHENEVER YOU CLICK ON EITHER BUTTON
// IT SENDS THE VALUE OF counter
// AND THE FUNCTION LOADS THE VIDEOS
// PLACED IN mainXML.vid[counter].vidurl.text() IN THE LOADER

function changeVideo(counter) {

// UNLOAD EXISTING IMAGE
ldr.unload();
// SILENCE ALL POSSIBLE SOUNDS
SoundMixer.stopAll();

// LOAD REQUIRED VIDEO

url = mainXML.vid[counter].vidurl.text();

urlReq = new URLRequest(url);

ldr.load(urlReq);

var i:Number;

// CHANGE THE CONTENT OF DISPLAY FIELDS

counterDisplay.text = counter.toString();
descriptionDisplay.text = mainXML.vid[counter].desc.text();

}

stage.addEventListener(Event.ENTER_FRAME, changeAlpha);

function changeAlpha(event:Event):void {

newAlpha += .05;

if (newAlpha > 1) {
newAlpha = 1;
}
ldr.alpha = newAlpha;

ldr.scaleX = newAlpha;

ldr.scaleY = newAlpha;

ldr.x = newAlpha * 50;

ldr.y = newAlpha * 50;

///// THE PRELOADER WAS ADDED TO THE TOP LEVEL
///// SO THAT WHEN THE NEW EXTERNAL FILE IS LOADED
///// THE PRELOADER INFORMATION WILL BE HIDDEN BY THE NEW FILE
///// BE CAREFUL WITH TRANSPARENT SWF FILES

preloader.x = ldr.x;
preloader.y = ldr.y;

}

++++++++++++++++++++++++++++++++++++++++++++++++

AS3 MOVIECLIP MENU CODE

++++++++++++++++++++++++++++++++++++++++++++++++


var myScene:String;

//// CREATE THE EVENT LISTENERS FOR YOUR
//// SCENE BUTTONS

INTRO.addEventListener(MouseEvent.CLICK, changeScene); // INTRO SCENE

VIDEOS.addEventListener(MouseEvent.CLICK, changeScene); // VIDEOS SCENE

///// CHANGE SCENE FUNCTION

function changeScene(event:MouseEvent):void {

myScene = event.target.name; /// RETRIEVE SCENE NAME FROM BUTTON NAME

//// IF THE NAME OF THE SCENE IS DIFFERENT FROM "VIDEOS"
if (myScene !== "VIDEOS") {

// GO AHEAD AND DELETE THE ADDED LOADER
// BY USING A CUSTOM MADE FUNCTION
// CALLED deleteVideo();
deleteVideo();

}

///// JUMP TO THE NEW SCENE

MovieClip(parent).gotoAndStop(1, myScene);

}

function deleteVideo() {

var i:Number; /// COUNTER FOR ALL THE CHILDREN ON THE STAGE

for ( i=0; i<MovieClip(parent).numChildren; i++ ) {

//// IF THERE IS ONE INSTANCE CALLED myDisplay

if (MovieClip(parent).getChildAt(i).name == "myDisplay") {
//// REMOVE THAT CHILD FROM DISPLAY LIST
MovieClip(parent).removeChildAt(i);
//// STOP ALL THE SOUNDS
SoundMixer.stopAll();

}

}

}