- NetStreamのonStatusイベント

as2でもas3でも、
flvの再生で、NetStreamのonStatusイベントを、
監視して、プログラムすると、
Play.EmptyとかPlay.Fullとかいちいち律儀に
発生して、やりずらい。
アニメーションイベントを意識しないで
作る人は、そんなことはないかもしれない。

EmptyとかFullは、バッファ中かどうかを知りたいときとかに使うけど、
実際バッファ中かどうかというよりも再生が、
止まっているか正常に近いレベルで進んでいるかを知りたい。
ユーザーが気にならない程度のバッファなどはどうでもいいんだが、
Play.Buffer、Play.Emptyイベントはいちいちうるさく相手にしにくい。

private var playing:Boolean;

private var checkPlayheadProgressIntervalID:Number;

private var checkPlayheadProgressIntervalTime:Number=.5*1000;

private var prevPlayheadTime:Number;

private function checkPlayheadProgress():void{
  if(playing){
     if(ns.time==prevPlayheadTime){
        //止まっている。
        //dispatchEvent(new FLVEvent(*****));
     }else{
        再生されている。
     }
 }

 prevPlayheadTime=ns.time;
}

こんな感じで、インターバル前のplayHeadの時間を保持し、
インターバルで直前のplayHeadをチェックするし、
再生が正常なレベルかどうか確認する方が、
onStatusを調べるよりもずっと楽な気がする。

あと例えば、
time outエラーのような画面も強制的に表示できるかもしれないし、
ユーザーの回線環境なども簡易的に判断できるといえばできるかもしれないし、
イベント発生を自分で意図的に操作しやすい気がする。

あとonStatusのエラー系のイベントも
結局ユーザーが知りたいのはエラー内容じゃなくて、
エラーが発生したかどうかだと思うから、

エラー系のイベントはまとめて、
private function onError(errorMessage:String){
    dispatchEvent(new ErrorEvent(ErrorEvent.Error , false ,fasle , errorMessage));
}

としておくと楽。

ついでにNetStatusEventをすべてブロードキャストする

private function onNetStatusEvent(evt:NetStatusEvent):void{
    dispatchEvent(evt);
}

も実装すると安心。

でも、調子のって、あんまりクラス複雑にしすぎちゃうと、
僕の力では、FLVPlaybackが使いづらいのと同じように使いづらくなった。

細かい機能部分は、こんな感じのクラスに委譲するクラスを、
プロジェクトによって作った方がいいと思った。


> セントリーノ氏の優雅な週末


FLV約180個。。

Trackback : 0 : NetStreamのonStatusイベント

http://www.onmyownlife.com/mt/mt-tb.cgi/34

Comment