用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;
};
    

解决方法

您已将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函数     ,您没有发布该错误,但我将认为该错误是由于您对视频进行了编码。 元数据必须编码在视频的标题中