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?
用到了上一篇(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();
相关文章推荐
- Flash/Flex学习笔记(37):不用系统组件(纯AS3)的视频播放器--只有8.82K
- Flex 学习笔记(十) AS3中给组件的color赋值
- flex学习笔记5----- 组件Application
- Flex学习笔记3——组件和容器
- Flex与As3学习笔记之:Part 4 数组
- flex 学习笔记 as重写组件(一)
- flex 学习笔记 as自定义标尺组件
- flex 学习笔记 as重写组件(二)
- 继续学习flash && flex 之AS3脚本
- unity 4.6新UI系统学习笔记 如何通过脚本访问并修改Text组件
- Flex企业应用开发实践学习笔记(六)——使用ActionScript创建自定义组件
- Flex学习笔记_05 使用组件处理数据和交互_01常用组件
- flex 学习笔记 as自定义组件(三)
- 有关AutoCompleteBox组件的研究[2]_常用特性实例介绍——Silverlight学习笔记[37]
- 创建和扩展Flex 2组件(Creating and Extending Flex 2 Components)学习笔记
- flex 学习笔记 as自定义组件(四)
- Adobe FLEX学习笔记(7)- 给组件…
- Flash/Flex学习笔记(4):如何打开网页及Get/Post数据
- Java与Flex学习笔记(3)----理解Flash中的事件机制
- 学习笔记:只有一套app设计稿(5s尺寸)切出4和4s尺寸以及安卓系统主流尺寸的图