ストリーミングに対応していないサーバーにおいて、長時間のムービーの「擬似」ストリーミングを可能にするFLV。FLVは、表示されるswfファイルのフレームレートやタイムラインとは無関係に再生される。そのため時間軸でFLVとムービークリップの同期をとろうとしてもズレが生じる。
例えば15分のFLVに、読み込む側のムービークリップで字幕やキャプションを付与しようとした場合、swf側の再生時間とFLVの再生時間を比較しながらタイムライン上でオブジェクトを配置しても、ストリーミング時のバッファタイムや、再生するPCのスペックによる再生の「もたつき」などの理由からズレが生じるのだ。
また、ムービーを再生する上で、単にスタート→エンドではなく、巻き戻しやチャプターのようなある決まったポジションからの頭だしなどを行おうとした場合にもこの方法では無理がある。
今回制作したのは、FLVの再生時に発生するイベントハンドらの中のPlayheadTimeとcuePointを利用した、フレキシブルに再生位置を変えられ、なおかつ再生するswfファイルと完全に同期したムービープレゼンテーションスライドだ。
まずはお決まり。コンポーネントライブラリからFLVplaybackを配置。
次に同期させたいスライドのムービークリップを作成し、フレームラベルを使用して各スライドを作成していく。
さらに、デバッグもかねて、FLV再生時に発生するPlayheadTimeを取得するためのダイナミックテキストフィールドを用意し、インスタンス名をm_countと設定する。このダイナミックテキストをMC化する。
1フレーム目にm_countにPlayheadTimeを代入するよう設定し、2フレーム目にm_countに応じたムービークリップの制御文を記述する。3フレーム目ににm_countの取得フレームに戻るように設定するれば準備完了だ。
この状態でパブリッシュプレビューをすると、m_countに再生時間がリアルタイムに表示される。さらにm_countの数値に応じてムービークリップの表示位置が決定する。FLVの再生時間はシークバーなどで再生位置を変えてもリアルタイムに取得されるので、表示しているムービークリップとの関係はずれることはない。
ヒントとして、PlayheadTimeは0からはじまり、1.02、2.46、3、4.86・・・のように整数から小数点第三位までのバリエーションで不規則に表示される。このため、条件を設定するスクリプトもm_count =>0.000 && m_count=<10.000のように、範囲を指定しつつ小数点第三位までを指定した表示にしなければならない。そうしないと、1から2までの間の1.001から1.999の判定がまるまる抜けてしまうのだ。
トップページに戻る