0

ストリーミングしている 3 つの flv ビデオがあります。まずはイントロです。そして2本目はイントロ終了直後のイントロ直後に演奏。そして、2番目のビデオがループしています。すべてが順調に見えました。しかし、swf をロードすると、2 番目のビデオから始まることがあります。理由はありますか?

import flash.events.MouseEvent
var nc:NetConnection = new NetConnection();
nc.connect(null);

var ns:NetStream = new NetStream(nc);
loader.vid.Video_1.attachNetStream(ns);


var listener:Object = new Object();
listener.onMetaData = function(evt:Object):void {};
ns.client = listener;

ns.play("video_1.flv");

ns.addEventListener(NetStatusEvent.NET_STATUS, NCListener);
function NCListener(e:NetStatusEvent){
if (e.info.code == "NetStream.Buffer.Empty") {
ns.play("video_2.flv");
}
};

loader.button_01.addEventListener(MouseEvent.CLICK, play_video_01);

loader.button_01.addEventListener(MouseEvent.ROLL_OVER, play_effect_01);

function play_video_01 (event:Event):void{

    ns.play("video_3.flv");
    loader.button_01_mc.gotoAndPlay (21);

}
function play_effect_01 (event:Event):void{

    loader.button_01_mc.gotoAndPlay (2);
}
4

1 に答える 1

2

コードでは、2番目のビデオの再生はメッセージによってトリガーされますNetStream.Buffer.Empty。そのメッセージは、ビデオの再生が終了したときだけでなく、いくつかの理由でディスパッチされる可能性があります。たとえば、ストリーミング(私はあなたがやっていないことを知っています)のNetStream.Buffer.Emptyとき、ネットワークの問題があるときにディスパッチされる可能性があります。これは間違いなく問題の原因ですが、バッファが空のメッセージがすぐにディスパッチされることがある理由は明らかではありません。

私が最初にすることNetStatusEventは、ディスパッチされているすべてのメッセージをトレースするようにリスナーを変更することです。このようにして、この問題が発生したときに発生する一連のイベントを確認できます。

次に、別のメッセージを使用して2番目のビデオの再生をトリガーしてみてください。100%確信はありませんが、メッセージNetStream.Play.Stopはあなたが望むものだと思います(これは、ビデオの終わりに達したとき、およびプログラムで再生を停止したときに送信されます)。から受け取るメッセージの完全なリストNetStatusEventここにあります。

これらの提案の両方を組み込むと、NetStatusEventハンドラーは次のようになります。

function NCListener(e:NetStatusEvent)
{
    var code:String = e.info.code;
    trace("code: ", code);
    if (code == "NetStream.Record.Stop"
        ns.play("video_2.flv");
}

最後に、他のイベントリスナーをに追加することもできますNetStream。それはディスパッチしますIOErrorEventそしてAsyncErrorEvent...おそらくあなたは問題が起こったときにこれらの1つを手に入れています。

于 2013-02-01T03:12:56.503 に答える