天天看點

制作簡單視訊播放器

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();