您的位置:首页 > 其它

Flash/Flex学习笔记(37):不用系统组件(纯AS3)的视频播放器--只有8.82K

2010-11-22 17:17 627 查看
以前为了赶项目,利用系统组件制作过一款视频播放器(见Flash/Flex学习笔记(6):制作基于xml数据源的flv视频播放器),但是系统组件实在是太大了,最终生成的swf居然有103K,随着AS3的深入学习,昨天又弄了一个只用AS3的播放器,最终只有8.82K,呵呵,这肥减得那是相当厉害。

用到了上一篇(Flash/Flex学习笔记(35):自己动手实现一个滑块控件(JimmySilder))里自己写的的滑块控件,主要代码如下(关键是NetConnection与NetStream对象的使用):

view source

print?

001

import Jimmy.Event.ValueChangeEvent;


002



003

var _autoPlay:Boolean=
true
;
//是否自动播放


004

var _netConn:NetConnection;


005

var _netStream:NetStream;


006

var _duration:Number=0.0;


007

var _client:Object;


008

var _soundTransform:SoundTransform;


009

var _volumn=0.6;
//初始音量


010

var _flvUrl =
"flv的地址"
;


011



012

function init():
void
{


013

txtInfo.text =
""
;


014

txtInfo.visible =
false
;


015

txtCurrent.text =
"00:00"
;


016

txtTotal.text =
"00:00"
;


017

silderVideo.Value = 0.0;


018

videoMask.visible =
false
;


019

txtPercent.text =
""
;


020

txtPercent.visible =
false
;


021



022

_netConn =
new
NetConnection();
//创建连接


023

_client =
new
Object();


024

_soundTransform =
new
SoundTransform();


025



026

//初始化[暂停]/[播放]按钮可见性


027

if
(_autoPlay) {


028

btnPause.visible=
true
;


029

btnPlay.visible=
false
;


030

}
else
{


031

btnPause.visible=
false
;


032

btnPlay.visible=
true
;


033

}   


034



035

//初始化滑块按钮宽度


036

silderSound.ButtonWidth=35;


037

silderVideo.ButtonWidth=9.5;    


038

silderSound.Value = _volumn;


039

silderSound.ShowBarTri =
true
;


040

silderSound.ShowBar =
false
;


041



042

//开始连接并播放


043

_netConn.connect(
null
);


044

_netStream=
new
NetStream(_netConn);


045

_netStream.bufferTime = 5;


046

wVideo.attachNetStream(_netStream);


047

_netStream.play(_flvUrl);   


048

_soundTransform.volume=_volumn;


049

_netStream.soundTransform=_soundTransform;


050

_client.onMetaData = MetaDataHandler;


051

_netStream.client=_client;


052



053

//注册监听事件


054

_netStream.addEventListener(NetStatusEvent.NET_STATUS,NetStatusHandler);


055

btnSound.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.BUTTON});


056

btnSound.addEventListener(MouseEvent.MOUSE_OUT,function(){Mouse.cursor = MouseCursor.AUTO});


057

btnSound.addEventListener(MouseEvent.MOUSE_DOWN,btnSoundMouseDown);


058

btnPlay.addEventListener(MouseEvent.CLICK,btnPlayMouseClick);


059

btnPause.addEventListener(MouseEvent.CLICK,btnPauseMouseClick);


060

btnStop.addEventListener(MouseEvent.CLICK,btnStopMouseClick);


061

silderSound.addEventListener(ValueChangeEvent.VALUE_CHANGE,VolumnChangedHandler);


062

addEventListener(Event.ENTER_FRAME,EnterFrameHandler);  


063

silderVideo.addEventListener(MouseEvent.MOUSE_DOWN,silderVideoMouseDown);


064

silderVideo.addEventListener(ValueChangeEvent.VALUE_CHANGE,VideoValueChangedHandler);


065

}


066



067

function NetStatusHandler(e:NetStatusEvent):
void
{


068

txtInfo.text =
""
;


069

videoMask.visible =txtPercent.visible =txtInfo.visible =
false
;


070

trace(e.info.code);


071

switch
(e.info.code){


072

case
"NetStream.Play.StreamNotFound"
:


073

txtInfo.text =
"错误:视频文件地址无法访问"


074

break
;


075

case
"NetStream.Play.Failed"
:


076

txtInfo.text =
"错误:视频播放失败"


077

break
;


078

case
"NetStream.Buffer.Empty"
:


079

txtInfo.text =
"影片缓冲中..."
;


080

break
;


081

case
"NetStream.Play.Stop"
:


082

//txtInfo.text ="播放已停止";


083

break
;


084

case
"NetStream.Seek.InvalidTime"
:


085

//txtInfo.text ="错误:无法跳到指定的时间点播放";


086

//trace(e.info.Error);


087

//_netStream.pause();


088

//btnPlay.visible = true;


089

//btnPause.visible = false;         


090

break
;  


091

default
:


092

break
;


093

}


094



095

if
(txtInfo.text.length>0){      


096

videoMask.visible =txtPercent.visible =txtInfo.visible =
true
;        


097

}


098

}


099



100

function btnSoundMouseDown(e:MouseEvent) {


101

var i:
uint
=btnSound.currentFrame;


102

if
(i==1) {


103

btnSound.gotoAndStop(2);
//切换到静音


104

SetVolumn(0);


105

}
else
{


106

btnSound.gotoAndStop(1);
//切换到有声音


107

SetVolumn(silderSound.Value);


108

}


109

}


110



111

//设置音量


112

function SetVolumn(vol:Number):
void
{


113

var _snd:SoundTransform = _netStream.soundTransform;


114

_snd.volume = vol;


115

_netStream.soundTransform = _snd;


116

}


117



118

//Play按钮点击事件


119

function btnPlayMouseClick(e:MouseEvent) {


120

//切换按钮可用性


121

btnPause.visible=
true
;


122

btnPlay.visible=
false
;


123

//开始播放...


124

_netStream.resume();


125

}


126



127

//Pause按钮点击事件


128

function btnPauseMouseClick(e:MouseEvent) {


129

//切换按钮可用性


130

btnPause.visible=
false
;


131

btnPlay.visible=
true
;


132

//暂停...


133

_netStream.pause();


134

}


135



136

//Stop按钮点击事件


137

function btnStopMouseClick(e:MouseEvent) {


138

_netStream.pause();


139

_netStream.seek(0);


140



141

//切换播放/暂停按钮状态


142

btnPause.visible=
false
;


143

btnPlay.visible=
true
;


144

}


145



146



147

//获取视频总持续时间


148

function MetaDataHandler(data:Object) {


149

_duration = data.duration;  


150

}


151



152

function VolumnChangedHandler(e:ValueChangeEvent):
void
{


153

//如果没被禁音,则允许调节音量


154

if
(btnSound.currentFrame==1){


155

SetVolumn(e.NewValue);


156

}


157

}


158



159

function VideoValueChangedHandler(e:ValueChangeEvent):
void
{


160

_netStream.pause();


161

_netStream.seek(e.NewValue * _duration);


162

//_netStream.resume();


163

}


164



165

//进入每帧的处理函数


166

function EnterFrameHandler(e:Event):
void
{


167

if
(_duration>0){


168

txtCurrent.text =Math.floor(_netStream.time/60) + 
":"
+ Math.round(_netStream.time%60);


169

txtTotal.text =Math.floor(_duration/60) + 
":"
+ Math.round(_duration%60);  


170

silderVideo.Value = _netStream.time/_duration;


171

}


172

if
(_netStream.bytesLoaded>0){


173

silderVideo.LoadingValue = _netStream.bytesLoaded / _netStream.bytesTotal;


174

}   


175



176

//trace(_netStream.bytesLoaded + "/" + _netStream.bytesTotal);


177

}


178



179



180

function RemoveEnterFrameHandler(){


181

if
(silderVideo.IsDragging){


182

removeEventListener(Event.ENTER_FRAME,EnterFrameHandler);


183

}


184

else
{


185

addEventListener(Event.ENTER_FRAME,EnterFrameHandler);


186

}


187

}


188



189



190

function silderVideoMouseDown(e:MouseEvent):
void
{


191

//trace("进度滑块被点击了!");


192

removeEventListener(Event.ENTER_FRAME,EnterFrameHandler);


193

stage.addEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler);


194

}


195



196

function stageMouseUpHandler(e:MouseEvent):
void
{


197

addEventListener(Event.ENTER_FRAME,EnterFrameHandler);


198

//trace("鼠标MouseUp事件");


199



200

if
(btnPause.visible){


201

_netStream.resume();


202

}


203

stage.removeEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler); 


204

}


205



206

init();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: