1つの動画再生がスクリプトから操作可能となったので、複数切り替えに挑戦。
最終的には複数を差し替えて使えるようにしたかったので、調べていたら簡単に切り替える方法がありました。
最初はレイヤを分けて、フレームごとに動画をおいて、フレームを変えることで動画を切り替えていたのですが、もっと簡単な方法があります。
●FLHPlaybackの複数の動画登録
このコンポーネントは、一種のプレーヤですが、保持できる動画の数は1つだけではありません。リファレンスを見ていてindexというのがあるのに気が付き、複数プレーヤを切り替えて使えることに気づきました。
sourceプロパティで動画のファイルパスやURLを設定できますが、この操作は可変長の配列に動画を登録しているような動作をしています。デフォルトではこの配列のインデックスは”0″となってます。
なので、外部からインデックスを指定して、パスを指定してやると、インデックスごとに動画を保持してくれます。瞬時に切り替わるので、実態そのものも全部ではないにしろ、ある程度メモリ領域にロードされているでしょう。
再生時にそのインデックスを指定してやると、指定されたインデックスの動画に切り替わりそれが操作できるようになります。
その切り替わり操作に関係するのが、前回記述しておいた
・activeVideoPlayerIndex:アクティブな動画ファイルのインデックス
・visibleVideoPlayerIndex:表示対象の動画ファイルのインデックス
です。
使い方は最初に
__ mov1.activeVideoPlayerIndex = 1;
のようにインデックスを指定した後に、
__ mov1.source=”ファイルパス”;
で動画ファイルのロケーションを指定します。このようにインデックスを変えながら sourceプロパティで順番に動画ファイルを登録していきます。
具体的には次のようにします(この時点よりmov1の”1″に意味はありませんが、前記事から統一するためにそのまま使用します)。2つの動画を登録する例です。
// 1番目の動画 mov1.activeVideoPlayerIndex = 0; mov1.source = "movClip1.mp4"; // 2番目の動画 mov1.activeVideoPlayerIndex = 1; mov1.source = "movClip2.mp4";
なお、ファイルパスはFlasyプレーヤの実行ファイルがある場所からの相対パス、または絶対パスを指定します。上の例では、exeファイルがあるところに動画ファイルがあることになります。
そのあと、指定のインデックスの動画を操作する場合は次のようにします。
// インデックス1(2番目)の動画を再生する mov1.activeVideoPlayerIndex = 1; mov1.visibleVideoPlayerIndex = 1; mov1.play();
他の動画に切り替えるときは、両プロパティ値を変えて同様に再生します。
注意が必要なのは、プレーヤが複数あって、そのうちの一つが表示されているという形になるので、メモリをそれなりに消費しているであろうということと、stop()で止めておかないと、表示されていないだけで、他のインデックスの動画も再生し続けるということです。
なので、切り替える前に停止させるか、再生が終わるまで待ってから切り替えたほうがいいでしょう。ループ再生に設定している際は停止、少なくとも一時停止にしておいたほうが良いでしょう。