2012-06-09 30 views
0

我正在開發一個多flv預加載器,加載多達10個視頻並將它們彈回 。如何引用onMetaData屬於的內容

我創建了一個帶有10個對象數組的視頻播放對象。

這些10個對象分別具有NetStream和一個調用onMetaData ..

我的問題是;當調用onMetaData叫,我怎麼能確定哪個對象 它是參照..

  function vidPlayerStatus    (e):void 
      { 
      //trace(e.info.code); 
      } 


      function vidPlayerAsyncErrorHandler (event:AsyncErrorEvent):void 
      { 
      } 


      function vidPlayerMetaData   (item:Object):void 
      { 
     // which object ?? 
      } 




      function vidPlayerInit    ():Object 
      { 
      var i; 
      var vp:Object=new Object(); 
      var clip_array:Array=new Array(); 
      vp["nc"]=new NetConnection(); 
      vp["nc"].addEventListener(NetStatusEvent.NET_STATUS,vidPlayerStatus); 
      vp["nc"].connect(null); 
      for(i=0;i<10;i++) 
      { 
      var vc:Object=new Object(); 
      vc["vidi"]=new Video(); 
      vc["ns"]=new NetStream(vp["nc"]); 
      vc["ns"].addEventListener(AsyncErrorEvent.ASYNC_ERROR, vidPlayerAsyncErrorHandler); 
      vc["ns"].addEventListener(NetStatusEvent.NET_STATUS, vidPlayerStatus); 
      vc["ns"].client={}; 
      vc["ns"].client.onMetaData=vidPlayerMetaData; 
      vc["ns"].bufferTime=0; 
      vc["stage"]=0; 
      vc["is_paused"]=0; 
      vc["vidi"].attachNetStream(vc["ns"]); 
      clip_array.push(vc); 
      } 
      vp["clip_pf"]=0; 
      vp["clip_array"]=clip_array; 
      return vp; 
      } 




      function vidPlayerLoad    (str:String):int 
      { 
      var i; 

      for(i=0;i<10;i++) 
      { 
      if(vidPlayer["clip_array"][i].stage==0) break; 
      } 
      if(i==10) { return -1; } 
      vidPlayer["clip_array"][i]["vidi"].width=320; 
      vidPlayer["clip_array"][i]["vidi"].height=240; 
      stage.addChild(vidPlayer["clip_array"][i]["vidi"]); 
      vidPlayer["clip_array"][i]["ns"].play(str); 
      vidPlayer["clip_array"][i]["ns"].pause(); 
      vidPlayer["clip_array"][i]["is_paused"]=1; 
      vidPlayer["clip_array"][i]["stage"]=10; 
      vidPlayer["clip_array"][i]["vidi"].y=(i*240); 
      return i; 
      } 



      function vidPlayerYield    ():void 
      { 
      var i,j; 
      vidPlayer["clip_pf"]++; 
      vidPlayer["clip_pf"]%=10; 
      i=vidPlayer["clip_pf"]; 
      if(vidPlayer["clip_array"][i].stage==0) return; 
      //trace("vp["+i+"] bytesloaded="+vidPlayer["clip_array"][i]["ns"].bytesLoaded+" bytestot="+vidPlayer["clip_array"][i]["ns"].bytesTotal+" tim="+Math.round(vidPlayer["clip_array"][i]["ns"].time)+" fps="+Math.round(vidPlayer["clip_array"][i]["ns"].currentFPS)+" buflen"+Math.round(vidPlayer["clip_array"][i]["ns"].bufferLength)); 
      } 



      function vidPlayerPause    (index,state):void 
      { 
      if(state==0) { vidPlayer["clip_array"][index]["ns"].resume(); vidPlayer["clip_array"][index]["is_paused"]=0; } 
      else   { vidPlayer["clip_array"][index]["ns"].pause();vidPlayer["clip_array"][index]["is_paused"]=1; } 
      } 

回答

1

您可以使用一個包裝來獲得vc情況是這樣的:

function vidPlayerMetaData(vc:Object, metaData:Object) { ... } 

vc["ns"].client.onMetaData = function(metaData:Object) { vidPlayerMetaData(vc, metaData); }; 

考慮到你的代碼,我真的推薦使用強類型的類實例,而不是濫用對象來存儲數據(vp, nc)。此外,一個矢量而不是clip_array將增加可維護性並減少犯錯的機會。