My Portfolio

Choose from the list below to view the subjects of my portfolio. Each subject will display to the right for your amusement.

AS3 Flash Video Player

Flash Ad with Game

Coldfusion CFC OOP

FedExchange Project

Fed Volunteer Signup Form

National IT Repository Documentation

Flash Genie & 8 Ball

Flash Chat

My professional blog:
www.cfcdeveloper.com

AS3 Flash Video Player Example


15 sec.

Created in Flash CS3 using Actionscript 3 to emulate a Youtube type player, extra controls not included here. A .mov file was first compressed into a .flv file using the Flash CS3 Video Encoder and placed in an assets folder of the video player project. The StreamingVideoPlayer AS3 class is imported into the Flash project's action frame and a video object is instantiated as a display object. The new video player object is then added to a movie clip on stage using addChild(). The parameters for the class instantiation is a server location, the .flv file location, the video duration, and the video deminsions desired. The video is placed on the stage with player controls from the StreamingVideoPlayer class.

The StreamingVideoPlayer class is contained in a package and extends the Sprite class. The netConnection uses it's onNetStatus to first make sure a connection is made to the server before proceeding to connect to the video stream. The video stream is then added to a Video object and added as a child to the parent. The video is then played, paused, and seeked to half way through where a Play Video button is added with an event handler to call a video play function. When the video is played, a removeChild() is used to remove the button. When the video is stopped, the function to reinitialize back to start with the button again is called, allowing the user to play again.

fla file: videoplayer.swf
import video.StreamingVideoPlayer;

var streamingVideo:StreamingVideoPlayer = new ~
	StreamingVideoPlayer(null,"assets/skiing1.flv",15,160,120);
video_mc.addChild(streamingVideo);


as class file: StreamingVideoPlayer.as
package video {
	import flash.events.*;
	import flash.media.Video;
	import flash.display.Sprite;
	import flash.net.*;
	import flash.text.TextField;
	import fl.controls.Button;
	
	public class StreamingVideoPlayer extends Sprite {
		private var _videoURL:String;
		private var _video:Video;
		private var _vidDuration:Number;
		private var _vidXmax:Number;
		private var _vidYmax:Number;
		private var _vidWidth:Number;
		private var _vidHeight:Number;
		private var _main_nc:NetConnection = new NetConnection();
		private var _serverLoc:String;
		private var _ns:NetStream;
		private var _start_btn:Button;
		
		/* ------------Contructors/Initialization-----------*/
		public function StreamingVideoPlayer(serverLoc:String,
			flvLocation:String,vidDuration:Number,vidXmax:Number,
			vidYmax:Number):void {
			//set video params
			_videoURL = flvLocation;
			_vidDuration = vidDuration;
			_vidXmax = vidXmax;
			_vidYmax = vidYmax;
			//add eventListeners to NetConnection and connect
			_main_nc.addEventListener(NetStatusEvent.NET_STATUS,
				onNetStatus);
			_main_nc.addEventListener(
				SecurityErrorEvent.SECURITY_ERROR,
				securityErrorHandler);
			_main_nc.connect(serverLoc);
		}
		private function onNetStatus(event:Object):void {
			//handles NetConnection and NetStream status events
			switch (event.info.code) {
				case "NetConnection.Connect.Success":
					//play stream if connection successful
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound":
					//error if stream file not found in
					//location specified
					trace("Stream not found: " + _videoURL);
					break;
				case "NetStream.Play.Stop":
					//do if video is stopped
					videoPlayComplete();
					break;
			}
			//trace(event.info.code);
		}
		
		/* -------------------Connection------------------- */
		private function connectStream():void {
			//netstream object
			_ns = new NetStream(_main_nc);
			_ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,
				asyncErrorHandler);
			_ns.addEventListener(NetStatusEvent.NET_STATUS,
				onNetStatus);
			//other event handlers assigned 
			//to the netstream client property
			var custom_obj:Object = new Object();
			custom_obj.onMetaData = onMetaDataHandler;
			custom_obj.onCuePoint = onCuePointHandler;
			custom_obj.onPlayStatus = playStatus;
			_ns.client = custom_obj;
			//attach netstream to the video object
			_video = new Video(_vidXmax,_vidYmax);
			_video.attachNetStream(_ns);
			//video position could be parameterized but hardcoded
			//here to account for optional movie frame border
			_video.x = 1;
			_video.y = 1;
			addChild(_video);
			setVideoInit();
		}
		
		/* -------------NetStream actions and events-------------- */
		private function videoPlayComplete():void {
			setVideoInit();
		}
		
		private function setVideoInit():void {
			_ns.play(_videoURL);
			_ns.pause();
			_ns.seek(_vidDuration/2);
			addStartBtn();
		}
		private function playStatus(event:Object):void {
			//handles onPlayStatus complete event if available
			switch (event.info.code) {
				case "NetStream.Play.Complete":
					//do if video play completes
					videoPlayComplete();
					break;
			}
			//trace(event.info.code);
		}
		private function playFlv(event:MouseEvent):void {
			_ns.play(_videoURL);
			//_ns.seek(192); //used for testing
			removeChild(_start_btn);
		}
		private function pauseFlv(event:MouseEvent):void {
			_ns.pause();
		}
		
		/* ---------Buttons, labels, and other assets------------- */
		//could be placed in it's own VideoControler class
		private function addStartBtn():void {
			_start_btn = new Button();
			_start_btn.width = 80;
			_start_btn.x = (_vidXmax-_start_btn.width)/2+_video.x;
			_start_btn.y = (_vidYmax-_start_btn.height)/2+_video.y;
			_start_btn.label = "Start Video";
			_start_btn.addEventListener(MouseEvent.CLICK,playFlv);
			addChild(_start_btn);
		}
		
		/* -----------------Information handlers---------------- */
		private function onMetaDataHandler(metaInfoObj:Object):void {
			_video.width = metaInfoObj.width;
			_vidWidth = metaInfoObj.width;
			_video.height = metaInfoObj.height;
			_vidHeight = metaInfoObj.height;
			//trace("metadata: duration=" + metaInfoObj.duration + 
				//"width=" + metaInfoObj.width + " height=" +
				//metaInfoObj.height + " framerate=" +
				//metaInfoObj.framerate);
		}
		private function onCuePointHandler(cueInfoObj:Object):void {
			//trace("cuepoint: time=" + cueInfoObj.time + " name=" + 
				//cueInfoObj.name + " type=" + cueInfoObj.type);
		}
		
		/* -----------------------Error handlers------------------------ */
		private function securityErrorHandler(event:SecurityErrorEvent):
		void {
			trace("securityErrorHandler: " + event);
		}
		private function asyncErrorHandler(event:AsyncErrorEvent):void {
			trace(event.text);
		}
	}
}