AS3のNetStatusEventについて考えてみた

こんばんわ。iyamaです。

今日もActionScript。 NetConnectionとNetStreamを使用したときに発生する NetStatusEventについて考えてみました。

今日、以下のブログ記事を読みまして、 ちょっと私の思ったことを書こう思います。

[AS]FlashPlayer11で、FMS接続でのNetStatusEvent.NET_STATUSをリスナーしてるときのNetStreamからのdispatchの挙動が変わったっぽい。

ほほー。 FlashPlayer11だとNetStream.Buffer.Emptyが出て、対処方法としては、bufferTimeの時間を調整するとのこと。 bufferTimeは使いますね。大事です。 ただ、FlashPlayer11だと再生開始時にNetStream.Buffer.Emptyが出やすいというのは、初耳です。

FlashPlayer9とかで普段Debugすることが多いんですけど、 再生開始時にBuffer.Emptyはあんまりでないかも。(この辺はうろ覚え) でも、突き詰めて考えていくと、そもそもBuffer.Emptyが出ていない方がおかしいんじゃないかと思うのです。

再生開始時はバッファを持っていないのだから、Emptyが出ても自然な気がします。 Play.Resetとか出すよりもよっぽど理解できる気がする。 で、さらに気になったのが、Buffer.Emptyで動画の終了のタイミングを取っているっていうところ。

Buffer.Emptyが出たら終了というのは、危ないです。 Buffer.Emptyはその文字のとおり、Buffer量(秒)分がEmptyなんです。

これだけでは、動画が終了したか、本当にネットワーク環境が貧弱でBufferが確保できていないかを判別することはできません。

動画の終了はVODの場合、ファイルのdurationと現在時間(NetStream.time)を比較して判別します。 NetStatusEventだけで判断すると、Bufferに溜まっている分が再生されません。

以上です。

今回ははいつもと違って、コードなしでした。 そのうち動画の終了を判別するサンプルスクリプトでも書きます。

Comments