2011-05-25 89 views
1

我想用AS3显示FLV电影的持续时间。我不断收到元数据错误。下面的代码。谢谢。用AS3显示FLV的持续时间

stop(); 


// Video setup -----------------------------------------------/ 
var nc:NetConnection = new NetConnection(); 
nc.connect(null); 

var ns:NetStream = new NetStream(nc); 
ns.addEventListener(NetStatusEvent.NET_STATUS, onStatus); 
ns.client = this; 
video.attachNetStream(ns); 

function onStatus(e:Object):void 
{ 
    if(e.info.code == "NetStream.Play.Start" || 
     e.info.code == "NetStream.Buffer.Full") empty.visible = false; 

    else if(e.info.code == "NetStream.Buffer.Empty") empty.visible = true; 

    else if(e.info.code == "NetStream.Play.Stop") ns.seek(0); 
} 

// Get duration ---------------------------------------------/ 

var dur:Number; 
var duration:Number; 

function onMetaData(meta:Object) 
{ 
    dur = meta.duration; 
} 

// Play the video -------------------------------------------/ 
ns.play("http://adobe.edgeboss.net/download/adobe/adobetv/flasher_magazine/issue_1/issue1.mp4"); 

// Progress bar ---------------------------------------------/ 
addEventListener(Event.ENTER_FRAME, loop); 

thebar.progress.scaleX = 0; 

function loop(e:Event):void 
{ 
    thebar.loaded.scaleX = ns.bytesLoaded/ns.bytesTotal; 
    if(dur) 
    { 
     thebar.progress.scaleX = ns.time/dur; 
    } 

} 

thebar.loaded.addEventListener(MouseEvent.CLICK, seekTo); 


thebar.loaded.buttonMode = true; 
thebar.progress.mouseEnabled = false; 

function seekTo(e:Event):void 
{ 
    ns.seek((thebar.track.mouseX/thebar.track.width) * dur); 
} 


// play/pause control ---------------------------------------------/ 
playPause.buttonMode = true; 
playPause.addEventListener(MouseEvent.CLICK, playPauseClick); 
playPause.addEventListener(MouseEvent.ROLL_OVER, playPauseOver); 
playPause.addEventListener(MouseEvent.ROLL_OUT, playPauseOut); 

function playPauseClick(e:MouseEvent):void 
{ 
    var c:MovieClip = playPause; 
    if(c.currentFrame == 10) 
    { 
     c.gotoAndStop(30); 
     ns.pause(); 
    } 
    else if(c.currentFrame == 30) 
    { 
     c.gotoAndStop(10); 
     ns.resume(); 
    } 
} 

function playPauseOver(e:MouseEvent):void 
{ 
    var c:MovieClip = playPause; 
    if(c.currentFrame == 1) 
    { 
     c.gotoAndStop(10); 
    } 
    else if(c.currentFrame == 20) 
    { 
     c.gotoAndStop(30); 
    } 
} 

function playPauseOut(e:MouseEvent):void 
{ 
    var c:MovieClip = playPause; 
    if(c.currentFrame == 10) 
    { 
     c.gotoAndStop(1); 
    } 
    else if(c.currentFrame == 30) 
    { 
     c.gotoAndStop(20); 
    } 
} 

// Timer -----------------------------------------------/ 

var time_interval:Number = setInterval(checkTime, 500, ns); 
function checkTime(myVideo_ns:NetStream) { 
var ns_seconds:Number = myVideo_ns.time; 
var minutes:Number = Math.floor(ns_seconds/60); 
var seconds = Math.floor(ns_seconds%60) 
if (seconds<10) { 
seconds = ("0"+seconds); 
} 
time_txt.text = minutes+":"+seconds; 
}; 

//non working duration code 
ns.onMetaData = function(metadata) { 
    duration = metadata.duration; 
    var dur_seconds:Number = duration; 
    var minutes_dspl = Math.floor(dur_seconds/60); 
    var seconds_dspl = Math.floor(dur_seconds%60); 
    if (minutes_dspl<10) { 
     minutes_dspl = ("0"+minutes_dspl); 
    } 
    if (seconds_dspl<10) { 
     seconds_dspl = ("0"+seconds_dspl); 
    } 
    duration_txt.text = minutes_dspl+":"+seconds_dspl; 
}; 

回答

2

您指定的NetStream客户端是这个的头部进行编码,所以你需要给onMetaData方法添加到这个为好。

变化//非工作时间的代码

function onMetaData(metadata:Object) { 
    duration = metadata.duration; 
    var dur_seconds:Number = duration; 
    var minutes_dspl = Math.floor(dur_seconds/60); 
    var seconds_dspl = Math.floor(dur_seconds%60); 
    if (minutes_dspl<10) { 
     minutes_dspl = ("0"+minutes_dspl); 
    } 
    if (seconds_dspl<10) { 
     seconds_dspl = ("0"+seconds_dspl); 
    } 
    duration_txt.text = minutes_dspl+":"+seconds_dspl; 
}; 

,并删除之前的调用onMetaData功能

+0

这做到了!谢谢。 – cbeezy 2011-05-25 18:27:29

0

您没有发布错误,但我会假设错误是由于您对视频的编码造成的。
元数据在视频

相关问题