⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 videoplayer.as

📁 使用as3.0重新写了播放器 播放器大小缩小,在21k左右 新参数和vcastr2.x不同 可以通过xml对播放器设置 界面更新 增加音量控制 留出了插件的接口
💻 AS
字号:
package com.ruochi.video {
	import com.ruochi.shape.Rect;
	import com.ruochi.video.ScaleUtils;
	import com.ruochi.video.VcastrConfig;
	import com.ruochi.video.VideoEvent;
	import flash.events.Event;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.events.NetStatusEvent;
	import flash.net.URLRequest;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.display.Sprite;
	import com.ruochi.component.SimpleAlert;
	import flash.media.SoundTransform;
	import com.ruochi.utils.deleteAll;
	public class VideoPlayer extends Sprite {
		private var _video:Video = new Video();
		private var _netStream:NetStream;
		private var _netConnetction:NetConnection = new NetConnection();
		private var _url:String;
		private var _state:String;
		private var _timer:Timer = new Timer(250, 0);
		private var _duration:Number;
		private var _bg:Rect = new Rect(100, 100, 0);
		private var _playerWidth:Number;
		private var _playerHeight:Number;
		private var _isVideoInit:Boolean = false;
		private var _metadata:Object;
		private var _soundTransform:SoundTransform = new SoundTransform(VcastrConfig.defautVolume);
		private var _isBuffering:Boolean = false;
		private var _client:Object = new Object;
		private var _dataXml:XML;
		public function VideoPlayer(w:int = 320, h:int = 240) {
			_playerWidth = w;
			_playerHeight = h;
			init();
		}
		private function init():void {
			_video.smoothing = true;
			_video.visible = false;
            _netConnetction.connect(null);			
			_netStream = new NetStream(_netConnetction);
            _netStream.client = _client;
			_netStream.bufferTime = VcastrConfig.bufferTime;
			_video.attachNetStream(_netStream);
			configListener();
			addChild(_bg);
			addChild(_video);
			_client.onMetaData = onMetaData;
			_client.onCuePoint = onCuePoint;
		}
		private function resetParam():void {
			_isVideoInit = false;
			_timer.stop();	
		}
		private function onMetaData(info:Object):void {
			trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
			_duration = info.duration;
			dispatchEvent(new VideoEvent(VideoEvent.RECEIVE_METADATA, false, false, _state, playheadTime));
		}
		private function onCuePoint(info:Object):void {
			trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
			dispatchEvent(new VideoEvent(VideoEvent.CUE_POINT, false, false, _state, playheadTime));
		}
		private function configListener():void {
			_timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
			_netStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStreamStatus, false, 0, true);
		}
		private function onNetStreamStatus(e:NetStatusEvent):void {
			switch (e.info.code) {
			case "NetConnection.Connect.Success":
				break;
			case "NetStream.Play.StreamNotFound":
				SimpleAlert.text = "Moive not found"
				break;
			case "NetStream.Buffer.Flush":
				resetParam();
				VcastrConfig.isAutoPlay = false;
                load();				
				dispatchEvent(new VideoEvent(VideoEvent.COMPLETE, false, false, _state, playheadTime));
				break;
			case "NetStream.Play.Start":
				break;			
			}
		}
		private function onTimer(e:TimerEvent):void {
			if (!_isVideoInit && _video.videoWidth) {
				videoInit();
			}
			dispatchEvent(new VideoEvent(VideoEvent.PROGRESS, false, false, _state, playheadTime));
			dispatchEvent(new VideoEvent(VideoEvent.PLAYHEAD_UPDATE, false, false, _state, playheadTime));
			checkBuffer();
		}
		private function checkBuffer():void {
			if (_netStream.bufferLength < .5 && _isBuffering == false) {
				_isBuffering = true;
				dispatchEvent(new VideoEvent(VideoEvent.START_BUFFERING, false, false, _state, playheadTime));
			}else if(_netStream.bufferLength>_netStream.bufferTime-.5 && _isBuffering == true){
				_isBuffering = false;
				dispatchEvent(new VideoEvent(VideoEvent.STOP_BUFFERING, false, false, _state, playheadTime));
			}
		}
		private function videoInit():void {
			_video.visible = true;
			setSize(_playerWidth, _playerHeight);
			if (VcastrConfig.isAutoPlay) {
				play()
			}else {
				pause();
			}			
			_isVideoInit = true;
		}
		private function setState(str:String):void {
			if (str != _state) {
				_state = str;
				dispatchEvent(new VideoEvent(VideoEvent.STATE_CHANGE, false, false, _state, playheadTime));				
			}
		}
		public function get state():String {
			return _state;
		}
		public function setSize(w:int, h:int):void {
			_playerWidth = w;
			_playerHeight = h;
			_bg.width = w;
			_bg.height = h;
			if (VcastrConfig.scaleMode == ScaleUtils.NO_BORDER) {
				ScaleUtils.fillNoBorder(_video, _bg);
			}else if (VcastrConfig.scaleMode == ScaleUtils.NO_SCALE) {
				ScaleUtils.fillNoScale(_video, _bg);
			}else if (VcastrConfig.scaleMode == ScaleUtils.EXACT_FIT) {
				ScaleUtils.fillExactFit(_video, _bg);
			}else {				
				ScaleUtils.fillShowAll(_video, _bg); 
			}
		}
		public function play():void {
			if (_timer.running) {
				_netStream.resume();
				setState(VideoEvent.PLAYING);
			}else {
				load();
			}
		}
		public function load():void {
			_netStream.play(_url)
			_timer.start();			
			//setState(VideoEvent.LOADING);
		}
		public function pause():void {
			_netStream.pause();
			setState(VideoEvent.PAUSED);
		}
		public function stop():void {
			setState(VideoEvent.STOP);
		}
		public function close():void {
			_netStream.close();
		}
		public function playPause():void {
			if (_state != VideoEvent.PLAYING) {
				play();
			}else {
				pause();
			}
		}
		public function ff():void {
			seek(playheadTime + totalTime / 10);
		}
		public function rew():void {
			seek(playheadTime - totalTime / 10);
		}
		public function seekPersent(persent:Number):void {
			seek(totalTime * persent);
		}
		public function gotoBegin():void {
			pause();
			seek(0);
		}
		public function seek(offset:Number):void {
			_netStream.seek(offset);
		}
		public function get playheadTime():Number {
			return _netStream.time;
		}
		public function get totalTime():Number {
			return duration;
		}
		public function get bytesLoaded():Number {
			return _netStream.bytesLoaded;
		}
		public function get bytesTotal():Number {
			return _netStream.bytesTotal;
		}		
		public function set volume(value:Number):void {
			_soundTransform.volume = value;
			_netStream.soundTransform = _soundTransform;
		}
		public function get volume():Number {
			return _soundTransform.volume;
		}
		public function set duration(num:Number):void {
			_duration = num;
		}
		public function get duration():Number {
			if (_duration) {
				return _duration;
			}else {
				return bytesTotal/_video.videoWidth/_video.videoHeight * 1.8
			}
		}
		public function get playerWidth():int {
			return _playerWidth;
		}	
		public function get playerHeight():int {
			return _playerHeight;
		}
		public function set url(u:String):void {
			_url = u;
			if (VcastrConfig.isLoadBegin) {
				load();
			}
		}
		public function set dataXml(xml:XML):void {
			_dataXml = xml;
			url = _dataXml.source[0];
			if (_dataXml.duration[0] != undefined) {
				_duration = _dataXml.duration[0]
			}
		}
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -