2012-06-09 5 views
0

나는 최대 10 개의 비디오를 로딩하고 그들간에 을 연속적으로 재생하면서 다중 flv 프리 로더를 개발 중입니다.onMetaData가 속한 것을 참조하는 방법

나는 10 개의 객체 배열로 비디오 플레이 객체를 만듭니다.

각각 NetStream을하고 onMetaData에있는이 10 개체 ..

내 질문은, ,

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

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

이 코드를 고려 : 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 인스턴스를 얻을 수있는 래퍼를 사용할 수 있습니다 ..이 참조에 객체 결정할 수 있습니다 데이터를 저장하기 위해 객체를 잘못 사용하는 대신 강하게 유형화 된 클래스 인스턴스를 사용하는 것이 좋습니다 (vp, nc). 또한 clip_array 대신 벡터를 사용하면 유지 관리가 향상되고 실수 할 가능성이 줄어 듭니다.