天天看点

制作简单视频播放器

1、构建视频NetConnection和NetStream;

2、音量控制用soundTransform(这 个让我耗了一些精力,在AS2中可以setvolume,在AS3就不行了);

3、暂停用pause(),恢复回放暂停的视频流用resume();

4、接收视频信息用onMetaData(如视频总时间data.duration);

5、侦听视频流的开始和结束用NetStatusEvent.NET_STATUS,info.code如果 为"NetStream.Play.Stop",则可重播或播放新的视频;

//以上只是一些最基本的视频知识,希望对初学AS3的人能有所帮助,这将是我最大的欣慰。

[效 果]

[步骤]

第一步:创建播放按钮、暂停按钮,实例名分别为play_btn、pause_btn;

第二步:画两个长矩形,分别转为影片剪辑,实例名分别为jzjd_mc、bfjd_mc,作为加载进度条与播放进度条;

第三步:在库中右键选择“新建视频”,在弹出的对话框中点选“视频(受ActionScript控制)”,拖到场景中,实例名为vid;

第四步:在场景中拉两个动态文本,实例名分别为bftxt(显示播放时间)、zcdtxt(显示总时间);

第五步:画一个长矩形,转为影片剪辑,作为音量条,实例名为ylt_mc;

第六步:画一个小圆,转为影片剪辑,作为音量滑块,实例名为ylhk_mc;

第七步:在帧上写如下代码:

[代码]

//创建一个 NetConnection 对 象

var nc:NetConnection=new NetConnection();

/*如果连接到没有使用服务器的FLV 文件,则通过向 connect() 方法传递值

null,来播放流式 FLV 文件*/

nc.connect(null);

/*创建一个 NetStream 对象(该对象将 NetConnection 对象作为参数)并

指定要加载的 FLV 文件*/

var ns:NetStream=new NetStream(nc);

ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");

/*使用 Video 类的 attachNetStream() 方法附加以前创建的 NetStream

对象(视频实例名为vid)*/

vid.attachNetStream(ns);

//音量初始值

var yl:Number=0.5;

var nsyl:SoundTransform =new SoundTransform();

//nsyl.volume=yl

//播放进度与加载进度影片缩放为0

bfjd_mc.scaleX=jzjd_mc.scaleX=0;

//申明变量播放与下载百分比以及总时间(秒)的初始值为0

var bfbfb:int=0;

var xzbfb:int=0;

var _duration:Number=0;

//指定在其上调用回调方法的对象

var _client:Object=new Object();

_client.onMetaData=onMetaData;

ns.client=_client;

//按钮可见性与添加侦听事 件

play_btn.visible=false;

pause_btn.visible=true;

pause_btn.addEventListener(MouseEvent.CLICK, zt);

play_btn.addEventListener(MouseEvent.CLICK, bf);

//忽略错误

ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);

function asyncErrorHandler(event:AsyncErrorEvent):void {

}

//暂停

function zt(event:MouseEvent):void {

play_btn.visible=true;

pause_btn.visible=false;

//视频暂停

ns.pause();

//播放

function bf(event:MouseEvent):void {

//恢复回放暂停的视频流

ns.resume();

addEventListener(Event.ENTER_FRAME,gx);

//接收在正播放的 FLV 文件中嵌入的描述性信息时调度

function onMetaData(data:Object):void {

_duration=data.duration;

//申明变量播放信号

var bfxh:String;

//侦听视频流的开始和末尾

ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);

function statusHandler(event:NetStatusEvent):void {

bfxh=event.info.code;

//不断更新进度与文本的显示

function gx(event:Event):void {

if (ns.bytesLoaded>0) {

//加载进度

xzbfb=ns.bytesLoaded/ns.bytesTotal*100;

jzjd_mc.scaleX=xzbfb/100;

if (_duration>0 && ns.time>0) {

//播放进度

bfbfb=ns.time/_duration*100;

bfjd_mc.scaleX=bfbfb/100;

if (bfxh=="NetStream.Play.Stop") {

//播放完毕时的设置

bfbfb=0;

bfjd_mc.scaleX=0;

ns.seek(0);//将播放头置于视频开始处

//文本显示内容

bftxt.text=Math.round(ns.time/60)+":"+Math.round(ns.time%60);

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

//音量控制

yl=(ylhk_mc.x-345)/50;

ylt_mc.scaleX=yl;

nsyl.volume =yl;

ns.soundTransform =nsyl;

//音量滑块拖 动控制

var fw:Rectangle=new Rectangle(345,328,50,0);//拖动范围

ylhk_mc.addEventListener(MouseEvent.MOUSE_DOWN,ylhkax);

ylhk_mc.addEventListener(MouseEvent.MOUSE_UP,ylhksk);

stage.addEventListener(MouseEvent.MOUSE_UP,ylhksk);

function ylhkax(event:MouseEvent):void {

ylhk_mc.startDrag(false,fw);

function ylhksk(event:MouseEvent):void {

ylhk_mc.stopDrag();