ProgressBarTest_03.as

package {
	
	import flash.display.Sprite;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	
	import fl.controls.Label;
	import fl.controls.Slider;
	import fl.controls.ProgressBar;
	import fl.controls.ProgressBarMode;
	import fl.controls.ProgressBarDirection;
	import fl.events.SliderEvent;
	
	public class ProgressBarTest_03 extends Sprite {
		
		private var progressBar:ProgressBar;
		private var slider:Slider;
		private var displayLabel:Label;
		
		public function ProgressBarTest_03() {
			init();
		}
		
		private function init():void {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.showDefaultContextMenu = false;
			
			assignComponentsReference();
			configureComponents();
		}
		
		private function assignComponentsReference():void {
			progressBar = mcProgressBar;
			slider = mcSlider;
			displayLabel = mcLabel;
		}
		
		private function configureComponents():void {
			displayLabel.text = "Percent: 0%";
			
			slider.value = 0;
			slider.maximum = 250;
			slider.minimum =  0;
			slider.tickInterval = 25;
			slider.snapInterval = 1;
			slider.liveDragging = true;
			slider.addEventListener(SliderEvent.CHANGE, onChangeValue, false, 0, true);
			
			progressBar.mode = ProgressBarMode.MANUAL;
			progressBar.direction = ProgressBarDirection.RIGHT;
			progressBar.maximum = slider.maximum;
			progressBar.minimum =  slider.minimum;
			progressBar.indeterminate = false;
		}
		
		private function onChangeValue(event:SliderEvent):void {
			progressBar.value = slider.value;
			progressBar.setProgress(progressBar.value, progressBar.maximum);
			displayLabel.text = "Percent: " + Math.round(progressBar.percentComplete) + "%";
		}
	}
}


파폭에서 재생이 끝난 후 플레이 버튼을 눌러도 리플레이가 되지 않는

오류가 있지만, 수정하기 귀찮다는게 함정....

ProgressBarTest_04.as

package {
	
	import flash.display.Sprite;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	import flash.display.MovieClip;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	
	import flash.events.AsyncErrorEvent;
	import flash.events.NetStatusEvent;
	
	import flash.utils.Timer;
	import flash.media.Video;
	import flash.text.TextFormat;
	
	import flash.net.NetConnection;
	import flash.net.NetStream;
	
	import fl.controls.Label;
	import fl.controls.ProgressBar;
	import fl.controls.ProgressBarMode;
	
	public class ProgressBarTest_04 extends Sprite {
		
		private var connection:NetConnection;
		private var stream:NetStream;
		
		private var timer:Timer;
		private var video:Video;
		private var videoHolder:MovieClip;
		private var duration:Number;
		
		private var positionLabel:Label;
		private var positionBar:ProgressBar;
		private var messageLabel:Label;
		
		private var playButton:Sprite;
		private var pauseButton:Sprite;
		private var stopButton:Sprite;
		
		private static var videoURL:String = "http://www.helpexamples.com/flash/video/cuepoints.flv";
		
		public function ProgressBarTest_04() {
			init();
		}
		
		private function init():void {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.showDefaultContextMenu = false;
			
			assignComponentsReference();
			configureComponents();
		}
		
		private function assignComponentsReference():void {
			playButton = mcPlayButton;
			pauseButton = mcPauseButton;
			stopButton = mcStopButton;
			
			videoHolder = mcVideoHolder;
			positionBar = mcPositionBar;
			positionLabel = mcPositionLabel;
		}
		
		private function configureComponents():void {
			var format:TextFormat = new TextFormat;
			format.color = 0x999999;
			format.size = 10;
			format.font = "Arial, Tahoma, Verdana, Sans";
			
			positionLabel.textField.text = "00 : 00";
			positionLabel.setStyle("textFormat", format);
			
			positionBar.mode = ProgressBarMode.MANUAL;
			positionBar.indeterminate = false;
			
			connect();
		}
		
		private function connect():void {
			connection = new NetConnection();
			connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusEvent, false, 0, true);
			connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncErrorEvent, false, 0, true);
			connection.connect(null);
		}
		
		private function onNetStatusEvent(event:NetStatusEvent):void {
			switch (event.info.code) {
				case "NetConnection.Connect.Success" :
					connectStream();
					break;
				case "NetStream.Play.StreamNotFound" :
					showErrorMessage();
					break;
				case "NetStream.Play.Start" :
					initVideo();
					trace("Start [" + stream.time.toFixed(3) + " seconds]");
					break;
				case "NetStream.Play.Stop" :
					completeVideo();
					trace("Stop [" + stream.time.toFixed(3) + " seconds]");
					break;
			}
			trace(event.info.code);
		}
		
		private function onAsyncErrorEvent(event:AsyncErrorEvent):void {
			trace("onAsyncErrorEvent: " + event);
		}
		
		private function connectStream():void {
			stream = new NetStream(connection);
			stream.client = this;
			stream.bufferTime = 5;
			stream.checkPolicyFile = true;
			stream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusEvent, false, 0, true);
			stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncErrorEvent, false, 0, true);
			
			video = new Video(); 
			video.width =  320;
			video.height = 213;
			video.attachNetStream(stream);
			videoHolder.addChild(video);
			
			stream.play(videoURL);
			stream.pause();
		}
		
		public function onMetaData(metaData:Object):void {
			for (var key:String in metaData) {
				trace(key + "=====" + metaData[key]);
			}
			duration = metaData.duration;
		}
		
		public function onCuePoint(metaData:Object):void {}
		
		private function initVideo():void {
			if (!playButton.hasEventListener(MouseEvent.CLICK)) {
				playButton.buttonMode = true;
				playButton.addEventListener(MouseEvent.CLICK, playVideo, false, 0, true);
			}
			if (!pauseButton.hasEventListener(MouseEvent.CLICK)) {
				pauseButton.buttonMode = true;
				pauseButton.addEventListener(MouseEvent.CLICK, pauseVideo, false, 0, true);
			}
			if (!stopButton.hasEventListener(MouseEvent.CLICK)) {
				stopButton.buttonMode = true;
				stopButton.addEventListener(MouseEvent.CLICK, stopVideo, false, 0, true);
			}
			if (timer == null) {
				timer = new Timer(30);
				timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
			}
		}
		
		private function playVideo(event:MouseEvent):void {
			stream.resume();
			timer.start();
		}
		
		private function pauseVideo(event:MouseEvent):void {
			stream.pause();
			timer.stop();
		}
		
		private function stopVideo(event:MouseEvent):void {
			stream.pause();
			stream.seek(0);
			positionBar.setProgress(0, duration);
			positionLabel.text = "00 : 00";
			timer.stop();
		}
		
		private function completeVideo():void {
			stopVideo(null);
		}
		
		private function onTimer(event:TimerEvent):void {
			try {
				var min:String = convertDigit(Math.floor(stream.time / 60));
				var sec:String = convertDigit(Math.floor(stream.time % 60));
				positionLabel.text = min + " : " + sec;
				positionBar.setProgress(stream.time, duration);
			} catch (err:Error) {
				trace(err.message);
			}
		}
		
		private function convertDigit(num:Number):String {
			return num < 10 ? "0" + num : num.toString();
		}
		
		private function showErrorMessage():void {
			var format:TextFormat = new TextFormat();
			format.size = 11;
			format.bold = true;
			format.color = 0x00CC66;
			format.font = "Tahoma, Arial, Verdana, Sans";
			
			messageLabel = new Label();
			messageLabel.text = "URL Not Found";
			messageLabel.setStyle("textFormat", format);
			messageLabel.x = 10 + Math.round(videoHolder.width / 2 -  messageLabel.textField.textWidth / 2);
			messageLabel.y = 10 + Math.round(videoHolder.height / 2 - messageLabel.textField.textHeight / 2);
			addChild(messageLabel);
		}
	}
}