Flash 用AS3显示FLV的持续时间

Flash 用AS3显示FLV的持续时间,flash,actionscript-3,flv,Flash,Actionscript 3,Flv,我正在尝试用AS3显示FLV电影的持续时间。我一直收到一个元数据错误。代码如下。谢谢 stop(); // Video setup -----------------------------------------------/ var nc:NetConnection = new NetConnection(); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.addEventListener(NetStatu

我正在尝试用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;
};
stop();
//视频设置-----------------------------------------------/
var nc:NetConnection=newnetconnection();
nc.connect(空);
var ns:NetStream=新NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS,onStatus);
ns.client=this;
视频.附件流(ns);
函数onStatus(e:Object):void
{
如果(e.info.code==“NetStream.Play.Start”||
e、 info.code==“NetStream.Buffer.Full”)empty.visible=false;
else如果(e.info.code==“NetStream.Buffer.Empty”)Empty.visible=true;
如果(e.info.code==“NetStream.Play.Stop”)ns.seek(0);
}
//获取持续时间---------------------------------------------/
var-dur:数字;
var持续时间:数字;
元数据函数(meta:Object)
{
dur=meta.duration;
}
//播放视频-------------------------------------------/
ns.播放(“http://adobe.edgeboss.net/download/adobe/adobetv/flasher_magazine/issue_1/issue1.mp4");
//进度条---------------------------------------------/
addEventListener(Event.ENTER_FRAME,循环);
thebar.progress.scaleX=0;
函数循环(e:事件):无效
{
thebar.loaded.scaleX=ns.bytesloadded/ns.bytesttotal;
if(dur)
{
thebar.progress.scaleX=ns.time/dur;
}
}
thebar.loaded.addEventListener(MouseEvent.CLICK,seekTo);
thebar.loaded.buttonMode=true;
thebar.progress.mouseEnabled=false;
函数seekTo(e:事件):无效
{
ns.seek((thebar.track.mouseX/thebar.track.width)*dur);
}
//播放/暂停控制---------------------------------------------/
playPause.buttonMode=true;
playPause.addEventListener(MouseEvent.CLICK,playPauseClick);
playPause.addEventListener(MouseEvent.ROLL_OVER,playPauseOver);
playPause.addEventListener(MouseEvent.ROLL_OUT,playPauseOut);
函数playPauseClick(e:MouseeEvent):无效
{
变量c:MovieClip=播放暂停;
如果(c.currentFrame==10)
{
c、 gotoAndStop(30);
暂停();
}
否则如果(c.currentFrame==30)
{
c、 gotoAndStop(10);
ns.resume();
}
}
函数playPauseOver(e:MouseEvent):无效
{
变量c:MovieClip=播放暂停;
如果(c.currentFrame==1)
{
c、 gotoAndStop(10);
}
否则如果(c.currentFrame==20)
{
c、 gotoAndStop(30);
}
}
函数playPauseOut(e:MouseeEvent):无效
{
变量c:MovieClip=播放暂停;
如果(c.currentFrame==10)
{
c、 gotoAndStop(1);
}
否则如果(c.currentFrame==30)
{
c、 gotoAndStop(20);
}
}
//计时器-----------------------------------------------/
var时间间隔:数字=设置间隔(检查时间,500纳秒);
函数检查时间(myVideo\n:NetStream){
var ns_seconds:Number=myVideo_ns.time;
变量分钟数:数字=数学地板(ns_秒/60);
var秒=数学地板(ns_秒%60)

如果(秒您没有发布错误,但我将假定错误是由于您对视频编码造成的。

元数据必须编码在视频的标题中

您已将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;
};
元数据上的函数(元数据:对象){ 持续时间=元数据。持续时间; var dur_秒:数字=持续时间; var minutes\u dspl=数学地板(持续时间秒/60); var seconds\u dspl=数学地板(dur_seconds%60); 如果(分钟)