FlashPlayer9 update3の新しいNetStatusEventのバグにはまる


2007/10/22リリース以降のFlashPlayerでは、NetStatusEventに2つのタイプが追加された.
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/NetStatusEvent.html

  • "NetStream.Play.FileStructureInvalid" 適切な構造のFLVではなかったとき
  • "NetStream.Play.NoSupportedTrackFound" サポート対象の映像/音楽/データがファイル内に存在しなかったとき


で、それ自体は喜ばしいことだが、これの"NetStream.Play.FileStructureInvalid"のほうで、予期せぬFlashPlayer側のバグにはまった。

NetStatusEventを監視し、上記のエラーイベントがきたらStreamとConnectionをcloseする処理を書いていたのだが、以前のFlashPlayer9のマイナーバージョンでは正常に動いていたものが、最新のバージョン(9,0,115,0)をインストールすると、closeの呼び出し時に、Flash全体が固まるようになってしまった。

適切な構造のFLVではなかったときにStreamを破棄すると不安定になるバグのようだ。

今回のFileStructureInvalidが出る原因は、サーバ側でFLVが存在しなかったときにエラー文字列を返していたためで、これを0バイトで返すことで、"NetStream.Play.StreamNotFound"扱いになるため、このバグを回避できたが、予期せぬFLVを返してくる可能性のある外部のサーバのFLVへのアクセスには注意が必要。

しかしながらHTTPStatusもとれないFlashでは、このバグを完全に回避するのは難しいかもしれない。
何か対策知ってる人がいたら教えてください...。