zoukankan      html  css  js  c++  java
  • 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);		
    			}
    		}
    	}
    }
    
  • 相关阅读:
    随机产生16进制颜色值
    关于单元测试的思考--Asp.Net Core单元测试最佳实践
    使用xUnit为.net core程序进行单元测试
    SQLSERVER——查看阻塞信息(sp_who_lock优化无误版)
    SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
    .netcore 写日志(使用NLog,log4net)
    概率与影响矩阵
    WebApi Helper帮助文档 swagger
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    解决哈希(HASH)冲突的主要方法
  • 原文地址:https://www.cnblogs.com/mzbdadou/p/2105062.html
Copyright © 2011-2022 走看看