zoukankan      html  css  js  c++  java
  • Flash/Flex学习笔记(37):不用系统组件(纯AS3)的视频播放器只有8.82K

    以前为了赶项目,利用系统组件制作过一款视频播放器(见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();

  • 相关阅读:
    springmvc文件下载
    srringmvc中Controller向前端传值
    springmvc文件上传
    springmvc数据绑定流程
    ssm框架restful风格实现增删改查
    ssm框架搭建
    springmvc直接转发
    @RequestParams注解
    个人博客写了两年
    JS使用OSS上传文件遇到的一些问题
  • 原文地址:https://www.cnblogs.com/happysky97/p/1884571.html
Copyright © 2011-2022 走看看