AIR for TV アプリケーションのデザイン上の考慮事項

ビデオに関する考慮事項

ビデオエンコーディングのガイドライン

テレビデバイスにビデオをストリーミングする場合の、推奨されるエンコーディングのガイドラインを次に示します。

ビデオコーデック:

H.264、メインプロファイルまたはハイプロファイル、プログレッシブエンコーディング

解像度:

720i、720p、1080i または 1080p

フレームレート:

1 秒あたり 24 フレームまたは 1 秒あたり 30 フレーム

オーディオコーデック:

AAC-LC または AC-3、44.1 kHz、ステレオ、または以下のマルチチャネルオーディオコーデック:E-AC-3、DTS、DTS Express、DTS-HD High Resolution Audio、または DTS-HD Master Audio

結合ビットレート:

利用可能帯域幅に応じて最大 8M bps

オーディオビットレート:

最大 192 Kbps

ピクセル縦横比:

1 x 1

AIR for TV デバイスに配信されるビデオには H.264 コーデックを使用することをお勧めします。

注意: AIR for TV は Sorenson Spark または On2 VP6 コーデックでエンコードされたビデオもサポートしています。ただし、ハードウェアではこれらのコーデックのデコードや表示は実行されません。代わりに、ランタイムはソフトウェアを使用してこれらのコーデックのデコードや表示を実行します。これが原因で、ビデオはかなり低いフレームレートで再生されます。このような場合は、可能であれば H.264 を使用してください。

StageVideo クラス

AIR for TV は、H.264 でエンコードされたビデオのハードウェアデコードと表示をサポートしています。この機能を有効にするには、StageVideo クラスを使用します。

次の項目について詳しくは、 『ActionScript 3.0 開発ガイド』の「 ハードウェアアクセラレーションによる表示のための StageVideo クラスの使用 」を参照してください。

  • StageVideo クラスおよび関連クラスの API

  • StageVideo クラスの使用に関する制限事項

Video オブジェクト(H.264 でエンコードされたビデオ用)を使用する既存の AIR アプリケーションに対して最適なサポートを提供するために、AIR for TV では StageVideo オブジェクトを内部で使用しています。これにより、ビデオ再生ではハードウェアデコードおよび表示が活用されます。ただし、Video オブジェクトは StageVideo オブジェクトと同様の制約を受けます。例えば、アプリケーションがビデオを回転しようとしても、ランタイムではなくハードウェアによってビデオが表示されるので、回転は実行されません。

このため、新しいアプリケーションを作成するときには、H.264 でエンコードされたビデオについては StageVideo オブジェクトを使用してください。

StageVideo クラスを使用した例については、「 Delivering video and content for the Flash Platform on TV 」を参照してください。

ビデオ配信のガイドライン

AIR for TV デバイスでは、ビデオ再生中にネットワークの利用可能な帯域幅が変化することがあります。例えば、他のユーザーが同じインターネット接続の使用を開始したときにこのような変化が起こることがあります。

このため、ビデオ配信システムにはアダプティブビットレート機能を使用することをお勧めします。例えば、サーバー側では、Flash Media Server はアダプティブビットレート機能をサポートしています。クライアント側では、Open Source Media Framework(OSMF)を使用できます。

ネットワーク経由で AIR for TV アプリケーションにビデオコンテンツを配信する場合、次のプロトコルが利用可能です。
  • HTTP および HTTPS Dynamic Streaming(F4F 形式)

  • RTMP、RTMPE、RTMFP、RTMPT、および RTMPTE Streaming

  • HTTP および HTTPS Progressive Download

詳しくは、以下のトピックを参照してください。

オーディオに関する考慮事項

AIR for TV アプリケーションでの音声再生用 ActionScript には、その他の AIR アプリケーションとの違いはありません。詳しくは、『ActionScript 3.0 開発ガイド』の「 サウンドの操作 」を参照してください。

AIR for TV でのマルチチャネルオーディオのサポートについては、次のことを考慮してください。

  • AIR for TV では、HTTP サーバーから徐々にダウンロードされるビデオでマルチチャンネルオーディオがサポートされます。Adobe Flash Media Server からストリーミングされるビデオについては、マルチチャネルオーディオのサポートはまだ行われていません。

  • AIR for TV では多数のオーディオコーデックがサポートされていますが、AIR for TV のすべてのデバイスでオーディオコーデックのセット全体がサポートされているわけではありません。 flash.system.Capabilities のメソッド hasMultiChannelAudio() を使用して、AIR for TV デバイスが AC-3 などの特定のマルチチャンネルオーディオコーデックをサポートするかどうかを確認してください。

    例えば、サーバーからビデオファイルを徐々にダウンロードするアプリケーションについて考えます。このサーバーには、様々なマルチチャンネルオーディオコーデックをサポートする複数の H.264 ビデオファイルが含まれているとします。アプリケーションでは、 hasMultiChannelAudio() を使用することで、サーバーのどのビデオファイルを要求するかが決まります。または、アプリケーションからサーバーに対して、 Capabilities.serverString に含まれている文字列を送信することもできます。この文字列は、どのマルチチャンネルオーディオコーデックが使用できるかを示しています。この文字列を使用することで、サーバーは適切なビデオファイルを選択できます。

  • DTS オーディオコーデックを使用している場合は、 hasMultiChannelAudio() true を返しても DTS オーディオが再生されないという状況が発生することがあります。

    例えば、S/PDIF 出力を備えたブルーレイプレーヤーを古いアンプに接続している場合について考えてみます。古いアンプは DTS に対応していませんが、S/PDIF にはブルーレイプレーヤーに通知するプロトコルがありません。ブルーレイプレーヤーから古いアンプに DTS ストリームが送信されても、ユーザーには何も聞こえません。したがって、ベストプラクティスとして、DTS を使用するときは、サウンドが再生されていないときにユーザーが指摘できるように、ユーザーインターフェイスを提供してください。そうすれば、アプリケーションは別のコーデックに復帰できます。

次の表は、AIR for TV アプリケーションでそれぞれのオーディオコーデックを使用する状況についてまとめたものです。この表は、AIR for TV デバイスがハードウェアアクセラレーターを使用してオーディオコーデックをデコードする状況も示しています。ハードウェアでデコードすると、パフォーマンスが向上し、CPU の負荷が軽減されます。

オーディオコーデック

AIR for TV での使用

ハードウェアでのデコード

このオーディオコーデックを使用する状況

詳細情報

AAC

常に可

常に可

H.264 でエンコードされたビデオで使用。

インターネットでの音楽ストリーミングサービスなどのオーディオストリーミングが対象。

オーディオ専用 AAC ストリームを使用する場合、MP4 コンテナにオーディオストリームをカプセル化します。

MP3

常に可

不可

アプリケーションの SWF ファイルでのサウンドが対象。

ビデオでは、Sorenson Spark または On2 VP6 でエンコード。

オーディオに mp3 を使用する H.264 ビデオは、AIR for TV デバイスでは再生できません。

AC-3(Dolby Digital)

E-AC-3(Enhanced Dolby Digital)

DTS Digital Surround

DTS Express

DTS-HD High Resolution Audio

DTS-HD Master Audio

チェック

H.264 でエンコードされたビデオで使用。

通常、マルチチャンネルオーディオストリームが AIR for TV から外部オーディオやビデオのレシーバーに渡され、オーディオがデコードされて再生されます。

Speex

常に可

不可

ライブ音声ストリーミングの受信時。

オーディオに Speex を使用する H.264 ビデオは、AIR for TV デバイスでは再生できません。Speex は、Sorenson Spark または On2 VP6 でエンコードされたビデオでのみ使用してください。

NellyMoser

常に可

不可

ライブ音声ストリーミングの受信時。

オーディオに NellyMoser を使用する H.264 ビデオは、AIR for TV デバイスでは再生できません。NellyMoser は、Sorenson Spark または On2 VP6 でエンコードされたビデオでのみ使用してください。

注意: ビデオファイルには、オーディオストリームが 2 つ含まれているものもあります。例えば、1 つのビデオファイルに AAC ストリームと AC3 ストリームの両方を含めることができます。AIR for TV ではこのようなビデオファイルをサポートしていないので、このようなファイルを使用すると、ビデオの音声が出力されない場合があります。

グラフィックのハードウェアアクセラレーション

グラフィックのハードウェアアクセラレーションの使用

AIR for TV デバイスによって、2D グラフィック処理用のハードウェアアクセラレーションが提供されます。デバイスのハードウェアグラフィックアクセラレーターは、CPU の負荷を軽減して、次の操作を実行します。

  • ビットマップレンダリング

  • ビットマップ拡大/縮小

  • ビットマップブレンド

  • 長方形の単色の塗り

このグラフィックのハードウェアアクセラレーションによって、AIR for TV アプリケーションのグラフィック操作の多くが高いパフォーマンスを発揮できます。グラフィック操作には、次のものが含まれます。

  • スライドトランジション

  • 拡大/縮小トランジション

  • フェードインとフェードアウト

  • アルファによる複数イメージの合成

これらの種類の操作でグラフィックのハードウェアアクセラレーションによるパフォーマンス上のメリットを得るには、次の方法のいずれかを使用してください。

  • コンテンツがほとんど変化しない MovieClip オブジェクトおよび他の表示オブジェクトの cacheAsBitmap プロパティを true に設定します。次に、これらのオブジェクトのスライドトランジション、フェードトランジションおよびアルファブレンドを実行します。

  • 拡大/縮小や移動(x および y の位置の変更)を実行する表示オブジェクトには cacheAsBitmapMatrix プロパティを使用します。

    拡大/縮小および移動に Matrix クラスの操作を使用することによって、デバイスのハードウェアアクセラレーターがその操作を実行します。または、 cacheAsBitmap プロパティが true に設定されている表示オブジェクトのサイズを変更するシナリオを検討してください。サイズを変更するときに、ランタイムのソフトウェアによってビットマップが再描画されます。ソフトウェアによる再描画では、Matrix 操作を使用したハードウェアアクセラレーションによる拡大/縮小よりもパフォーマンスが低下します。

    例えば、エンドユーザーが選択したときにイメージが拡大されて表示されるアプリケーションについて考えてみます。この場合、Matrix の拡大/縮小操作を複数回使用することで、イメージが拡大しているような錯覚が得られます。ただし、オリジナルのイメージと最終のイメージのサイズによっては、最終イメージの画質が要件を満たさないものになることがあります。このため、拡大操作の完了後は、表示オブジェクトのサイズをリセットしてください。 cacheAsBitmap true であるので、ランタイムソフトウェアは表示オブジェクトを再描画しますが、これは一度だけであり、高画質のイメージをレンダリングします。

    注意: 通常、AIR for TV デバイスはハードウェアによって高速化される回転と傾斜をサポートしていません。このため、Matrix クラスで回転と傾斜を指定すると、AIR for TV はソフトウェアですべての Matrix 操作を実行します。これらのソフトウェア操作により、パフォーマンスが悪影響を受ける場合があります。
  • BitmapData クラスを使用して、カスタムのビットマップキャッシュ機能を作成します。

ビットマップキャッシュ機能について詳しくは、以下のトピックを参照してください。

グラフィックメモリの管理

ハードウェアアクセラレーターは、高速化されるグラフィック操作を実行するために、特別なグラフィックメモリを使用します。アプリケーションですべてのグラフィックメモリを使用する場合、AIR for TV はグラフィックを操作するためのソフトウェアの使用に戻るので、アプリケーションの実行速度は低下します。

アプリケーションによるグラフィックメモリの使用を管理するには:

  • イメージや他のビットマップデータの使用が終了したら、関連するグラフィックメモリを解放します。これを実行するには、Bitmap オブジェクトの bitmapData プロパティの dispose() メソッドを呼び出します。次に、例を示します。

    myBitmap.bitmapData.dispose();
    注意: BitmapData オブジェクトへの参照を解放しても、グラフィックメモリはすぐには解放されません。ランタイムのガベージコレクターが最終的にグラフィックメモリを解放しますが、 dispose() を呼び出すことでアプリケーションをより詳細に制御できます。
  • アドビが提供する AIR アプリケーションである PerfMaster Deluxe を使用することで、ターゲットデバイスにおけるグラフィックのハードウェアアクセラレーションについて詳しく理解できます。このアプリケーションでは、様々な操作を実行するための 1 秒あたりのフレーム数が表示されます。PerfMaster Deluxe を使用すれば、同じ操作の異なる実装を比較できます。例えば、ビットマップイメージの移動とベクトルイメージの移動の比較が可能です。PerfMaster Deluxeは「 Flash Platform for TV 」で入手できます。

表示リストの管理

表示オブジェクトを非表示にするには、オブジェクトの visible プロパティを false に設定します。そうすると、オブジェクトは依然として表示リストに含まれますが、そのオブジェクトは AIR for TV でレンダリングや表示されません。このテクニックは、処理のオーバーヘッドがわずかなので、表示と消去が頻繁に繰り返されるオブジェクトで役立ちます。ただし、 visible プロパティを false に設定しても、オブジェクトのリソースは一切解放されません。そのため、オブジェクトの表示を終了したとき、または少なくとも長い間表示しないときは、表示リストからオブジェクトを削除します。さらに、このオブジェクトへの参照をすべて null に設定します。これらのアクションによって、ガベージコレクターがオブジェクトのリソースを解放できます。

PNG 画像および JPEG 画像の使用

アプリケーションで一般的な画像形式は PNG と JPEG の 2 つです。AIR for TV アプリケーションでこれらの画像形式を使用する場合は、次のことを考慮してください。

  • 通常、AIR for TV では JPEG ファイルのデコードにハードウェアアクセラレーションを使用します。

  • 通常、AIR for TV では PNG ファイルのデコードにソフトウェアを使用します。ソフトウェアによる PNG ファイルのデコードは高速です。

  • PNG は、異なるプラットフォーム間で動作し、透明度(アルファチャンネル)機能に対応している唯一のビットマップ形式です。

このため、アプリケーションでは次の画像形式を使用してください。

  • ハードウェアによって高速化されるデコードを活用するために、写真には JPEG ファイルを使用します。

  • ユーザーインターフェイスエレメントには PNG イメージファイルを使用します。ユーザーインターフェイスエレメントではアルファ設定ができ、ソフトウェアデコードによって、十分に高速なパフォーマンスを実現できます。

AIR for TV アプリケーションのステージ

AIR for TV アプリケーションを作成する際に、Stage クラスを操作する場合は次の点を考慮してください。

  • 画面解像度

  • 安全表示領域

  • ステージの拡大/縮小モード

  • ステージの配置

  • ステージの表示状態

  • 複数の画面サイズのデザイン

  • ステージの画質設定

画面解像度

現在では、通常のテレビデバイスの画面解像度は 540p、720p、1080p のいずれかです。これらの画面解像度は ActionScript Capabilities クラスでは次の値となります。

画面解像度

Capabilities.screenResolutionX

Capabilities.screenResolutionY

540p

960

540

720p

1280

720

1080p

1920

1080

特定のデバイス向けにフルスクリーンの AIR for TV アプリケーションを作成する場合は、デバイスの画面解像度に Stage.stageWidth および Stage.stageHeight をハードコーディングします。一方、複数のデバイスで実行するフルスクリーンのアプリケーションを作成する場合は、 Capabilities.screenResolutionX プロパティおよび Capabilities.screenResolutionY プロパティを使用して、Stage のサイズを設定します。

次に、例を示します。

stage.stageWidth = Capabilities.screenResolutionX; 
stage.stageHeight = Capabilities.screenResolutionY;

安全表示領域

テレビの「安全表示領域」とは、画面の境界からのインセットとなる画面の領域のことです。この領域は、エンドユーザーが領域全体を見ることのできる十分な距離があり、テレビのベゼル部で隠れる部分のないインセットです。画面周囲にある物理的なフレームであるベゼルは製造元によって異なるため、必要となるインセットも異なります。安全表示領域では、画面の可視領域の確保を試みます。安全表示領域は、「タイトル安全区域」とも呼ばれています。

「オーバースキャン」は、ベゼルの後方にあるので表示されない画面領域です。

画面の各エッジのインセットは 7.5% とすることをお勧めします。次に、例を示します。

フルサイズのグラフィックを表示
画面解像度 1920 x 1080 の場合の安全表示領域

フルスクリーンの AIR for TV アプリケーションをデザインする場合は、次のように常に安全表示領域を考慮してください。

  • 背景イメージや背景色などの背景には画面全体を使用します。

  • テキスト、グラフィック、ビデオ、ボタンなどのユーザーインターフェイスアイテムを含む重要なアプリケーションエレメントには、安全表示領域のみを使用します。

次の表に、7.5% のインセットを使用した一般的な画面解像度のそれぞれについて、安全表示領域のサイズを示します。

画面解像度

安全表示領域の幅と高さ

左右のインセットの幅

上下のインセットの高さ

960 x 540

816 x 460

72

40

1280 x 720

1088 x 612

96

54

1920 x 1080

1632 x 918

144

81

ただし、ベストプラクティスは常に安全表示領域を動的に計算することです。次に、例を示します。

var horizontalInset, verticalInset, safeAreaWidth, safeAreaHeight:int; 
 
horizontalInset = .075 * Capabilities.screenResolutionX; 
verticalInset = .075 * Capabilities.screenResolutionY; 
safeAreaWidth = Capabilities.screenResolutionX - (2 * horizontalInset); 
safeAreaHeight = Capabilities.screenResolutionY - (2 * verticalInset);

ステージの拡大/縮小モード

Stage.scaleMode StageScaleMode.NO_SCALE に設定し、ステージのサイズ変更イベントを監視します。

stage.scaleMode = StageScaleMode.NO_SCALE; 
stage.addEventListener(Event.RESIZE, layoutHandler);

この設定によって、ステージ座標がピクセル単位の座標と同じになります。この設定を FULL_SCREEN_INTERACTIVE 表示状態および TOP_LEFT ステージ配置と共に使用すると、安全表示領域を効果的に使用できます。

特に、フルスクリーンアプリケーションでは、この拡大/縮小モードは、Stage クラスの stageWidth プロパティと stageHeight プロパティが、Capabilities クラスの screenResolutionX プロパティと screenResolutionY プロパティに一致するということを意味します。

さらに、アプリケーションのウィンドウサイズが変更されても、ステージコンテンツは定義されたサイズで維持されます。ランタイムはレイアウトや拡大/縮小を自動的に実行しません。また、ウィンドウサイズが変更された場合、ランタイムは Stage クラスの resize イベントを送出します。このため、アプリケーションの開始時およびアプリケーションウィンドウのサイズ変更時におけるアプリケーションのコンテンツの調整方法を完全に制御できます。

注意: NO_SCALE の動作はあらゆる AIR アプリケーションで同様です。ただし、AIR for TV アプリケーションでは、この設定の使用が安全表示領域を使用する上で不可欠になります。

ステージの配置

Stage.align StageAlign.TOP_LEFT に設定します。

stage.align = StageAlign.TOP_LEFT; 

この配置により、画面の左上隅に 0,0 座標が配置されます。これは、ActionScript を使用したコンテンツの配置に便利です。

この設定を NO_SCALE 拡大/縮小モードと FULL_SCREEN_INTERACTIVE 表示状態と共に使用すると、安全表示領域を効果的に使用できます。

ステージの表示状態

フルスクリーンの AIR for TV アプリケーションの Stage.displayState StageDisplayState.FULL_SCREEN_INTERACTIVE に設定します。

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

この値により、ユーザー入力が許可され、画面全体にステージを拡大するように AIR アプリケーションが設定されます

FULL_SCREEN_INTERACTIVE 設定を使用することをお勧めします。この設定を NO_SCALE 拡大/縮小モードと TOP_LEFT ステージ配置と共に使用すると、安全表示領域を効果的に使用できます。

このため、フルスクリーンのアプリケーションの場合は、メインのドキュメントクラスの ADDED_TO_STAGE イベントのハンドラー内で、次のように指定します。

private function onStage(evt:Event):void 
{ 
    stage.scaleMode = StageScaleMode.NO_SCALE; 
    stage.align = StageAlign.TOP_LEFT; 
    stage.addEventListener(Event.RESIZE, onResize); 
    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 
}

次に、 RESIZE イベントのハンドラー内で、次のように指定します。

  • 画面解像度のサイズとステージの幅および高さを比較します。同じ場合には、ステージ表示状態が FULL_SCREEN_INTERACTIVE に変更されたことが原因で RESIZE イベントが発生しています。

  • 安全表示領域および対応するインセットのサイズを計算して保存します。

private function onResize(evt:Event):void 
{ 
    if ((Capabilities.screenResolutionX == stage.stageWidth) && 
        (Capabilities.screenResolutionY == stage.stageHeight)) 
    { 
         
        // Calculate and save safe viewing area dimensions. 
    } 
}

ステージの横と縦のサイズが Capabilities.screenResolutionX screenResolutionY に等しい場合、AIR for TV によってハードウェアで可能な最高のビデオとグラフィックの再現性がもたらされます。

注意: グラフィックおよびビデオをテレビ画面に表示したときのサイズは、 Capabilities.screenResolutionX 値と screenResolutionY 値で指定されたサイズとは異なる可能性があります。これらの値は、AIR for TV を実行するデバイスによって決まります。例えば、AIR for TV を実行するセットトップボックスのスクリーン解像度が 1280 x 720 で、接続されたテレビのスクリーン解像度が 1920 x 1080 の場合があります。ただし、AIR for TV によってハードウェアで可能な最高の再現性がもたらされます。したがって、この例では、ハードウェアによって、スクリーン解像度 1920 x 1080 を使用して 1080p ビデオが表示されます。

複数の画面サイズのデザイン

複数の AIR for TV デバイス上で動作し正常に表示される、フルスクリーンの AIR for TV アプリケーションを開発することができます。次の手順を実行してください。

  1. ステージプロパティの scaleMode align および displayState を、それぞれ、 StageScaleMode.NO_SCALE StageAlign.TOP_LEFT StageDisplayState.FULL_SCREEN_INTERACTIVE という推奨値に設定します。

  2. Capabilities.screenResolutionX および Capabilities.screenResolutionY に基づいて安全表示領域を設定します。

  3. 安全表示領域の幅と高さに従ってコンテンツのサイズとレイアウトを調節します。

    コンテンツのオブジェクトは大きなものとなります(特にモバイルデバイスアプリケーションと比較した場合)。ただし、動的レイアウト、相対位置指定およびアダプティブコンテンツなどの概念に変わりはありません。これらの概念をサポートする ActionScript について詳しくは、「 複数の画面サイズ向けのモバイル Flash コンテンツのオーサリング 」を参照してください。

ステージの画質

AIR for TV アプリケーション向けの Stage.quality プロパティは、常に StageQuality.High です。これを変更することはできません。

このプロパティは、すべての Stage オブジェクトのレンダリング画質を指定します。

リモートコントローラー入力処理

通常、ユーザーはリモートコントローラーを使用して AIR for TV アプリケーションを操作します。ただし、キー入力の処理は、デスクトップアプリケーションのキーボードからのキー入力と同様に処理します。具体的には、 KeyboardEvent.KEY_DOWN イベントを処理してください。詳しくは、『ActionScript 3.0 開発ガイド』の「 キーボード入力のキャプチャ 」を参照してください。

リモートコントローラーの各キーは、ActionScript 定数にマップされます。例えば、リモートコントローラーの方向キーパッドのキーは次のようにマップされます。

リモートコントローラーの方向キーパッドのキー

ActionScript 3.0 定数

Keyboard.UP

Keyboard.DOWN

Keyboard.LEFT

Keyboard.RIGHT

「OK」または「選択」

Keyboard.ENTER

AIR 2.5 では、リモートコントローラー入力をサポートするために、多くの Keyboard 定数が追加されています。これらの定数の一覧については、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』の Keyboard クラス を参照してください。

アプリケーションが可能な限り多くのデバイスで動作するように、以下の実施をお勧めします。

  • 可能であれば、方向キーパッドのキーのみを使用します。

    リモートコントローラーデバイスによってキーのセットは異なりますが、キーのセットには通常、方向キーパッドのキーが含まれています。

    例えば、通常 Blu-ray プレーヤーのリモートコントローラーには、「上のチャンネル」および「下のチャンネル」キーが含まれていません。再生、一時停止、停止のキーも、すべてのリモートコントローラーに組み込まれているとは限りません。

  • アプリケーションで方向キーパッドのキー以外のキーが必要な場合は、メニューキーおよび情報キーを使用します。

    メニューキーと情報キーは、リモートコントローラーでは方向キーパッドのキーに次いで一般的なキーです。

  • 汎用リモートコントローラーの使用頻度を考慮します。

    特定のデバイス向けにアプリケーションを作成している場合でも、多くのユーザーはデバイスに付属するリモートコントローラーを使用しないことを認識してください。このようなユーザーは、代わりに汎用リモートコントローラーを使用しています。また、ユーザーがデバイスのリモートコントローラーのすべてのキーと一致するように、汎用リモートコントローラーをプログラムしているとは限りません。このため、最も一般的なキーのみを使用することをお勧めします。

  • ユーザーが方向キーパッドのキーの 1 つを使用して問題を回避できるようにします。

    また場合によっては、アプリケーションで、リモートコントローラー上の最も一般的なキー以外のキーを使用する必要もあります。方向キーパッドのキーの 1 つを使用した回避ルートがあれば、すべてのデバイスでアプリケーションの動作が安定します。

  • ターゲットの AIR for TV デバイスにポインター入力機能があることがわかっていない限り、ポインター入力を要求しないでください。

    多くのデスクトップアプリケーションはマウス入力を前提にしていますが、ほとんどのテレビはポインター入力をサポートしていません。したがって、デスクトップアプリケーションをテレビで動作するように変更する場合は、マウス入力を要求しないようにアプリケーションを変更します。こうした変更には、イベント処理の変更およびユーザーに対する操作指示の変更が含まれます。例えば、アプリケーションの起動画面が表示されるときに、「クリックして開始します」というテキストを表示しないようにします。

フォーカスの管理

ユーザーインターフェイスエレメントにデスクトップアプリケーションのフォーカスが含まれている場合、フォーカスはキーボードイベントやマウスイベントなどのユーザー入力イベントのターゲットになります。さらに、アプリケーションではユーザーインターフェイスエレメントをフォーカスでハイライト表示します。AIR for TV アプリケーションでのフォーカスの管理は、次の理由により、デスクトップアプリケーションでのフォーカスの管理と異なります。

  • デスクトップアプリケーションでは多くの場合、Tab キーを使用して次のユーザーインターフェイスエレメントにフォーカスを変更します。Tab キーの使用は、AIR for TV アプリケーションには適用されません。通常、リモートコントローラーデバイスには Tab キーがありません。このため、デスクトップなどでの DisplayObject の tabEnabled プロパティを使用したフォーカスの管理は適用されません。

  • デスクトップアプリケーションでは多くの場合、マウスを使用して任意のユーザーインターフェイスエレメントにフォーカスを設定します。

このため、アプリケーションでは、以下のことを行ってください。

  • KeyboardEvent.KEY_DOWN などの Keyboard イベントを監視するイベントリスナーを Stage に追加します。

  • エンドユーザーに対してどのユーザーインターフェイスエレメントをハイライト表示するかを判断するアプリケーションロジックを記述します。アプリケーションの開始時にユーザーインターフェイスエレメントをハイライト表示するようにします。

  • アプリケーションロジックに基づいて、適切なユーザーインターフェイスエレメントオブジェクトに、Stage が受信した Keyboard イベントを送出します。

    Stage.focus または Stage.assignFocus() を使用して、ユーザーインターフェイスエレメントにフォーカスを割り当てることもできます。その後で、イベントリスナーがキーボードのイベントを受信するように、その DisplayObject にイベントリスナーを追加します。

ユーザーインターフェイスデザイン

AIR for TV アプリケーションのユーザーインターフェイスがテレビで正しく機能するように、次のことに関する推奨事項を取り入れてください。

  • アプリケーションの応答性

  • アプリケーションのユーザビリティ

  • ユーザーの個性と期待

応答性

AIR for TV アプリケーションの応答性を可能な限り適切なものにするには、次のヒントを参考にしてください。

  • アプリケーションの初期 SWF ファイルをなるべく小さなサイズにします。

    初期 SWF ファイルでは、アプリケーションを開始するために必要なリソースのみをロードするようにします。例えば、アプリケーションの起動画面イメージのみをロードします。

    この推奨事項はデスクトップ AIR アプリケーションでも有効ですが、AIR for TV デバイスではさらに重要になります。例えば、AIR for TV デバイスには、デスクトップコンピューターに相当する処理能力はありません。また、AIR for TV デバイスではアプリケーションをフラッシュメモリに保存しますが、フラッシュメモリはデスクトップコンピューターのハードディスクほどアクセス速度が早くありません。

  • アプリケーションが少なくとも 1 秒あたり 20 フレームのフレームレートで実行するようにします。

    この目標を達成するようにグラフィックをデザインしてください。グラフィック操作が複雑になると、1 秒あたりのフレーム数に影響することがあります。レンダリングのパフォーマンスを向上するヒントについては、『 Flash Platform のパフォーマンスの最適化 』を参照してください。

    注意: 通常、AIR for TV デバイスのグラフィックハードウェアは 60 Hz または 120 Hz(1 秒あたり 60 回または 120回)のレートで画面を更新します。例えば、ハードウェアは、60 Hz または 120 Hz の画面で表示する場合に、1 秒あたり 30 フレームまたは 60 フレームで、更新のためにステージをスキャンします。ただし、ユーザーがこのような高いフレームレートを利用できるかどうかは、アプリケーションのグラフィック操作の複雑さによって異なります。
  • ユーザー入力の 100~200 ミリ秒以内に画面を更新します。

    更新に時間がかかるとユーザーは待ちきれなくなり、キーを複数回押してしまう場合があります。

ユーザビリティ

AIR for TV アプリケーションのユーザーは、「リビングルーム」環境にいます。テレビから約 3 メートル離れたところに座ってテレビを操作します。また、部屋が暗い場合もあります。通常、ユーザーはリモートコントローラーデバイスを使用して入力します。複数のユーザーがこのアプリケーションを同時に使用したり、順番に使用したりする場合があります。

このため、テレビのユーザビリティを考慮してユーザーインターフェイスをデザインする場合は、次のことを考慮してください。

  • ユーザーインターフェイスエレメントを大きなサイズに設定します。

    テキスト、ボタンなどのユーザーインターフェイスエレメントをデザインするときは、ユーザーがテレビから離れて座っていることを考慮してください。例えば、約 3 メートル離れた場所からでもすべてのエレメントが見やすく、読みやすいように指定します。画面が大きいという理由だけで、画面に多くのエレメントを表示しないようにしてください。

  • 適切なコントラストを使用して、テレビから離れた場所からでも見やすく、読みやすいコンテンツにします。

  • フォーカスが設定されているユーザーインターフェイスエレメントを明るくして、そのエレメントを強調します。

  • 必要な場合のみモーションを使用します。例えば、連続性を示すために画面間をスライドして表示することが便利な場合があります。ただし、モーションがユーザーのナビゲーションに役立っていない場合や、アプリケーションにとって不要である場合は、モーションが邪魔になることもあります。

  • ユーザーインターフェイス全体を対象として、ユーザーが前の状態に戻るための明確な方法を必ず提示します。

リモートコントローラーの使用について詳しくは、 リモートコントローラー入力処理 を参照してください。

ユーザーの個性と期待

一般的に、AIR for TV アプリケーションのユーザーは、楽しくリラックスした環境でテレビ向けのエンターテインメントを求めていることを考慮してください。ユーザーがコンピューターやテクノロジーに詳しいとは限りません。

このため、次の特徴を持つように、AIR for TV アプリケーションをデザインします。

  • 技術用語は使用しないでください。

  • モーダルダイアログの使用は避けてください。

  • 職場や技術的な環境ではなくリビングルーム環境に適した、フレンドリーで形式張らない表現によって説明を示します。

  • テレビ視聴者の要求に応える製品レベルの高画質なグラフィックを使用します。

  • リモートコントローラーデバイスで簡単に操作できるユーザーインターフェイスを作成します。デスクトップまたはモバイル向けのアプリケーションに適したユーザーインターフェイスやデザインエレメントは使用しないでください。たとえば、デスクトップデバイスやモバイルデバイス上のユーザーインターフェイスでは、マウスや指でボタンを指したりクリックすることが行われます。

フォントとテキスト

AIR for TV アプリケーションでは、デバイスフォントと埋め込みフォントのいずれかを使用できます。

デバイスフォントは、デバイスにインストールされているフォントです。すべての AIR for TV デバイスには次のデバイスフォントがインストールされています。

フォント名

説明

_sans

_sans デバイスフォントは、sans-serif 書体です。すべての AIR for TV デバイスにインストールされている _sans デバイスフォントは、Myriad Pro です。通常、テレビでは sans-serif 書体の方が serif 書体よりも見栄えがよくなります。これは、視聴するときの距離が理由です。

_serif

_serif デバイスフォントは、serif 書体です。すべての AIR for TV デバイスにインストールされている _serif デバイスフォントは Minion Pro です。

_typewriter

_typewriter デバイスフォントは、等幅フォントです。すべての AIR for TV デバイスにインストールされている _typewriter デバイスフォントは、Courier Std です。

すべての AIR for TV デバイスには次のアジア地域のデバイスフォントもインストールされています。

フォント名

言語

書体カテゴリー

ロケールコード

RyoGothicPlusN-Regular

日本語

sans

ja

RyoTextPlusN-Regular

日本語

serif

ja

AdobeGothicStd-Light

韓国語

sans

ko

AdobeHeitiStd-Regular

簡体字中国語

sans

zh_CN

AdobeSongStd-Light

簡体字中国語

serif

zh_CN

AdobeMingStd-Light

繁体字中国語

serif

zh_TW および zh_HK

これらの AIR for TV デバイスフォントには、次の特徴があります。

  • Adobe® Type Library のフォントである

  • テレビ上できれいに表示される

  • ビデオの字幕設定用にデザインされている

  • フォントアウトラインであり、ビットマップフォントではない

注意: 多くの場合、デバイス製造元はその他のデバイスフォントもデバイスに含めています。AIR for TV デバイスフォントに加えて、このような製造元提供のデバイスフォントもインストールされます。

アドビでは、デバイス上のすべてのデバイスフォントを表示する FontMaster Deluxe というアプリケーションを提供しています。このアプリケーションは、「 Flash Platform for TV 」で入手できます。

また、AIR for TV アプリケーションにフォントを埋め込むこともできます。埋め込みフォントについて詳しくは、『ActionScript 3.0 開発ガイド』の「 高度なテキストレンダリング 」を参照してください。

TLF テキストフィールドの使用については、以下の実施をお勧めします。

  • アプリケーションの実行対象となっているロケールを活用するために、アジア言語のテキストには TLF テキストフィールドを使用します。TLFTextField オブジェクトに関連付けられた TextLayoutFormat オブジェクトの locale プロパティを設定します。現在のロケールを判断するには、『ActionScript 3.0 開発ガイド』の「 ロケールの選択 」を参照してください。

  • フォントが AIR for TV デバイスフォントに含まれていない場合は、TextLayoutFormat オブジェクトの fontFamily プロパティにフォント名を指定します。デバイス上でこのフォントを使用できる場合は、AIR for TV はこれを使用します。要求したフォントがデバイス上にない場合は、 locale 設定に従って、AIR for TV では、適切な AIR for TV デバイスフォントを代わりに使用します。

  • AIR for TV が適切な AIR for TV デバイスフォントを選択できるように、 locale プロパティの設定と共に、 fontFamily プロパティに _sans _serif または _typewriter を指定します。ロケールに従って、AIR for TV は、アジア地域のデバイスフォントのセットまたはアジア地域以外のデバイスフォントのセットからフォントを選択します。これらの設定により、アジア地域の主要な 4 つのロケールおよび英語に対して、適切なフォントを簡単かつ自動的に使用できるようになります。

注意: アジア地域の言語テキストにクラシックテキストフィールドを使用する場合は、適切なレンダリングが実行されるように、AIR for TV デバイスフォントのフォント名を指定してください。ターゲットデバイスに他のフォントがインストールされていることがわかっている場合には、そのフォントを指定することもできます。

アプリケーションのパフォーマンスについて、次の点を考慮してください。

  • クラシックテキストフィールドは、TLF テキストフィールドよりもパフォーマンスが高速になります。

  • ビットマップフォントを使用するクラシックテキストフィールドは、最高のパフォーマンス速度を実現します。

    ビットマップフォントは、アウトラインフォントとは異なり、各文字のビットマップを提供します。これに対してアウトラインフォントは、各文字のアウトラインデータのみを提供します。デバイスフォントも埋め込みフォントもビットマップフォントにすることができます。

  • デバイスフォントを指定する場合は、デバイスフォントがターゲットデバイスにインストールされていることを確認します。デバイスにインストールされていない場合は、AIR for TV では、デバイスにインストールされている他のフォントを検索し使用します。ただし、この動作によりアプリケーションのパフォーマンス速度が低下します。

  • 他の表示オブジェクトと同様に、TextField オブジェクトがほとんど変化しない場合は、オブジェクトの cacheAsBitmap プロパティを true に設定します。この設定によって、フェード、スライド、アルファブレンドなどのトランジションのパフォーマンスが向上します。拡大/縮小および移動には、 cacheAsBitmapMatrix を使用します。詳しくは、 グラフィックのハードウェアアクセラレーション を参照してください。

ファイルシステムセキュリティ

AIR for TV アプリケーションは AIR アプリケーションであり、デバイスのファイルシステムにアクセスできます。ただし、「リビングルーム」デバイス上では、アプリケーションがデバイスのシステムファイルや他のアプリケーションのファイルにアクセスできなくすることが非常に重要となります。テレビや関連するデバイスのユーザーは、テレビを見ているのであり、デバイスの障害を予期したり我慢することはありません。

このため、AIR for TV アプリケーションに対しては、デバイスのファイルシステムの閲覧が制限されます。ActionScript 3.0 を使用すると、アプリケーションに対して、特定のディレクトリ(およびそのサブディレクトリ)だけにアクセスを許可することができます。また、ActionScript で使用するディレクトリ名は、デバイス上の実際のディレクトリ名ではありません。この追加レイヤーによって、関係のないローカルファイルへの不当なアクセスや不注意なアクセスを行わないよう AIR for TV アプリケーションを保護します。

詳しくは、「 AIR for TV アプリケーションのディレクトリ表示 」を参照してください。

AIR アプリケーションサンドボックス

AIR for TV アプリケーションは、「 AIR アプリケーションサンドボックス 」の説明にあるように、AIR アプリケーションサンドボックス内で実行されます。

AIR for TV アプリケーションにおける唯一の相違点は、ファイルシステムへのアクセスが制限されるということです( ファイルシステムセキュリティ を参照)。

アプリケーションのライフサイクル

デスクトップ環境とは異なり、エンドユーザーは、AIR for TV アプリケーションが実行中のウィンドウを閉じることはできません。このため、アプリケーションを終了するためのユーザーインターフェースメカニズムを取り入れる必要があります。

通常、デバイスでは、エンドユーザーはリモートコントローラーの終了キーを使用してアプリケーションを無条件に終了することができます。しかし、AIR for TV は flash.events.Event.EXITING イベントをアプリケーションに送出しません。このため、アプリケーションの次回起動時に問題のない状態で復元できるよう、アプリケーションの状態を頻繁に保存してください。

HTTP Cookie

AIR for TV は、HTTP 永続 Cookie とセッション Cookie をサポートします。AIR for TV では、各 AIR アプリケーションの Cookie を、アプリケーション固有のディレクトリに保存します。

/app-storage/<app id>/Local Store

Cookie ファイルには cookies という名前が付けられます。

注意: デスクトップデバイスなどの他のデバイス上の AIR では、Cookie はアプリケーションごとに保存されません。アプリケーションごとに Cookie が保存されることにより、AIR for TV のアプリケーションとシステムのセキュリティモデルがサポートされます。

次のように、ActionScript の URLRequest.manageCookies プロパティを使用します。

  • manageCookies true に設定します。この値はデフォルトです。これは、AIR for TV が自動的に HTTP 要求に Cookie を追加し、HTTP 応答内に Cookie を記録しておくことを意味します。

    注意: manageCookies true の場合でも、アプリケーションでは URLRequest.requestHeaders を使用することで HTTP 要求に手動で Cookie を追加できます。この Cookie の名前が、AIR for TV で管理している Cookie の名前と同じ場合、要求には 2 つの Cookie が同じ名前で格納されます。この 2 つの Cookie には異なる値を設定できます。
  • manageCookies false に設定します。この値は、アプリケーションが、HTTP 要求内の Cookie を送信し、その Cookie を HTTP 応答内に記録することを意味します。

詳しくは、「 URLRequest 」を参照してください。