`
madfroghe
  • 浏览: 122118 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

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

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


import Jimmy.Event.ValueChangeEvent;

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


var _netConn:NetConnection;

 
var _netStream:NetStream;

 
var _duration:Number=0.0;

 
var _client:Object;

 
var _soundTransform:SoundTransform;

 
var _volumn=0.6;//初始音量

 
var _flvUrl = "flv的地址";


function init():void {


txtInfo.text = "";

 
txtInfo.visible = false;

 
txtCurrent.text = "00:00";

 
txtTotal.text = "00:00";

 
silderVideo.Value = 0.0;

 
videoMask.visible = false;

 
txtPercent.text = "";

 
txtPercent.visible = false;


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

 
_client = new Object();

 
_soundTransform = new SoundTransform();

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

 
if (_autoPlay) {

btnPause.visible=true;

 
btnPlay.visible=false;

 
} else {

 
btnPause.visible=false;

 
btnPlay.visible=true;

 
}   

 
//初始化滑块按钮宽度

 
silderSound.ButtonWidth=35;


silderVideo.ButtonWidth=9.5;    

 
silderSound.Value = _volumn;

 
silderSound.ShowBarTri = true;

 
silderSound.ShowBar = false;

 
//开始连接并播放

 
_netConn.connect(null);

 
_netStream=new NetStream(_netConn);

 
_netStream.bufferTime = 5;

 
wVideo.attachNetStream(_netStream);

 
_netStream.play(_flvUrl);   


_soundTransform.volume=_volumn;

 
_netStream.soundTransform=_soundTransform;


_client.onMetaData = MetaDataHandler;

 
_netStream.client=_client;


//注册监听事件

 
_netStream.addEventListener(NetStatusEvent.NET_STATUS,NetStatusHandler);

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

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


btnSound.addEventListener(MouseEvent.MOUSE_DOWN,btnSoundMouseDown);

 
btnPlay.addEventListener(MouseEvent.CLICK,btnPlayMouseClick);

 
btnPause.addEventListener(MouseEvent.CLICK,btnPauseMouseClick);

 
btnStop.addEventListener(MouseEvent.CLICK,btnStopMouseClick);


silderSound.addEventListener(ValueChangeEvent.VALUE_CHANGE,VolumnChangedHandler);

 
addEventListener(Event.ENTER_FRAME,EnterFrameHandler);  

 
silderVideo.addEventListener(MouseEvent.MOUSE_DOWN,silderVideoMouseDown);

 
silderVideo.addEventListener(ValueChangeEvent.VALUE_CHANGE,VideoValueChangedHandler);

 
}


function NetStatusHandler(e:NetStatusEvent):void{

txtInfo.text = "";

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


trace(e.info.code);

 
switch(e.info.code){

 
case "NetStream.Play.StreamNotFound":

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


break;

 
case "NetStream.Play.Failed":

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

 
break;

 
case "NetStream.Buffer.Empty":

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

 
break;

 
case "NetStream.Play.Stop":

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

 
break;

 
case "NetStream.Seek.InvalidTime":

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


//trace(e.info.Error);

//_netStream.pause();

//btnPlay.visible = true;  
//btnPause.visible = false;         

 
break;  

 
default:

 
break;

}


if (txtInfo.text.length>0){      

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

 
}


}

 
function btnSoundMouseDown(e:MouseEvent) {

 
var i:uint=btnSound.currentFrame;

 
if (i==1) {

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


SetVolumn(0);

} else {

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


SetVolumn(silderSound.Value);

 
}

 
}

 
//设置音量

function SetVolumn(vol:Number):void {

 
var _snd:SoundTransform = _netStream.soundTransform;

 
_snd.volume = vol;

 
_netStream.soundTransform = _snd;

 
}

 
//Play按钮点击事件

 
function btnPlayMouseClick(e:MouseEvent) {

 
//切换按钮可用性

 
btnPause.visible=true;

 
btnPlay.visible=false;

 
//开始播放...

 
_netStream.resume();

 
}

 
//Pause按钮点击事件

 
function btnPauseMouseClick(e:MouseEvent) {

 
//切换按钮可用性

 
btnPause.visible=false;

 
btnPlay.visible=true;

 
//暂停...

 
_netStream.pause();

 
}

 
//Stop按钮点击事件

 
function btnStopMouseClick(e:MouseEvent) {

 
_netStream.pause();

 
_netStream.seek(0);

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

 
btnPause.visible=false;

btnPlay.visible=true;

 
}

 
//获取视频总持续时间

 
function MetaDataHandler(data:Object) {

 
_duration = data.duration;  

 
}

 
function VolumnChangedHandler(e:ValueChangeEvent):void{

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

 
if (btnSound.currentFrame==1){


SetVolumn(e.NewValue);

}

 
}


function VideoValueChangedHandler(e:ValueChangeEvent):void{

 
_netStream.pause();


_netStream.seek(e.NewValue * _duration);

 
//_netStream.resume();

 
}

 
//进入每帧的处理函数

 
function EnterFrameHandler(e:Event):void{

 
if (_duration>0){

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

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

 
silderVideo.Value = _netStream.time/_duration;

 
}

 
if (_netStream.bytesLoaded>0){


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

 
}   

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

 
}

 


function RemoveEnterFrameHandler(){

 
if (silderVideo.IsDragging){


removeEventListener(Event.ENTER_FRAME,EnterFrameHandler);

 
} else 
addEventListener(Event.ENTER_FRAME,EnterFrameHandler);

 
}


}

 


function silderVideoMouseDown(e:MouseEvent):void{

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


removeEventListener(Event.ENTER_FRAME,EnterFrameHandler);

 
stage.addEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler);

 
}

 
function stageMouseUpHandler(e:MouseEvent):void{

 
addEventListener(Event.ENTER_FRAME,EnterFrameHandler);

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

 
if (btnPause.visible){

 
_netStream.resume();

}


stage.removeEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler); 

 
}


init();

 

分享到:
评论

相关推荐

    常见物质比热容.doc

    * 铜:8.82kJ/Kg℃ * 软木:0.252kJ/Kg℃ * 棉:1.51kJ/Kg℃ * 棉籽油:0.951kJ/Kg℃ * 导热姆 A:0.992kJ/Kg℃ * 导热姆 C:1.11kJ/Kg℃ * 7-2:2.72kJ/Kg℃ * 乙二酸:1.112kJ/Kg℃ * 脂肪酸-软脂:0.852...

    nfs-subdir-external-provisioner:v4.0.2 镜像文件

    nfs-subdir-external-provisioner:v4.0.2 镜像文件

    SAP Business One8.82新增功能

    SAP Business One8.82新增功能

    LGS-8.82.151-x64-Logitech

    标题“LGS-8.82.151-x64-Logitech”指的是罗技游戏软件的一个特定版本,LGS(Logitech Gaming Software),它适用于64位的Windows操作系统。这个版本号“8.82.151”表明它是软件的一个更新迭代,可能包含了性能优化...

    Fresh UI(系统配置优化) v8.82 最新安装版

    Fresh UI是一款功能强大的系统配置优化工具,最新版本为v8.82,旨在帮助用户根据个人喜好和需求调整Windows操作系统的界面与性能。这款软件提供了丰富的选项,让用户能够深入到系统的各个角落,进行个性化的定制和...

    有理数加减乘除混合运算经典练习题集.doc

    3. (-3 61 )+(-3 32 )=(-6 93 ) 知识点:有理数的加法运算 4. (-3.5)+(-5.32)=-8.82 知识点:有理数的加法运算 ... 二、计算 1. 31328÷43=726 知识点:有理数的除法运算 2. 4÷81=0.05 知识点:有理数的除...

    ERP操作手册v11.docx

    ### ERP操作手册知识点详解 #### 一、概览 本操作手册主要针对的是SAP Business One系统...通过以上内容的学习,使用者可以较为全面地了解SAP Business One的基本安装过程与常见操作,从而快速上手并有效利用该系统。

    同花顺手机炒股 v8.82.01

    同花顺手机炒股 v8.82.01 版本:8.82.01 软件语言:中文 软件类别:股票 软件大小:14.43 MB 适用固件:1.5及更高固件 内置广告:有广告 适用平台:Android 同花顺一直是最受欢迎的手机炒股软件,曾荣获行业风向...

    托普Top编程器软件8.82

    【标题】"托普Top编程器软件8.82"是指一种专用于编程微控制器的软件工具,由托普公司开发。这个版本是8.82,表明它是该软件的一个更新迭代,通常会包含错误修复、性能提升以及可能的新功能。 【描述】提到的“支持...

    Autodesk 卸载工具v8.82.txt

    干净卸载3d软件,包括3dmax,maya等等等,不需要重装系统 干净卸载3d软件,包括3dmax,maya等等等,不需要重装系统

    sonar-runner-dist-2.4

    JAVA_OPTS="-Djava.rmi.server.hostname=172.16.8.82 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8765 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote....

    xfplay8.82

    xfplay8.82

    传承8.82版高度防刷官方原版

    【传承8.82版】是一款备受关注的软件版本,其在网络安全领域有着显著的提升,特别是对于防止恶意刷屏和攻击方面表现出色。这款官方原版确保了用户能够获得未经篡改的纯净体验,避免了第三方修改可能导致的安全隐患。...

    sap-b1安装步骤.docx

    1.安装文件夹8.82 2.选择安装组件 注:server tools 安装license服务器用 MS outlook 安装邮件程序 3.下一步 4.填写userid 注:无具体要求,可任意填写。 5.license服务器制定 注:password为lic服务器...

    TCGCMS建站系统源码 v0.0.8.82.rar

    TCG CMS System 是一个基于ASP.NET和MSSQL的建站系统,系统以资讯为主,实现了全站静态文件生成,无限资讯分类,文章模版按分类设置,即各个分类采用不同的文本模式,资讯模版实现无限嵌套,即在模版中可以使用模版...

    SAP Business One 8.82 新增功能

    SAP Business One 8.82的新增功能

    夜间施工安全方案.docx

    - **地理位置**:阜阳市南机场路与老202省道交叉处至桩号k214+450 - **全长**:8.82公里 - **主要工程量**: - 桥梁长度:91米 - 路基挖方:27,603立方米 - 路基填方:291,708立方米 - 10%石灰土底基层:46,393....

    SAP Business One BOM版本管理Addon(8.82版)

    在系统“生产”模块增加BOM版本管理功能;版本化管理各成品、半成品物料清单;引入激活时间,支持与系统自带“物料清单”的手动推送和自动同步,其它具体功能可查看资源中说明文档。 说明: 1.本Addon仅供学习和...

    Hardware Requirements Guide for SAP Business One

    通过上述内容可以看出,《SAP Business One》硬件需求指南为用户提供了详细的操作系统与数据库兼容性信息,并且随着时间的发展不断更新,确保了SAP Business One系统的稳定运行。此外,该文档还明确了各种文本格式的...

    罗技g103游戏键盘驱动 v8.82.151 官方最新版

    罗技g103是一款非常好用的游戏键盘,用户安装好键盘驱动程序以后,即可对6个编程按键进行自定义的调节和控制,在玩游戏时更加得心应手,欢迎有需要的朋友下载使用!官方介绍罗技G103游戏键盘,操作精确至毫秒,响应...

Global site tag (gtag.js) - Google Analytics