StageVideo を使用したハードウェアアクセラレーションについて

ビデオの拡大/縮小、カラー変換、転送などのハードウェアアクセラレーションによる表示は、ハードウェアアクセラレーションによるデコードのパフォーマンス面のメリットを拡大します。GPU(ハードウェア)アクセラレーション機能を備えるデバイスでは、flash.media.StageVideo オブジェクトを使用して、デバイスハードウェア上で直接ビデオを処理できます。直接処理すると CPU が解放され、GPU によるビデオの処理中に他のタスクが実行されます。一方、従来の Video クラスは、通常はソフトウェアによる表示を使用します。ソフトウェアによる表示は CPU 内で実行され、大量の共有システムリソースが消費される場合があります。

現在は、完全な GPU アクセラレーションを実行するデバイスは多くありません。しかし、ステージビデオを使用すると、利用可能なあらゆるハードウェアアクセラレーションをアプリケーションで最大限に活用できるようになります。

StageVideo クラスにより Video クラスが不要になるわけではありません。この 2 つのクラスは連携し、デバイスリソースの許容範囲内で最適なビデオ表示エクスペリエンスをいつでも実現します。アプリケーション側で、適切なイベントを監視し必要に応じて StageVideo と Video を切り替えることで、ハードウェアアクセラレーションを活用できます。

StageVideo クラスには、ビデオの使用法に関していくつか制限があります。StageVideo を実装する前に、ガイドラインを見直し、アプリケーションでこれらの制限を受け入れられることを確認してください。制限を受け入れる場合は、Flash Player でハードウェアアクセラレーションによる表示が利用可能であることを検出したときは常に StageVideo クラスを使用してください。 ガイドラインおよび制限 を参照してください。

平行面:ステージビデオと Flash 表示リスト

Flash Player ではステージビデオモデルを使用して、表示リストからビデオを分離できます。Flash Player では、複合的な表示を次のような z 順序による 2 枚の面に分割します。

ステージビデオ面
ステージビデオ面は後側に位置し、StageVideo クラスでは、ハードウェアアクセラレーションによるビデオのみが表示されます。このような設計により、ハードウェアアクセラレーションがサポートされない場合、またはデバイス上で利用できない場合は、ステージビデオ面は利用できません。ActionScript で、StageVideo オブジェクトは、ステージビデオ面で再生されるビデオを処理します。

Flash 表示リスト面
Flash 表示リストのエンティティは、ステージビデオ面の前にある面の上に構成されます。表示リストのエンティティには、再生コントロールなど、ランタイムによってレンダリングされるすべてのものが含まれます。ハードウェアアクセラレーションが利用できない場合、ビデオは Video クラスオブジェクトを使用して、この面上のみで再生されます。ステージビデオは常に Flash 表示リストのグラフィックの背後に表示されます。

StageVideo オブジェクトは、画面上でウィンドウとして配置された、回転なしの矩形領域に表示されます。ステージビデオ面の背後にオブジェクトをレイヤー化することはできませんが、Flash 表示リスト面を使用して、ステージビデオ面の上に他のグラフィックをレイヤー化できます。ステージビデオは表示リストと同時に実行されます。このため、この 2 つのメカニズムを同時に使用して、2 つの異なる面を使用する統合ビジュアル効果を作成できます。例えば、後ろの面で実行中のステージビデオ上で動作する再生コントロール用に、前の面を使用できます。

ステージビデオと H.264 コーデック

Flash Player アプリケーションでは、ビデオのハードウェアアクセラレーションの実装には次の 2 つの手順が伴います。

  1. ビデオの H.264 エンコーディング

  2. StageVideo API の実装

最適な結果を得るためには、両方の手順を実行してください。H.264 コーデックを使用すると、ビデオのデコードから表示まで、ハードウェアアクセラレーションを最大限に活用できます。

ステージビデオによって、GPU から CPU へのリードバックが発生しなくなります。つまり、表示リストオブジェクトとの合成のために、GPU が CPU に対してデコードされたフレームを送り返すことがありません。この代わりに、デコードされレンダリングされたフレームを、GPU が直接、表示リストオブジェクトの背後の画面に転送します。このテクニックによって CPU とメモリの使用率が削減され、さらにピクセル精度が向上します。

ガイドラインおよび制限

ビデオがフルスクリーンモードで実行中のとき、ハードウェアアクセラレーションをサポートしているデバイスでは、ステージビデオは常に利用可能な状態にあります。ただし、Flash Player はブラウザー内でも実行されます。ブラウザーコンテキストでステージビデオを利用できるかどうかは wmode 設定の影響を受けます。ステージビデオを使用する場合は、常に wmode="direct" を使用するようにしてください。ステージビデオは、フルスクリーンモードの場合を除き、この他の wmode 設定との互換性がありません。この制約によって、実行時にステージビデオが予期せず利用可能になったり利用不能になったりするおそれがあります。例えば、ステージビデオの実行中にユーザーがフルスクリーンモードを終了すると、ビデオコンテキストがブラウザーに戻されます。ブラウザーの wmode パラメーターが "direct" に設定されていない場合は、ステージビデオが突然利用できなくなる可能性があります。Flash Player は一連のイベントによって再生コンテキストの変更をアプリケーションに伝達します。StageVideo API を実装する場合は、ステージビデオが利用不能になった場合のバックアップとして Video オブジェクトを保持してください。

ステージビデオはハードウェアと直接関係付けられるので、一部のビデオ機能に制約が生じます。ステージビデオには、次の制約が適用されます。

  • Flash Player でビデオを同時に表示できる StageVideo オブジェクトの数は、SWF ファイルごとに最大 4 個です。ただし、実際の数は、デバイスのハードウェアリソースに応じてさらに少なく制限される場合があります。

  • ビデオのタイミングは、ランタイムにより表示されるコンテンツのタイミングとは同期しません。

  • ビデオ表示領域の形は長方形のみです。楕円形や不規則な形などの複雑な領域に表示することはできません。

  • ビデオを回転することはできません。

  • ビデオのビットマップキャッシュを保持することはできません。また、BitmapData オブジェクトを使用してビデオにアクセスすることはできません。

  • ビデオにフィルターを適用することはできません。

  • ビデオにカラー変換を適用することはできません。

  • ビデオにアルファ値を適用することはできません。

  • 表示リスト面のオブジェクトに適用されたブレンドモードは、ステージビデオには適用されません。

  • ビデオを配置できる位置はフルピクセル境界のみです。

  • 指定されたデバイスハードウェアにおいて、GPU レンダリングは最も適した手段ではありますが、デバイス間で完全なピクセル整合性が保たれているわけではありません。ドライバーやプラットフォームの違いにより、多少の差異が生じます。

  • 必須のカラースペースの一部をサポートしないデバイスも少数存在します。例えば、一部のデバイスは H.264 標準である BT.709 をサポートしません。そのような場合は、BT.601 を使用して高速表示を実現できます。

  • wmode 設定が normal、opaque、transparent の場合、ステージビデオを使用することはできません。ステージビデオでは、フルスクリーンモードの場合を除き、 wmode=direct のみがサポートされます。WMODE は、Safari 4 以降および IE 9 以降では無効です。

ほとんどの場合、これらの制限によりビデオプレーヤーアプリケーションが影響を受けることはありません。これらの制限を受け入れられる場合は、可能な限りステージビデオを使用してください。