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); } } }