カテゴリー
Flash

ActionScript2.0 FLVPlaybackコンポーネントの ready は環境依存するかも

.flv FlashVideoファイルを再生する時…

.flv FlashVideoファイルを再生する時に便利なのが FLVPlaybackコンポーネントです。

ActionScript2.0用とActionScript3.0用があります
だいたい機能は同じですが、ActionScript2.0用にはちょっとしたクセ?(仕様)があります

FLVファイルの再生準備が出来たかどうかを知る方法として
FLVPlayback.ready
「FLV ファイルがロードされ表示準備ができたときに送出されます。」

というイベントがあります。

ヘルプの使い方によると

var listenerObject:Object = new Object();
listenerObject.ready = function(eventObject:Object):Void {
// ここにイベント処理コードを挿入する
};
my_FLVplybk.addEventListener(“ready”, listenerObject);

とあります
FLVのロード処理が終わったよ〜 と教えてくれるのだから、便利です

しかし!

このイベントはWindowsのIEやFirefoxなど、複数の環境で上手く動作しないことがあります
Playerのバージョン、書き出しバージョンなど、原因の特定は出来ていませんが

・ブラウザのキャッシュに悪影響される?
・実際にはロードが完了していないのにイベントが発生する場合がある?
ようです

というわけで、readyを使わずに同様の処理を自前で作ってみましょう
FLVPlayback.progress こっちのイベントは信用できそうです

var listenerObject:Object = new Object();
listenerObject.progress = function(eventObject:Object):Void{
if(eventObject.target.bytesTotal != 0 && eventObject.target.bytesTotal // ここにイベント処理コードを挿入する
eventObject.target.play();
};
my_FLVPlybk.addEventListener(“progress”, listenerObject);

このように書くことで回避可能です。

ActionScript3.0用では直っていると思いますが、未検証です

ちなみにココ
if(eventObject.target.bytesTotal != 0
Flashではいろいろな場面で有効です。
非同期イベントなので、こういう処理が抜けると 大きなバグに繋がりやすいです

(kani君ありがとう)