FLV播放器 源码+答疑

最近失业在家,不是很爽啊~
随便写些代码,想到什么,写什么

暂时打算写一个完整的FLV播放器,其中按照代码来说,需要三大部分

一:xml数据读取

二:List元件

三:FLV播放器

现在把FLV播放器80%写完了,才300行。

代码如下:

 

// ======================================================
//
===================code design By LongFeng=======================
//
======================================================
var  movieWidth:uint  =   640 ;
var  movieHeight:uint  =   480 ;
var  movieURL:String  =   " test.flv " ;
var  titleTxt:String  =   " 测试 " ;
var  progresX:Number  =  controlBar.scrubber.progres.x;
var  theVideo:Video  =  getChildByName( " _theVideo " ) as Video;
var  tooltip:MovieClip  =  getChildByName( " _tooltip " ) as MovieClip;
// 影片流
var  ns:NetStream;
// 自动播放
var  movieTotalTime  =   0 ;
var  isStartAuto:Boolean  =   false ;
var  isStarted:Boolean  =   false ;
var  isSlide:Boolean  =   false ;
var  isNeedCheck:Boolean  =   false ;
var  testLoadNum:uint  =   0 ;
var  loadInfo:uint  = 0 ;
var  volX:Number  =  controlBar.vol.x;
var  volY:Number  =  controlBar.vol.y;
var  movieProgressX:Number  =  controlBar.scrubber.progres.x;
var  movieProgressY:Number  =  controlBar.scrubber.progres.y;
var  movieProgressW:Number  =   280   -  movieProgressX;
var  nc:NetConnection  =   new  NetConnection();
// 音量宽度
const volWidth: int   =   58 ;
var  volNum:Number  =   0.8 ;
var  flvTitle:String;
// 一系列的按钮提述侦听器
controlBar.rewinder.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.pauseBtn.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.playBtn.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.fforwarder.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.stopBtn.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.scrubber.progres.scrubba.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
controlBar.vol.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
plBut.addEventListener(MouseEvent.ROLL_OVER,tipsShow);
//
//
函数段
//
播放影片 主函数
function  playMovieInit(_movieURL:String  =   " test.flv " ,title:String  =   " 测试 " ,auto:Boolean  =   false ) {
    flvTitle 
= title;
    movieURL 
= _movieURL;
    init();
    isStartAuto 
= auto
    trace(isStartAuto);
    
if(isStartAuto){
        setStream();
    }

}

function  setStream() {
    nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
    nc.connect(
null);
    
}

function  netStatusHandler(event:NetStatusEvent) {
    trace(event.info.code);
    
switch (event.info.code){
        
case "NetStream.Seek.Notify":
            
if(isNeedCheck){
                controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
            }

            
break;
        
case "NetConnection.Connect.Success" :
            connectStream();
            
break;
        
/*
        case "NetStream.Buffer.Full":
            controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
            break;
        
*/

        
//搜寻操作开始
        case "NetStream.Play.Start":
            isNeedCheck 
= true;
            controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
            
break;
        
case "NetStream.Unpause.Notify":
            controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
            
break;
        
case "NetStream.Play.StreamNotFound" :
            trace(
"未找到影片:" + movieURL);
            
break;
        
/*case "NetStream.Seek.Notify":
            if(isNeedCheck){
                controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
            }
            break;
*/

        
//暂停
        case "NetStream.Pause.Notify":
           
// controlBar.scrubber.removeEventListener(Event.ENTER_FRAME,movieProgress);
           trace("fuck");
           controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,movieProgress);
           
break;
        
//停止
        case "NetStream.Play.Stop" :
            isNeedCheck 
= false;
            controlBar.scrubber.progres.x 
= movieProgressX;
            controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,movieProgress);
            ns.seek(
0);
            pauseMovie();
            
break;
    }

}

function  connectStream() {
    ns 
= new NetStream(nc);
    ns.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
    
var customClient:Object = new Object();
    
//从网络流中获取时间元素
    customClient.onMetaData = function(info:Object){
    
//trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
        movieTotalTime = info.duration;
    }
;
    
//从网络流中获取状态信息
    /*customClient.onStatus = function(info:Object){
       // trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
       //trace(info.code)
    };
*/

    ns.client 
= customClient;
    theVideo.attachNetStream(ns);
    playMovie();
    
//
    //
    //
    //
    //
    
}

function  playMovie() {
    
if(!isStarted){
        ns.play(movieURL);
        welcome.infoTxt.text 
= "loading..";
        isStarted 
= true;
        setMovieSound(volNum);
        controlBar.vol.x 
= volNum * volWidth + volX;
        setAble();
        
//
        //
        //按钮初始化
        //声音滑块设置
        controlBar.vol.addEventListener(MouseEvent.MOUSE_DOWN,setMoveVolBar);
        
        
//声音设置完毕
        //播放系列设置
        controlBar.playBtn.addEventListener(MouseEvent.MOUSE_DOWN,playMovieBtn);
        controlBar.pauseBtn.addEventListener(MouseEvent.MOUSE_DOWN,pauseMovieBtn);
        controlBar.stopBtn.addEventListener(MouseEvent.MOUSE_DOWN,stopMovieBtn);
        
//
        //播放进程
        controlBar.scrubber.loaded.addEventListener(Event.ENTER_FRAME,movieInFrame);
        controlBar.scrubber.progres.scrubba.addEventListener(MouseEvent.MOUSE_DOWN,setMovieProgress);
        
//
        //
        //
        
    }
else{
        ns.resume();
    }

    controlBar.pauseBtn.visible 
= false;
    controlBar.playBtn.visible 
= true;
}

function  setMoveVolBar(evt:MouseEvent) {
    
//evt.target.startDrag(false, startxs+3, evt.target._y, startxs+58, evt.target._y);
    evt.target.startDrag(false,new Rectangle(volX,volY,volWidth,0));
    evt.target.addEventListener(Event.ENTER_FRAME,checkVol);
    stage.addEventListener(MouseEvent.MOUSE_UP,setLeaveVolBar);
}

// 检查音量 与VOL元件绑定
function  checkVol(evt:Event) {
    trace(
"音量检测");
    
var tempVol:Number = Math.ceil((evt.target.x - volX)/volWidth*100)/100;
    setMovieSound(tempVol);
}

function  setLeaveVolBar(evt:MouseEvent) {
    controlBar.vol.stopDrag();
    controlBar.vol.removeEventListener(Event.ENTER_FRAME,checkVol);
    stage.removeEventListener(MouseEvent.MOUSE_UP,setLeaveVolBar);
}

// 播放,暂停,停止按钮事件函数
//
------------------------------------------------------------------------------------------------------
//
function  playMovieBtn(evt:MouseEvent) {
    controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,movieProgress);
    ns.pause();
    controlBar.pauseBtn.visible 
= true;
    controlBar.playBtn.visible 
= false;
}

function  pauseMovieBtn(evt:MouseEvent) {
    
//tooltip.visible = true;
    controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,movieProgress);
    playMovie();
}

function  stopMovieBtn(evt:MouseEvent) {
   controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,movieProgress);
   ns.seek(
0);
   pauseMovie();
}

// --------------------------------------------------------------------------------------------------------
function  movieInFrame(evt:Event) {
    trace(
"下载进度检测" + testLoadNum);
    testLoadNum
++;
    
if(testLoadNum < 50){
        
var loaded :uint = ns.bytesLoaded;
        
var total :uint =  ns.bytesTotal;
        loadInfo 
= int(loaded/total);
        
if (loaded == total && loaded > 1000{
            controlBar.scrubber.perload.text 
= "Load Over";
            evt.target.removeEventListener(Event.ENTER_FRAME,movieInFrame);
        }
else{
            evt.target.scaleX 
= int (loaded/total); 
            controlBar.scrubber.perload.text 
= int (loaded/total)+"%";
        
//progressBar.loa.scaleX = int (loaded/total);
        }

    }
else{
        controlBar.scrubber.perload.text 
= "Load Fail";
        evt.target.removeEventListener(Event.ENTER_FRAME,movieInFrame);
    }

}

function  movieProgress(evt:Event) {
    
//trace("影片播放检测");
    //var tempProgress:Number = Math.ceil((controlBar.scrubber.progres.x - movieProgressX)/(-26+286)*100)/100;
    var tempProgress:Number ;
    
if(movieTotalTime != 0){
        title.text 
= String(ns.time);
        tempProgress 
= Math.ceil(ns.time/movieTotalTime*100)/100;
        title.text 
= String(tempProgress);
        controlBar.scrubber.progres.x 
= tempProgress*movieProgressW + movieProgressX;
    }

}

function  setMovieSound(soundVol:Number) {
    
var transform:SoundTransform = new SoundTransform(soundVol);
    ns.soundTransform 
= transform;
}

// ----------------------------------------------------------------------------------------
//
初始化主要属性
function  init() {
    testLoadNum 
= 0;
    movieTotalTime 
= 0;
    isStarted 
= false;
    isSlide 
= false;
    welcome.visible 
= false;
    controlBar.playBtn.visible 
= false;
    controlBar.pauseBtn.visible 
= true;
    controlBar.scrubber.progres.x 
= progresX;
    controlBar.scrubber.perload.text 
= "0%";
    bugle.stopBar.visible 
= false;
    controlBar.vol.x 
= volX;
    isNeedCheck 
= false;
    setEnable();
    title.text 
= flvTitle;
    tooltip.visible 
= false;
    loadInfo 
= 0;
}

// ----------------------------------------------------------------------------------------------------
function  setEnable() {
    bugle.mute.enabled 
= false;
    controlBar.scrubber.progres.scrubba.enabled 
= false;
    
for(var i:uint =controlBar.numChildren-1; i<controlBar.numChildren;i--){
        
var child = controlBar.getChildAt(i);
        child.enabled 
= false;
    }

}

function  setAble() {
    bugle.mute.enabled 
= true;
    controlBar.scrubber.progres.scrubba.enabled 
=true;
    
for(var i:uint =controlBar.numChildren-1; i<controlBar.numChildren;i--){
        
var child = controlBar.getChildAt(i);
        child.enabled 
= true;
    }

    
}

function  setWidth(_movieWidth:uint) {
}

function  setHeight(_movieHeight:uint) {
}

// 函数段结束
//
影片控制

// 按钮事件
function  progressMove(evt:Event) {
    
    
//controlBar.scrubber.progres.x = controlBar.scrubber.mouseX;
}

function  lostMovieProgress(evt:MouseEvent) {
    
if(isSlide){
        
var tempProgress:Number = (controlBar.scrubber.progres.x - movieProgressX)/movieProgressW;
        ns.seek(tempProgress 
* movieTotalTime);
        controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,moveBar);
        stage.removeEventListener(MouseEvent.MOUSE_UP,lostMovieProgress);
        isSlide 
= false;
    }

}

function  setMovieProgress(evt:Event) {
    controlBar.scrubber.progres.removeEventListener(Event.ENTER_FRAME,movieProgress);
    
//
    controlBar.scrubber.progres.addEventListener(Event.ENTER_FRAME,moveBar);
    
//controlBar.scrubber.progres.scrubba.addEventListener(MouseEvent.MOUSE_UP,lostMovieProgress);
    stage.addEventListener(MouseEvent.MOUSE_UP,lostMovieProgress);
    
}

function  moveBar(evt:Event) {
    
//trace("滑动检测");
    isSlide = true;
    
if(controlBar.scrubber.mouseX <= 276 && controlBar.scrubber.mouseX >= 17){
        controlBar.scrubber.progres.x 
= controlBar.scrubber.mouseX;
    }
else if(controlBar.scrubber.mouseX>276){
        controlBar.scrubber.progres.x 
= 276;
    }
else if(controlBar.scrubber.mouseX < 17){
        controlBar.scrubber.progres.x 
= 17;
    }

}

//
function  pauseMovie() {
    ns.pause();
    controlBar.pauseBtn.visible 
= true;
    controlBar.playBtn.visible 
= false;
}

//
function  tipsShow(evt:MouseEvent) {
    trace(evt.target.name);
    tooltip.x 
= evt.target.x;
    tooltip.y 
= evt.target.y;
    tooltip.visible 
= true;
    tooltip.setTips(evt.target.name);
    tooltip.startDrag(
true);
    evt.target.addEventListener(MouseEvent.ROLL_OUT,tipsHide);
    
}

function  tipsHide(evt:MouseEvent) {
    tooltip.stopDrag();
    tooltip.visible 
= false;
    evt.target.removeEventListener(MouseEvent.ROLL_OUT,tipsHide);
}

playMovieInit(
" video2.flv " , " 美女 " , true );

// 未下载完成,controlBar.scrubber.loaded.addEventListener(Event.ENTER_FRAME,movieInFrame);会继续触发
//
建立新链接的时候才需移除的侦听器 ns.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);

 点击下载源码

有问题请留言,代码写的比较乱。有空我解释下里面的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值