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では、このバグを完全に回避するのは難しいかもしれない。
何か対策知ってる人がいたら教えてください...。