2011-05-31 112 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