2011-05-31 130 views
0

我有一个类加载和播放FLV视频文件。我的问题是,我如何在主代码中获得flv的持续时间? .. 这是我的视频类:FLV持续时间从类

package src {  
    import flash.display.Sprite;  
    import flash.media.Video;  
    import flash.net.NetConnection;  
    import flash.net.NetStream;  
    import flash.events.Event; 
    import flash.events.MouseEvent; 

     public class vplayer extends Sprite{     
      public var vid:Video = new Video(1920,1080); 
      private var nc:NetConnection = new NetConnection(); 
      public var ns:NetStream; 
      public var listener:Object = new Object(); 

      public function vplayer():void{    
       addChild(vid); 
       nc.connect(null); 
       ns = new NetStream(nc); 
       vid.attachNetStream(ns); 
       listener.onMetaData = metaDataHandler; 
       ns.client = listener;   
       //customClient.onCuePoint = cuePointHandler; 
      } 
      public var time00:Number = 0; 
      public function playVideo00():void{ 
       ns.play("image00/mov00.flv"); 
      } 
      public function stopVideo00():void{ 
       ns.close(); 
      } 
      /*public function cuePointHandler(infoObject:Object):void { 
       trace("cuePoint"); 
      }*/ 
      public function metaDataHandler(infoObject:Object):void { 
       trace (" Time: " + infoObject["duration"]); 
      } 
     } 
} 

..和我的主类,我有:

 Veed = new vplayer(); 
     addChild(Veed); 
     Veed.playVideo00(); 

运行程序后,我有“时间:6.76”,在输出窗口,它起着FLV罚款,这是正确的,但我想
var myTD:int = Veed.getDuration();
在我的主类获得持续时间。这看起来很简单,但我无法完成!任何帮助?

回答

1

在顶部加入私人VAR:

private var _duration:Number = 0; 

更新此像这样:

public function metaDataHandler(infoObject:Object):void 
{ 
    _duration = infoObject["duration"]; 
} 

现在您可以创建持续时间吸气。

public function get duration():Number 
{ 
    return _duration; 
} 

现在,你可以做:

trace(Veed.duration); 

它的请求后,元数据将被检索甚至毫秒,如果你试图获取元数据后,立即取时间的意思,它将不会加载。试试这个作为一个例子:

addEventListener(Event.ENTER_FRAME, _wait); 
function _wait(e:Event):void 
{ 
    if(Veed.duration != 0) 
    { 
     trace(Veed.duration); 
     removeEventListener(Event.ENTER_FRAME, _wait); 
    } 
} 
+0

我做到了这一点,我张贴这个......它显示0 .. !!! ..我不知道为什么.. – 2011-05-31 06:54:43

+1

我认为,因为metaDataHandler是异步调用(不是立即)。这是因为需要首先检索元数据。尝试添加一个计时器,看看它是否有效?我会告诉你一个例子。 – Marty 2011-05-31 06:56:54

+0

是的,它工作.. :)),但有没有更好的方式来实现FLV文件的这种重要功能?我很幸运,因为我已经有一个'addEventListener(Event.ENTER_FRAME,mainLoop);'在我的代码中..' – 2011-05-31 07:11:48