Flash Player の新しいビデオ再生機能である Stage Video についての情報です。
Stage Video は、Flash Player 10.2 ベータもしくは Flash Player "Square" から利用できます。また、いくつかのデモが Adobe Labs に紹介されています。(Flash Player 10.2 Beta: Stage Video)
Stage Video のしくみ
Stage Video では、従来のビデオ再生と比較して、CPU の使用率、必要なメモリの量が、共に削減されます。これは、ハードウェアの機能を利用しているためです。
従来のビデオ再生機能 (Video クラスのインスタンスを使用) は、表示リストの一部としてステージ上に描画されます。表示リストを描画するのは CPU の役割なので、ビデオ画像と他の表示リストの要素 (ムービークリップやビットマップなど) の合成は、CPU が行います。
これに対して、Stage Video では、表示リストのステージとは別の、"Stage Video 専用ステージ" にビデオが描画されます。そして、2 つのステージの合成は GPU が行います。CPU は、ビデオ以外の要素を描画するだけでよくなるため、負担が減るというわけです。
ビデオの描画プロセスは、以下の 2 つのステップに分けることができます。
- ビデオデータのデコード
- 表示用の加工 (位置、大きさなど) と他の表示データとの合成
上で書いたように、ステップ 2 は、従来のビデオでは CPU、Stage Video では GPU で行われます。ステップ 1 は、コーデックに依存します。H.264 であれば、デコードに GPU が使われますが、それ以外では CPU が使われます。
つまり、以下の 4 つの組み合わせがあるわけです。
1.従来のビデオ + On2, Sorenson : デコード、合成、共に CPU 2.従来のビデオ + H.264 : デコードは GPU、合成は CPU 3.StageVideo + On2, Sorenson : デコードは CPU、合成は GPU 4.StageVideo + H.264 : デコード、合成、共に GPU
H.264 を使う時は、Stage Video を利用すると、CPU - GPU 間のデータ転送が発生しないという利点もあります。 (2 のケースでは、GPU でデコードしたデータを CPU に送る必要がある)
特に、CPU やバッテリーのスペックが低いデバイスでは、4 のパターンの効果が高そうです。
制限事項
Stage Video を利用する場合、制限事項があります。以下はそのリストです。ちょっと多いです。
- ビデオ表示領域は矩形のみ。回転は 90 度単位で可能
- ビデオ以外の要素はビデオの上に描画される。下には描画できない
- アルファ、ブレンド、フィルター、マスク、スケール 9 は利用できない
- マトリックスによる変換 (色、3D) ができない場合がある
- ビデオデータを BitmapData にコピーできない
- ビデオデータを SWF ファイル内に埋め込めない
- 色空間がハードウェアの仕様に依存する
- 同時に利用できるビデオの数がハードウェアの仕様により制限される (デバイスでは、通常 1 つ)
- ブラウザーによっては、wmode="direct" を指定しないと、Stage Video が利用できない
wmode="direct" は、Windows 上では Direct3D、Mac と Linux 上では OpenGL を使うという指定になります。ビデオ再生では、この状態が最速です。
Safari 4 や IE 9 では、GPU を利用するための API が公開されています。そのため、これらのブラウザーでは、wmode の指定に関わらず、Flash Player から Stage Video を利用することが可能です。しかし、他のブラウザーの場合、direct 以外の wmode では Stage Video が利用できない可能性が高くなります。
ところで、wmode="direct" を指定すると、他の HTML コンテンツを SWF 上に重ねて表示できなくなります。これも、実質的に、Stage Video を使用する時の制限となります。
関連する新機能
Flash Player 10.2 ベータでは、フルスクリーン表示に関連する新機能が 2 つ追加されています。
- 複数モニター環境でのフルスクリーンモードのサポート:
サブディスプレイのみフルスクリーン表示で再生といった使い方が可能 - フルスクリーン機能の判別 :
Stage に追加された allowFullScree 属性により、表示されている環境がフルスクリーン表示を許可しているかを判別できる