我试图用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;
};
答案 0 :(得分:2)
您已将netStream客户端指定为 this ,因此您还需要将onMetaData方法添加到 this 。
将//非工作时间代码更改为
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函数
答案 1 :(得分:0)
您没有发布错误,但我认为错误是由于您对视频的编码造成的 元数据必须在视频的标题中进行编码