Flash Player 10.2 の Windows 版、Mac 版、そして Linux 版が公開されました。今回のバージョンアップにおける目玉となる新機能は Stage Video という ”ビデオの再生処理プロセスを最初から最後までハードウェアで行う” 機能です。これにより、高品質なビデオ再生を、プラットフォームやブラウザを問わず実現できるようになります。Stage Video のいくつかのデモが、US の Adobe Developer Connecion に公開されていますので、その機能をご確認ください。

その他にも、Flash Player 10.2 の新機能としては、カスタムのネイティブマウスカーソルのサポートが追加されたり、複数モニター使用時のスリーンモードのサポートや、IE9 のハードウェアを利用した描画機能への対応等が行われています。また、テキストの可読性を向上するサブピクセル描画処理の拡張も行われました。

Stage Video 機能概要

最初に Flash Player がビデオ機能を持ったのは 2002 年のことです。それ以来、映像は Web の重要な要素となっています。2008 年には H.264 のサポートも追加され、より多くのコンテンツをデスクトップ上に提供できるようになりました。昨年は、デバイスにまでコンテンツを再生できるプラットフォームが広がっています。そして 2011 年、Stage Video は、Web 上でも HD クオリティのビデオを滑らか且つ効率的に再生できる環境を提供します。

Stage Video は、映像の再生に必要となる処理の全てを、ハードウェア機能を使って高速化/効率化します。これは、Flash Player 10.1 から採用された H.264 のハードウェアデコード機能をベースに構築されたものです。Stage Video はハードウェアをフル活用するため、ビデオ再生時の CPU 使用率を劇的に減らしつつ、より高品質のビデオを再生できるのです。

Flash Player がサポートする複数の環境でテストした結果、最大で 34 倍の効率向上という結果も出ています。具体的には、1080p HD ビデオを Stage Video を使って再生した場合、ごく一般的なスペックの Mac や Windows コンピューターで 1 - 15% の CPU 使用率でした。これは、ネットブックからデスクトップ PC まで、数多くのコンピューターが HD ビデオの再生機として使えることを意味します。

Flash Player の普及するスピードは年々加速しています。Flash Player 10.1 はわずか 3 ヶ月で 70% 以上の普及率よなりました。Stage Video も同等かそれ以上の早さで普及することが期待されます。

Flash Player 10.2 をインストールしても、Stage Video によるパフォーマンス向上は、直ぐには感じられないかもしれません。Web サイトは提供するビデオプレーヤーを更新する必要があるためです。そのため、Stage Video の新しい API を使って、ビデオプレーヤーを修正することになります。既存の映像コンテンツや配信のためのインフラはそのまま引き続き利用できます。

Stage Video の使い方

Stage Video を使うには、従来の Video クラスの代わりに StageVideo クラスを使用します。基本的な使い方はどちらのクラスもほぼ同じですが、StageVideo クラスは、インスタンスを取得する際、コンストラクターを使わず、Stage.stageVideos 属性を参照します。StageVideo のインスタンスは、ハードウェアの機能に応じて、自動的に生成されます。従って、環境によっては StageVideo のインスタンスが存在しないこともあります。下は、StageVideo のインスタンスを取得するサンプルコードです。

var vec:Vector.<StageVideo> = stage.stageVideos; var stageVideo:StageVideo; if ( vec.length >= 1 ) { stageVideo = vec[0]; }

利用できる StageVideo インスタンスの数は、状況に応じて、都度変化します。一時的に利用できなくなる可能性もあります。通常、インスタンスの数は 0 から 8 の間で、デバイスでは 0 か 1 になることが多いでしょう。インスタンスが複数ある場合、ベクターのインデックス値が大きいものほど手前に表示されます。例えば、stageVideos[1] のインスタンスは stage.stageVideos[0] のインスタンスの手前に表示されます。この順序を変えるには、StageVideo インスタンスの depth 属性に整数を設定します。depth の値が小さいインスタンスは後に隠れます。depth の値が同じ場合は、stage.stageVideos に格納された順で表示されます。

StageVideo に映像を渡すには NetStream を利用します。埋め込みビデオは利用できません。StageVideo の状態の変化を知るためには、StageVideoEvent.RENDER_STATE イベントへのハンドラーを登録します。これにより、ハードウェア再生が中止されたら、従来のビデオ再生に切り替える、といった処理を実現できます。StageVideoEvent.RENDER_STATE は、netStream.play() を実行した後すぐに有効になるため、play() を呼ぶ前にイベントハンドラーを登録します。反対に StageVideo が利用可能になった場合には、Stage クラスの StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY イベントを利用します。

下は、StageVideo を使ったサンプルコードです。

var stageVideo:StageVideo; var vec:Vector.<StageVideo> = stage.stageVideos; if ( vec.length >= 1 ) { // StageVideo が利用可能 stageVideo = vec[0]; stageVideo.attachNetStream(netStream); stageVideo.addEventListener(StageVideoEvent.RENDER_STATE, onStageVideoRenderState); } else { // StageVideo が利用できない。代わりに Video を利用 video.attachNetStream(netStream); video.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onStageVideoAvailability); stage.addChildAt(video, 0); } netStream.play("myStream_name"); // ハードウェア再生の状況による処理を記述 function onStageVideoRenderState(event:StageVideoEvent) { // RENDER_STATUS_UNAVAILABLE: ハードウェアによるデコード/合成が中止された if ( event.status == StageVideoEvent.RENDER_STATUS_UNAVAILABLE ) { // StageVIdeo から Video クラスの利用に切り替え } else { // RENDER_STATUS_ACCELERATED: デコードと合成が GPU で行われている // RENDER_STATUS_SOFTWARE : デコードが CPU で行われている } } // StageVideo 利用可否が変更された場合の処理を記述 function onStageVideoAvailability(event: StageVideoAvailabilityEvent) { if ( event.availability == StageVideoAvailability.AVAILABLE ) { // Video クラスから StageVideo クラスの利用に切り替え } }

StageVideo クラスの詳細はオンラインヘルプを参照してください。

カスタムネイティブマウスカーソルの使い方

Flash Player 10.2 はネイティブマウスカーソル、すなわち OS の提供するマウスカーソル機能を利用できます。OS に渡すカスタムカーソルのデータは、MouseCursorData クラスのインスタンスに設定します。その際、複数のビットマップデータを指定することで、アニメーションを実現することもできます。指定できるビットマップデータの大きさは 32 x 32 ピクセルまでです。

データの設定された MouseCursorData クラスのインスタンスに、名前を付けて Mouse クラスの cursor 属性に設定するとネイティブマウスカーソルが使えるようになります。下は、カスタムのネイティブマウスカーソルを表示するサンプルです。

// ネイティブマウスカーソルが使えるかどうかを確認 if (Mouse.supportsNativeCursor == true) { // マウスカーソルに使用するビットマップデータを生成 var bitmap:Bitmap = new MyCursorData(); // ビットマップデータをベクターの要素として設定 var cursorBitmaps:Vector.<BitmapData>; cursorBitmaps = new Vector.<BitmapData>(1, true); cursorBitmaps[0] = bitmap.bitmapData; // MouseCursorDataオブジェクトにデータを設定 var cursorData:MouseCursorData; cursorData = new MouseCursorData(); cursorData.hotSpot = new Point(15,15); cursorData.data = cursorBitmaps; // MouseCursorDataオブジェクトをMouseクラスに登録 Mouse.registerCursor("myCursor", cursorData); Mouse.cursor = "myCursor"; }

マウスカーソルを元に戻すには、Mouse.cursor に MouseCursor.AUTO を設定します。

その他の新機能

Flash Player 10.2 には、Stage Video 以外にも、いくつかの新機能があります。いずれもより優れた体験を提供するべく追加された機能です。

  • マルチディスプレイ環境で、フルスクリーン表示をサポートします。片方のディスプレイで降るスクリーンのビデオを再生しながら、他方のディスプレイで作業を行うことができます 
  • サブビクセルテキスト描画機能が拡張されました。これにより、特に複雑な文字が読みやすく表示されるようになります
  • IE9 の GPU 描画機能に対応します。ブラウザ内での描画がより効率的になります

次のステップ

Flash Player 10.2 はアドビのサイト内に公開されています。インストールして、Stage Video がもたらす新しいビデオ再生環境やカスタムマウスカーソルを体験してみてください。