0

私は、マルチ FLV プリローダーを開発しており、最大 10 個のビデオをロードして連続して再生しています。

10 個のオブジェクトの配列で videoplay オブジェクトを作成します。

これらの 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; }
          }
4

1 に答える 1

0

ラッパーを使用して、次のvcようにインスタンスを取得できます。

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

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

コードを考えると、オブジェクトを悪用してデータを格納するのではなく、厳密に型指定されたクラス インスタンスを使用することを強くお勧めします ( vp, nc)。また、 の代わりに Vector を使用するclip_arrayと、保守性が向上し、間違いを犯す可能性が低くなります。

于 2012-06-13T12:47:06.277 に答える