遅くなりましたが、昨年秋に公開された Flash Player と AIR のバージョン 15 の新機能を紹介します。SWF のバージョンは 26 になります。
新規に追加された機能は、各プラットフォームごとに以下のとおりです。ご覧のとおりたくさんの機能が追加されています。
全てのプラットフォーム環境
- Stage3D 描画ターゲット設定時のバッファクリアに関する制限を緩和
- StageVideo のソフトウェア再生への自動フォールバック機能 (Flash Player)
Windows 環境
- 3D コンテンツを Windows 8 上の IE のズーム比に合わせる機能 (Flash Player)
- フルスクリーン表示時のデバイスの向きの変化に対応する機能
- Chrome (PPAPI) でGPUを使ったビデオデコードをサポート
- junction に対する振舞いの設定フラグ追加 (セキュリティ関連)
Mac / iOS 環境
- StageText.drawViewPortToBitmapData の Retina 対応
- 新しい iOS パッケージングエンジンがデフォルトに
モバイル環境
- Stage3D “Standard” プロファイルをサポート
- マルチプレーヤー対応などAIR Gamepad の強化 (Android のみ)
- AIR ゲームのクロスプロモーション (iOS 対応は検討中)
数が多いので、この記事でははビデオと Windows 関連の新機能いくつかの詳細をご紹介します。 Stage3D 関連とモバイル系の機能は別の記事にまとめます。
StageVideo のソフトウェア再生への自動フォールバック機能
Flash Player 15 以上をターゲットとする SWF は、StageVideo が利用できない環境でビデオが再生されると、自動的にソフトウェア再生に切り替わるようになりました。そのため、Video オブジェクトへの切り替えロジックの用意が不要になります。
ハードウェア再生ができない場合に、StageVideoAvailability イベントが発行される点は従来と同様です。 (イベントの availability 属性の値は available で、reason は noError ですが) そのため、独自のフォールバック手段を記述することも、引き続き可能です。
Flash Player 15 以降を前提とするビデオ再生は、
- フルスクリーン再生
- Mac 上での再生 (Chrome は制限あり)
では、ユーザーが明示的にハードウェア再生機能をオフにしていなければ、基本的に StageVideo による再生となります。
一方、Windows 環境では wMode=direct が指定されていない場合、ブラウザーにより振舞いが異なります。とはいえ、Chrome (PPAPI) が全 wMode においてハードウェア再生に対応したことで、最新の主要ブラウザーでは Windows 上の Firefox のみ direct モードの明示的な指定に依存するという状態になったことになります。
ただ、Chrome は、Windows XP ではハードウェア再生が無効です。また独自に利用できるドライバーのリストを盛っていたり、ブラウザーの設定による無効化 (chrome://gpu/) も可能だったりします。
などなどめんどうな情報もありますが、ともあれ、この変更によりビデオの扱いが簡単になるという点に関してはは期待できそうです。
フルスクリーン表示時のデバイスの向きの変化に対応
Flash コンテンツがフルスクリーン表示された際、デバイスの向きの変化を通知するイベントが追加されました。デバイスの向きが変わると resize イベントにより通知されます。
加えて、フルスクリーンモードでも Stage.fullScreenSourceRect が設定可能になりました。
これらを組み合わせると、以下のようなコードにより、フルスクリーン表示された後にアスペクト比の変更が可能です。
private function resizeHandler(event:Event):void { switch(stage.displayState) { case StageDisplayState.NORMAL: // stage.widthとstage.heightに応じて配置 break; case StageDisplayState.FULL_SCREEN: // fullScreenWidthとfullScreenHeightを確認 // 新しい幅と高さにfullScreenSourceRectを設定 // その際、画面と同じ縦横比にする stage.fullScreenSourceRect =
new Rectangle(0, 0, newWidth, newHeight); // 新しい幅と高さに応じてオブジェクトを配置 break; }
これまで、フルスクリーン表示時後の fullScreenSourceRect の再設定ができないために画面の向きを固定するという選択をしていた人には嬉しい変更ではないでしょうか。
ついでに、fullScreenSourceRect を使用しない場合も整理しておきます。
- stage.scaleMode の値が NO_SCALE の場合、ステージの大きさは固定です。そのため、デバイスの向きにより、コンテンツの一部が切り取られる (デバイスのスクリーンからはみ出す) 可能性があります
- scaleMode が SHOW_ALL または NO_BORDER の場合、オリジナルのアスペクト比を尊重しつつ拡大縮小が行われます。したがってコンテンツのクロップは発生しませんが、画面に無駄な空き領域ができそうです
- scaleMode が EXACT_FIT だと、画面にはうまく収まりそうですが、アスペクト比が変わることで、コンテンツによっては見難くなってしまうかもしれません
つまり、画面の回転に対応し、レイアウトを縦長と横長で切り替えたいなら、fullScreenSourceRect を使うか、fullScreenSourceRect は使わずに stage.scaleMode = NO_SCALE、のどちらかになりそうですが、レイアウトの手間が同レベルなら、fullScreenSourceRect を使ったほうが高速に描画できる分、おすすめと言えそうです。
なお、ブラウザー内で表示されている (フルスクリーン表示ではない) Flash コンテンツの振舞いは、従来と同じです。コンテンツは、ブラウザーの向きとサイズに合わせて表示され、デバイスの回転による resize イベントも発生しません。
この機能は、主にタブレットでの使用を想定したもので、Windows 上の全てのブラウザーでサポートされます。Mac 対応はありませんが、OS X 搭載タブレットが存在しない現状では当然ですね。
junction に対する振舞いの設定フラグ追加
Junction は Windows サーバー上のファイルを Windows PC と共有する機能です。例えば、ユーザーのホームディレクトリをサーバーにまとめて管理するのに使われます。
ホームディレクトリへがサーバーにあるなら、PC からホームディレクトリへの書き込みは、サーバーへとリダイレクトされることになります。
実は別のマシンに書き込んでいました、というのは、セキュリティ上のリスクとも考えられるため、Flash Player 15 では、Internet Explore から Junction ファイルへのアクセスを制御するフラグが提供されます。
デフォルトの設定では、Junction ファイルへの書き込みはできませんが、mms.cfg に以下の行を加えると、書き込みが許可されます。
EnableInsecureJunctionBehavior=1
このフラグは IE の保護モードが無効の場合のみ有効になります。
セキュリティ上の観点から、この機能を使用する際は、
- 対象となるファイルは 「ローカル イントラネット」 もしくは 「信頼済みサイト」 として登録
- それらのサイトに対する保護モードを無効にする
という設定が推奨されています。
次回は Stage3D 関連の情報の予定です。
コメントする