2

今日の私の質問は、Flash AS3 ビデオ バッファリングに関するものです。(ストリーミングまたはプログレッシブ) ビデオがいつバッファリングされているかを検出できるようにしたいので、ユーザーにもう少し待つように知らせるある種のアニメーションを表示できます。

代替テキスト

現在、ビデオが起動し、フレーム 1 を 3 ~ 4 秒間保持してから再生します。ビデオが一時停止または壊れているような印象を与えます:(

アップデート

iandismeのおかげで、私は今、正しい方向に向かっていると信じています。livedocs の NetStatusEvent。作業中の重要なステータスは"NetStream.Buffer.Empty"、アニメーションまたはトレース ステートメントをトリガーするかどうかを確認するコードを追加したことです。まだ運はありませんが、バッファがいっぱいになるとコードがトリガーされます:/おそらく私のビデオは常にその間のどこかにBuffer.Emptyあり、Buffer.Fullそのため、ケースをテストするときにコードをトリガーしませんBuffer.Emptyか?

現在のコード

public function netStatusHandler(event:NetStatusEvent):void 
  {
     // handles net status events
     switch (event.info.code) 

        {
            case "NetStream.Buffer.Empty":
                  trace("☼☼☼ Buffering!"); //<- never traces
                  addChild(bufferLoop);    //<- doesn't execute
            break;

            case "NetStream.Buffer.Full":
                  trace("☼☼☼ FULL!");      //<- trace works here
                  removeChild(bufferLoop); //<- so does any other code
            break;

            case "NetStream.Buffer.Flush":
                  trace("☼☼☼ FLUSH!");
                  //Not sure if this is important
            break
        }
    }
4

3 に答える 3

2

カスタムロールプレーヤーを使用していますか? FLVPlayback クラスにバッファリング イベントが組み込まれていることは知っています。

FLVPlayback を使用していない場合、NetStream オブジェクトは、バッファリングを開始または停止するたびに、 info オブジェクトを含む netStatusEvent を起動します。そのイベントをキャプチャして、アニメーションを再生/非表示にできるはずです。

于 2009-12-07T22:30:23.640 に答える
1

NetStream の bufferTime と bufferLength を 100 ミリ秒ごとにチェックして、それに基づいて決定することができます。NetStream の bufferTime は、再生前にバッファする必要がある時間を示し、bufferLength は、バッファ内に既にある時間を示します。

function onTimerEvent(e:TimerEvent):void {
  var percent:Number = Math.round(ns.bufferLength/ns.bufferTime100 * 100);
  if (percent >= 95 && contains(bufferLoop)) {
    removeChild(bufferLoop);
  }
  if (percent < 25 && !contains(bufferLoop)) {
    addChild(bufferLoop);
  }
}

于 2009-12-08T05:50:13.950 に答える
0

私はこれに出くわし、共有したいと思いました。上記のレオンは、「NetStream.Buffer.Empty」は何もトレースしないと述べています。これは、FLV をローカル マシンから読み込んでいるため、バッファが空にならないためです。実際にオンラインでストリーミングしているときに機能します。

私がしたことは、映画の再生が開始されたときに表示される「待機バッファ」として必要なクリップを設定し、このコードを使用してそれを消えて戻ってくるようにすることだけでした。魅力のように働きました。

var vidplaying:Boolean = false;

playmovie_btn.addEventListener(MouseEvent.CLICK, playmovie);

function playmovie(event:MouseEvent):void{

    vidplaying = true;
    wait_mc.visible = true;
        (yoru flv and netstream stuff) ect
}

ns.addEventListener(NetStatusEvent.NET_STATUS, netStatus); 

    function netStatus(e:NetStatusEvent) {

        if(vidplaying == true && e.info.code == "NetStream.Buffer.Empty"){
            wait_mc.visible = true;
        }
        if(e.info.code == "NetStream.Buffer.Full"){
            wait_mc.visible = false;
        }
}// netStatus
于 2010-05-26T02:15:11.707 に答える