AS3にて全画面で動画を再生させる際の注意点

Flashでフルスクリーンで動画を表示したい場合、
動画の再生に、FLVPlaybackを使っているかVideoを使っているか、によって挙動が変わってくるようです。

■まず、FLVPlaybackを使っている場合、

ステージに表示している動画は問答無用で画面にフィットしたフルスクリーンで表示されます。
一応、stageのプロパティである、stageFocusRectを使うことで表示する位置を調整できたりしますが、
動画のサイズは強制的にモニタのサイズになってしまうようなので、まず使い物にならないです。

で、画面いっぱいに動画が表示されてしまうと、その他のコンテンツは動画の下に隠れてしまいます。
なので、自前で再生バーなどをつけていても見えなくなってしまいます。

というわけで、この場合は標準のスキンを使用する必要があります。
FLVPlaybackのプロパティでskinがあるので、それを使って、

video.skin = "MinimaFlatCustomColorPlayBackSeekCounterVolMuteFull.swf";

などと指定します。
すると、フルスクリーンになっても、その動画の下にコントローラーがくっつく形となります。

この拡大は、stagescaleModeプロパティは関係なく、
また、FLVPlaybackscaleModeプロパティも関係ありません。
(FLVPlaybackscaleModeプロパティは、動画枠内で実際の動画を拡大縮小するか、を決めるもの)

■次に、Videoの場合。

こちらの場合は、動画部分はその他の部分と同じように拡大縮小されます。
拡大するかどうかは、stagescaleModeのプロパティで指定した仕様に準じます。

この場合、コントローラーは標準のものは使用できないので、自前で用意する必要があります。

■まとめ

単純に動画だけを大きくしたいのであれば、FLVPlaybackを使ったほうが楽だと思われます。
ですが、コントローラーをカスタマイズしたい、など、自由度が高いものは、Videoになります。

今回使用した検証コードは以下です。

FLVPlayback

var video:FLVPlayback = new FLVPlayback();
video.skin = "MinimaFlatCustomColorPlayBackSeekCounterVolMuteFull.swf";
video.width = 480;
video.height = 270;
this.addChild(video);

Video

private var _connect :NetConnection;
private function setVideo():void{
  _connect = new NetConnection();
  _connect.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
  _connect.connect(null);
}
private function netStatusHandler(e:NetStatusEvent):void {
  var stream:NetStream = new NetStream(_connect);
  var video:Video = new Video();
  video.width = 480;
  video.height = 270;
  video.attachNetStream(stream);
  stream.play("sample.f4v");
  this.addChild(video);
}
   このエントリーをはてなブックマークに追加