AS3视频播放器

package
{
	import com.bit101.components.HSlider;
	import com.bit101.components.InputText;
	import com.bit101.components.Label;
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.NetStatusEvent;
	import flash.media.SoundTransform;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;

	[swf(width="500", height="500")]
	public class videoDisplay extends Sprite
	{
		private var _netStream:NetStream;
		private var _sp:Sprite;
		private var _bool:Boolean;//判断滑块是否按下,在每帧事件上侦听
		private var _hRangeSlider:HSlider;//视频加载位置
		private var _hRangeSlider2:HSlider;//视频播放位置
		private var _lable:Label;//显示当前播放时间/总时间
		private var _play:PushButton;//播放和暂停按钮
		private var _source:HSlider;//调整时声音滑块
		private var _sourceNum:Number = 0.6;//初始声音
		private var _soundOff:PushButton;//静音和开放按钮
		private var _isPlay:Boolean = false;//是否在播放
		private var _duration:Number;//返回总时间,秒为单位
		
		//静音,0为静音
		private var sounceNum:int =1;
		private var _soundTransform:SoundTransform;
		
		public function videoDisplay()
		{
			_bool = false;	
			
			//绘制控件
			Draw();
			
			//视频连接和播放主文件start
			var _netConnection:NetConnection = new NetConnection();
			_netConnection.connect(null);
			var _clientOb:Object = new Object();
			_clientOb.onMetaData = onMD;
			_netStream = new NetStream(_netConnection);
			_netStream.bufferTime = 15;
			_netStream.client = _clientOb;
			var _video:Video = new Video();
			_video.attachNetStream(_netStream);
			_video.y = 100;
			addChild(_video);
			_netStream.play("videos/a.flv");
			//end
			
			this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
			//视频状态报告
			_netStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
		}

		private function Draw():void
		{
			//插件使用MinimalComps第三方插件
			_sp = new Sprite();
			this.addChild(_sp);
			_hRangeSlider = new HSlider(_sp);
			_lable = new Label(_sp,_hRangeSlider.x+_hRangeSlider.width+10);
			_hRangeSlider2 = new HSlider(_sp, 0, _hRangeSlider.height+2);
			_hRangeSlider2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			_lable.text = "00:00/00:00";
			_play= new PushButton(_sp, 0, _hRangeSlider2.y + _hRangeSlider2.height+2,"pause",onPlay);
			_source = new HSlider(_sp,0,_play.y +_play.height+2)
			_source.value = (0.6/1)*_source.width;
			_source.addEventListener(MouseEvent.MOUSE_DOWN, onSoundMouseDown);
			_soundOff = new PushButton(_sp,0, _source.y+_source.height+2,"SounceOn",handSoundOff);	
		}
		
		private function onNetStatus(evt:NetStatusEvent):void
		{
			switch(evt.info.code)
			{
			case "NetStream.Play.Start"://开始播放
				_isPlay = true;
				break;
			case "NetStream.Play.Stop"://全部播放完
				_isPlay =false;
				break;
			case "NetStream.Buffer.Empty"://缓冲
				break;
			}
		}
		
		//点击播放暂停按钮
		private function onPlay(evt:Event):void
		{
			
			if(_play.label  == "play")
			{
				if(_isPlay)//是否在播放中,(包括暂停)
				{
					//_netStream.resume();
					_netStream.togglePause();
				}
				else
				{
					_netStream.play("videos/a.flv");
					//_netStream.pause();
				}
			}
			if(_play.label  == "pause")
			{
				_netStream.togglePause();
			}
			_play.label = _play.label == "play"?"pause":"play";
		}
		
		//点击视频播放位置滑块
		private function onMouseDown(evt:Event):void
		{
			_bool = true;
			_netStream.togglePause();//暂停
			_hRangeSlider.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}
		//点击视频播放位置滑块
		private function onMouseUp(evt:Event):void
		{
			_bool = false;
			_netStream.togglePause();//播放
			_hRangeSlider.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);		
		}
		
		
		
		private function onMD(data:Object):void
		{
			_duration = data.duration;
		}
		private function onEnterFrame(evt:Event):void
		{
			_lable.text = Math.floor(_netStream.time/60) +":"+ Math.round(_netStream.time%60)+"/"
				+Math.floor(_duration/60) +":"+ Math.round(_duration%60);
			
			var bigLoad:int = _netStream.bytesTotal;//视频文件大小
			var theLoad:int = _netStream.bytesLoaded;//当前加载大小
			_hRangeSlider.value = (theLoad/bigLoad)*_hRangeSlider.width;
			if(_bool)
			{
				//播放视频的指定位置
				_netStream.seek((_hRangeSlider2.value/_hRangeSlider2.width)*_duration);
			}
			else
			{
				_hRangeSlider2.value = (_netStream.time/_duration)*_hRangeSlider2.width;
			}
		}

		//根据传入0-1之间的数调节音量
		private function setSource(num:Number):void
		{
			_soundTransform = _netStream.soundTransform;
			_soundTransform.volume = num;
			_netStream.soundTransform = _soundTransform;
		}
		
		//静音和开发
		private function handSoundOff(EVT:Event):void
		{
			_soundOff.label =_soundOff.label == "SounceOff"?"SounceOn":"SounceOff";
			if(_soundOff.label == "SounceOff")
			{
				sounceNum = 0;
				setSource(0);
			}
			else
			{
				sounceNum = 1;
				setSource(Math.round((_source.value/_source.width)*10)/10);
			}
		}
		
		//拖动音量滑块到指定位置
		private function onSoundMouseDown(evt:Event):void
		{
			_source.stage.addEventListener(MouseEvent.MOUSE_UP, onSoundMouseUp);
		}
		private function onSoundMouseUp(evt:Event):void
		{
			_source.stage.removeEventListener(MouseEvent.MOUSE_UP, onSoundMouseUp);
			if(sounceNum)//非静音
			{
				setSource(Math.round((_source.value/_source.width)*10)/10);		
			}
		}
	}
}
posted @ 2011-07-13 11:10  小松鼠喝多了  阅读(3717)  评论(0编辑  收藏  举报