テレビ入力フレームワーク

Android TV HAL アイコン

Android TV 入力フレームワーク(TIF)により、Android TV へのライブ コンテンツの配信が簡略化されます。Android TIF には、メーカーが Android TV を制御するための入力モジュールの作成に使用する標準 API が用意されており、TV 入力によって公開されているメタデータを通じてライブテレビの検索とおすすめを有効にできます。

このフレームワークは、TV 規格またはリージョン要件の実装を必要とするものではなく、デバイス メーカーが再実装を行わずに、簡単に地域のデジタルテレビ放送規格を満たせるようにするものです。このセクションのドキュメントは、カスタムの TV 入力を作成するサードパーティ製アプリのデベロッパーに対しても有用な可能性があります。

コンポーネント

Android TV 入力フレームワークの実装には、TV 入力マネージャーが含まれています。TIF は TV アプリと連携して組み込みのチャンネルや IP チューナー チャンネルにアクセスします。TV アプリは、サードパーティ製アプリに置き換えることができないシステムアプリです。TV アプリは、デバイス メーカーや他のプロバイダが TV 入力マネージャーを通じて提供する TV 入力モジュールと通信します。

TV 入力フレームワークは、以下の要素で構成されます。

  • TV プロバイダ(com.android.providers.tv.TvProvider): チャンネル、プログラム、関連付けられた権限のデータベース
  • TV アプリ(com.android.tv.TvActivity): ユーザー インタラクションを処理するアプリ
  • TV 入力マネージャー(android.media.tv.TvInputManager): TV 入力と TV アプリ間の通信を可能にする
  • TV 入力: 物理チューナー、仮想チューナー、入力ポートを表すアプリ
  • TV 入力 HAL(tv_input モジュール): 実装時にシステムの TV 入力がテレビ固有のハードウェアにアクセスできるようにするハードウェア定義
  • 保護者による使用制限: チャンネルとプログラムのブロックを可能にするテクノロジー
  • HDMI-CEC: HDMI 経由のさまざまなデバイスのリモート コントロールを可能にするテクノロジー
  • チューナー フレームワーク: 内蔵チューナーの TV 入力フレームワーク
  • MediaCas: 条件付きアクセスのフレームワーク
  • チューナー リソース マネージャー: TV 入力、MediaCas、内蔵チューナーの入力のハードウェア リソースを管理するためのサービス

これらのコンポーネントについては、以下で詳しく説明します。Android TV 入力フレームワーク アーキテクチャの詳細を以下の図に示します。

Android TIF アーキテクチャの概要
図 1. Android TV 入力フレームワーク(TIF)アーキテクチャ

フロー

アーキテクチャが機能する仕組みは次のとおりです。

  1. ユーザーが TV アプリを表示して操作します。これは、サードパーティ製アプリに置き換えることができないシステムアプリです。
  2. TV アプリには、TV 入力から取得した AV コンテンツが表示されます。
  3. TV アプリは TV 入力と直接通信できません。TV 入力マネージャーは、TV アプリの TV 入力の状態を識別します。これらの制限事項の詳細については、以下の TV 入力マネージャーをご覧ください。

権限

  • signatureOrSystem TV 入力と TV アプリのみが TV プロバイダ データベースへの完全アクセス権を持ち、KeyEvents を受け取ることができます。
  • TV 入力マネージャー サービスを介して TV 入力 HAL にアクセスできるのは、システム TV 入力に限られます。TV 入力には、TV 入力マネージャー セッションを介して 1 対 1 でアクセスできます。
  • サードパーティの TV 入力には、TV プロバイダ データベースへのパッケージ ロック機能があり、一致するパッケージ行に対してのみ読み取りと書き込みを行うことができます。
  • サードパーティ TV 入力は、独自のコンテンツ、またはデバイス メーカーのパススルー TV 入力(HDMI1 など)のコンテンツを表示できます。内蔵チューナーや IPTV チューナーなどのパススルー以外の TV 入力のコンテンツは表示できません。
  • ハードウェアの TV 入力アプリの TV_INPUT_HARDWARE 権限は、起動時に TV 入力マネージャー サービスを呼び出して TV 入力を追加するよう、TV 入力マネージャー サービスに通知します。この権限により、ハードウェアの TV 入力アプリは、TV 入力サービスごとに複数の TV 入力をサポートできます。さらに、サポートされている TV 入力を動的に追加または削除できます。

TV プロバイダ

TV プロバイダ データベースには、TV 入力のチャンネルと番組が保存されます。TV プロバイダはまた、関連付けられている権限の公開・管理を行い、TV 入力が自身の記録のみを表示できるようにします。たとえば、特定の TV 入力が表示できるのは、自身が提供したチャンネルと番組のみであり、他の TV 入力のチャンネルと番組へのアクセスは禁止されています。

TV プロバイダは、「放送ジャンル」を内部で「正規のジャンル」にマッピングします。TV 入力によって「放送ジャンル」に基盤となる放送規格の値が入力され、「正規のジャンル」フィールドには関連付けられた正しい android.provider.TvContract.Genres のジャンルが自動的に入力されます。たとえば、放送規格 ATSC A/65 でジャンルが 0x25 の番組(つまり「スポーツ」)では、TV 入力によって「放送ジャンル」に「Sports」という文字列が入力され、TV プロバイダによって「正規のジャンル」フィールドに、マッピングされた値 android.provider.TvContract.Genres.SPORTS が入力されます。

TV プロバイダの詳細を以下の図に示します。

Android TV プロバイダ
図 2. Android TV プロバイダ

特権システム パーティション内のアプリのみが、TV プロバイダ データベース全体を読み取ることができます。

パススルー TV 入力にチャンネルと番組は保存されません。

チャンネルと番組の標準フィールドに加えて、TV プロバイダのデータベースでは、TV 入力が任意のデータを保存するために使用できる BLOB タイプ フィールド COLUMN_INTERNAL_PROVIDER_DATA もテーブルごとに用意されています。この BLOB データには、関連するチューナーの周波数などのカスタム情報を含めることができ、プロトコル バッファやその他の形式で提供可能です。検索可能フィールドを使用して、特定のチャンネルを検索不可にすることができます(コンテンツ保護に関する国別の要件を満たすためなど)。

データベース フィールドの例

TV プロバイダは、チャンネル(android.provider.TvContract.Channels)テーブルと番組(android.provider.TvContract.Programs)テーブルの構造化データをサポートしています。これらのテーブルは、TV 入力と TV アプリなどのシステムアプリによって入力され、アクセスされます。これらのテーブルには次の 4 つのフィールドがあります。

  • ディスプレイ: ディスプレイ フィールドには、チャンネル名(COLUMN_DISPLAY_NAME)や数字(COLUMN_DISPLAY_NUMBER)など、アプリがユーザーに表示する必要がある情報、または表示されている番組のタイトルが含まれています。
  • メタデータ: チャンネルのトランスポート ストリーム ID(COLUMN_TRANSPORT_STREAM_ID)、元のネットワーク ID(COLUMN_ORIGINAL_NETWORK_ID)、サービス ID(COLUMN_SERVICE_ID)などの関連する標準に基づいてコンテンツを識別するための 3 つのフィールドが存在します。
  • 内部データ: TV 入力によるカスタム利用を目的とするフィールド。
    COLUMN_INTERNAL_PROVIDER_DATA などの一部のフィールドはカスタマイズ可能な BLOB フィールドであり、TV 入力がチャンネルや番組に関する任意のメタデータを格納できます。
  • フラグ: フラグ フィールドは、検索、ブラウジング、視聴に対してチャンネルを制限する必要があるかどうかを表します。これはチャンネル レベルでのみ設定できます。すべての番組はチャンネルでの設定に従います。
    • COLUMN_SEARCHABLE: 特定の地域では、一部のチャンネルからの検索を制限することが必要な場合もあります。COLUMN_SEARCHABLE = 0 は、チャンネルが検索結果に表示されないことを意味します。
    • COLUMN_BROWSABLE: システムアプリにのみ表示されます。アプリによるチャンネルの閲覧を制限します。COLUMN_BROWSABLE = 0 は、チャンネルがチャンネル リストに含まれていないことを意味します。
    • COLUMN_LOCKED: システムアプリにのみ表示されます。PIN コードを入力しない状態で無効なアカウントにチャンネルが表示されることを制限します。COLUMN_LOCKED = 1 は、保護者による使用制限によってチャンネルを保護する必要があることを意味します。

フィールドの詳細なリストについては、android/frameworks/base/media/java/android/media/tv/TvContract.java をご覧ください。

権限とアクセス制御

すべてのフィールドは、対応する行にアクセスできるユーザーに表示されます。ユーザーが直接アクセスできるフィールドはありません。ユーザーに表示されるのは、TV アプリ、システムアプリ、TV 入力で表示されるコンテンツのみです。

  • 各行には PACKAGE_NAME があります。これは、その行を所有するパッケージ(アプリ)で、TvProvider.java を介して Query、Insert、Update にチェックされます。TV 入力は、自身が書き込みを行った情報にのみアクセスでき、他の TV 入力によって提供された情報にはアクセスできません。
  • AndroidManifest.xml による読み取り、書き込み権限(ユーザーの同意が必要です)により、使用可能なチャンネルを判別します。
  • signatureOrSystem アプリのみが ACCESS_ALL_EPG_DATA 権限を取得してデータベース全体にアクセスできます。

TV 入力マネージャー

TV 入力マネージャーは、Android TV 入力フレームワーク全体に対応する一元管理システム API を備えています。アプリと TV 入力間の操作を調整し、保護者による使用制限の機能を提供します。TV 入力マネージャーのセッションは、TV 入力に対して 1 対 1 で作成する必要があります。TV 入力マネージャーは、インストール済みの TV 入力へのアクセスを許可して、アプリが次のことを行えるようにします。

  • TV 入力の一覧表示とステータスの確認
  • セッションの作成とリスナーの管理

セッションの場合、TV 入力は TV プロバイダ データベースに追加された URI のみに合わせて、TV アプリによって調整できます。ただし、パススルー TV 入力の場合は TvContract.buildChannelUriForPassthroughInput() を使用して合わせることができます。TV 入力に音量が設定されている場合もあります。デバイス メーカーが用意して署名した TV 入力(署名アプリ)、またはシステム パーティションにインストールされたその他のアプリには、TV プロバイダ データベース全体へのアクセス権が付与されます。このアクセス権を使用して、利用可能なすべてのテレビ チャンネルと番組をブラウジングおよび検索するアプリを作成できます。

アプリは、TvInputCallback を作成して android.media.tv.TvInputManager に登録し、TV 入力の状態の変化や TV 入力の追加または削除の際に呼び出すことができます。たとえば TV 入力の接続が解除されたとき、TV アプリでは TV 入力を切断されたものとして表示し、選択されることを回避することができます。

TV 入力マネージャーは、TV アプリと TV 入力間の通信を抽象化します。TV 入力マネージャーと TV 入力の標準インターフェースによって、複数のデバイス メーカーが独自の TV アプリを作成できるようにしながら、すべてのサードパーティの TV 入力が、すべての TV アプリで動作するようにサポートできます。

TV 入力

TV 入力とは、AndroidManifest.xml がありインストールされている(Play を介して、プリインストールされている、またはサイドローディングされている)Android アプリを指します。Android TV は、プリインストールされているシステムアプリ、デバイス メーカーによって署名されたアプリ、サードパーティ TV 入力をサポートしています。

一部の入力(HDMI 入力や内蔵のチューナー入力など)は、基盤となるハードウェアで直接通信するため、メーカーによってのみ提供できます。その他(IPTV、Place-shifting、外部 STB など)は、サードパーティが Google Play ストアで APK として提供できます。ダウンロードとインストールが完了すると、TV アプリで新しい入力を選択できます。

パススルー入力の例

Android TV システム入力
図 3. Android TV システム入力

この例では、デバイス メーカー提供の TV 入力が信頼されており、TV プロバイダへの完全アクセス権が付与されています。パススルー TV 入力として、TV プロバイダにチャンネルまたは番組を登録しません。パススルー入力の参照に使用する URI を取得するには、android.media.tv.TvContract のユーティリティ メソッド buildChannelUriForPassthroughInput(String inputId) を使用します。TV アプリは、TV 入力マネージャーと通信して HDMI TV 入力にリーチします。

内蔵チューナーの例

Android TV 内蔵チューナー入力
図 4. Android TV 内蔵チューナー入力

この例では、デバイス メーカー提供の内蔵チューナーの TV 入力が信頼されており、TV プロバイダへの完全アクセス権が付与されています。

サードパーティ入力の例

Android TV のサードパーティ入力
図 5. Android TV のサードパーティ入力

この例では、外部の STB TV 入力はサードパーティによって提供されています。TV 入力は受信した HDMI 動画フィードに直接アクセスできないため、TV 入力マネージャーを介してデバイス メーカー提供の HDMI TV 入力を使用する必要があります。

TV 入力マネージャーを介して、外部の STB TV 入力は HDMI TV 入力と通信し、HDMI1 に動画を表示するように指示できます。STB TV 入力はテレビを操作できますが、メーカー提供の HDMI TV 入力で動画がレンダリングされます。

ピクチャー イン ピクチャー(PIP)の例

Android TV KeyEvents
図 6. Android TV KeyEvents

上の図は、リモコンのボタンがピクチャー イン ピクチャー(PIP)ディスプレイの特定の TV 入力に渡される仕組みを示しています。ボタンを押すと、デバイス メーカー提供のハードウェア ドライバによって解釈され、ハードウェア スキャンコードが Android キーコードに変換されて、標準の Android 入力パイプライン InputReaderInputDispatcher の関数に KeyEvents として渡されます。その後、フォーカスされている場合は、TV アプリのイベントがトリガーされます。

システム TV 入力のみが InputEvents を受信できます。ただし、RECEIVE_INPUT_EVENT システム権限が付与されている場合に限られます。TV 入力は、使用する InputEvents を決定し、使用する必要のないキーを TV アプリで処理できるようにします。

TV アプリは、どのシステム TV 入力がアクティブであるか(ユーザーが選択したもの)を把握します。また、受信 KeyEvents を明確化して、正しい TV 入力マネージャー セッションにルーティングし、dispatchInputEvent() を呼び出してイベントを関連付けられた TV 入力に渡します。

MHEG-5 入力例

KeyEvents が Android TIF を介してルーティングされる仕組みの詳細を以下の図に示します。

Android TV の赤色のボタンの例
図 7. Android TV の赤色のボタンの例

これは、ヨーロッパで広く利用されている赤色のボタンのアプリのフローを示しています。このボタンを使用すると、ユーザーはテレビ画面上で対話型アプリにアクセスできるようになります。アプリはこのトランスポート ストリーム経由で配信できます。ボタンをクリックすると、ユーザーはこれらのブロードキャスト アプリを操作できるようになります。たとえば、これらのブロードキャスト アプリを使用して、関連するウェブページやスポーツの結果にアクセスできます。

ブロードキャスト アプリが TV アプリとどのように連携するかについては、ブロードキャスト アプリのセクションをご覧ください。

この例では

  1. TV アプリがフォーカスされており、すべてのキーを受け取ります。
  2. KeyEvents(赤色のボタンなど)がアクティブな TV 入力に InputEvents. として渡されます。
  3. システムの TV 入力は MHEG-5 スタックと統合され、RECEIVE_INPUT_EVENT システム権限が付与されます。
  4. アクティベーション キーコード(赤色のボタンなど)を受け取ると、TV 入力によってブロードキャスト アプリが有効にされます。
  5. TV 入力は KeyEventsInputEvents として使用し、ブロードキャスト アプリがフォーカスされ、閉じられるまで InputEvents を処理します。

: サードパーティの TV 入力はキーを受け取りません。

TV 入力 HAL

TV 入力 HAL は、テレビに固有のハードウェアにアクセスするための TV 入力の開発を支援します。他の Android HAL と同様に、TV 入力 HAL(tv_input)は AOSP ソースツリーから取得でき、ベンダーは実装を開発します。

: Android 14 以降では、TV 入力 HAL インターフェースは AIDL を使用して定義されます。

TV アプリ

システム TV アプリは、ライブテレビ コンテンツをユーザーに表示します。リファレンス TV アプリ(ライブテレビ)は、Android プラットフォームとともに提供され、そのままの状態での使用、カスタマイズ、拡張、デバイス メーカーによる交換が可能です。ソースコードは Android オープンソース プロジェクトで入手できます。使用を開始するにあたっては、リファレンス TV アプリの記事をご覧ください。

デバイス メーカーは、TV アプリを拡張してデバイス メーカーや国固有の機能を実装することができますが、これは TIF やリファレンス TV アプリの対象ではありません。

システム TV アプリは、少なくとも以下のタスクを処理する必要があります。

セットアップと構成

  • TV 入力を自動検出する
  • TV 入力がチャンネルのセットアップを開始するよう指示する
  • 保護者による設定を制御する
  • チャンネルを編集する

表示中

  • すべてのテレビ チャンネルにアクセスして操作する
  • テレビ番組情報バーにアクセスする
  • 電子番組ガイド(EPG)データを表示する
  • 複数の音声トラックと字幕トラックをサポートする
  • 保護者による使用制限の PIN チャレンジを入力する
  • テレビの標準規格(HbbTV など)に対応する TV 入力 UI オーバーレイを許可する
  • テレビ チャンネルと番組の検索結果を入力する
  • アプリリンク カードを表示する
  • タイムシフト API をサポートする
  • DVR 機能を処理し、テレビ録画の API をサポートする

この機能セットは、プラットフォームの TIF API が拡張される新しい Android バージョンとともに増加します。CTS 検証ツールを使用すると、互換性テスト カバレッジを表示できます。

サードパーティの TV 入力のサポート

Android TV は、サードパーティの TV 入力に対応するデベロッパー API を備えています。これにより、インストール済みのアプリからライブテレビ エクスペリエンスにソフトウェア チャンネルを配信できます。互換性のある Android デバイスの実装を確実に行うために、システム TV アプリは、サードパーティの TV 入力とチャンネルをユーザーに表示する責任の一端を担います。リファレンス ライブテレビ アプリは、互換性のある実装を実現しています。システム TV アプリを交換する場合、すべての Android TV デバイスでデベロッパーの期待に応えるため、デバイス メーカーは、自社のアプリに同様の互換性を持たせる必要があります。

システム TV アプリは、デバイスのデフォルトのライブテレビ サービスとともにサードパーティ入力を表示する必要があります。デベロッパー API は、(インストールを完了したら)ユーザーが標準のテレビ エクスペリエンスでチャンネルを検索できることを保証する必要があります。

Android CDD の TV アプリ セクションで定義されているとおり、組み込みのチャンネルとサードパーティのチャンネル間の視覚的な相違は許容されています。

以降のセクションでは、ライブテレビ アプリが CDD の要件を満たす方法について説明します。

新しいチャンネルのセットアップ

新しいサードパーティの入力 / チャンネルを追加するには、まず Google Play などのアプリストアから TV 入力を見つけてインストールする必要があります。

一部のサードパーティ TV 入力は、チャンネルを TvProvider データベースに自動的に追加します。ただし、ほとんどのサードパーティ TV 入力には、ユーザーがチャンネルをセットアップして、ログインの詳細情報の入力やその他のアクションを行えるようにするセットアップ アクティビティが用意されます。システム TV アプリでは、ユーザーがこのセットアップ アクティビティを有効にできるようにする必要があります。これが、CDD がメインの TV アプリとは別に、サードパーティによる入力操作を最小限に抑えることを要求する理由です。

リファレンス ライブテレビ アプリは、入力にアクセスするためのチャンネル ソース メニューを備えています。

[設定] に移動
図 8. [設定] に移動。

[設定] でチャンネル ソースに移動
図 9. [設定] でチャンネル ソースに移動。

リストからソースを選択
図 10. リストからソースを選択。

ソースからチャンネルを追加
図 11. ソースからチャンネルを追加。

さらに、新しい TvInput がインストールされると、TV アプリメニューの上部に通知カードが表示され、ユーザーは直接セットアップ画面に移動できるようになります。

新しいチャンネル ソースが利用可能であることを示す通知。
図 12. 新しいチャンネル ソースが利用可能であることを示す通知。

ユーザーが通知に従って操作を行うと、図 10 に示すようにソースを選択してセットアップできます。

この分野におけるデベロッパーの期待については、TV 入力サービスを定義するをご覧ください。

チャンネル リストをカスタマイズする

デバイス メーカーは、特定のチャンネルを非表示にして、ユーザーが独自の EPG を管理できるようにする UI を用意することが必要な場合があります。ライブテレビにはこの機能が搭載されています。

[設定] でチャンネル リストを開く。
図 13. [設定] でチャンネル リストを開く。

チャンネル リストをカスタマイズ。
図 14. チャンネル リストをカスタマイズ。

EPG

サードパーティ入力デベロッパーは、すべての Android TV 互換デバイスでの一般的な使用状況においてユーザーがチャンネルに簡単に移動できるようにする必要があります。

サードパーティ入力のチャンネルは、デバイスの標準のライブテレビ エクスペリエンス EPG の一部として表示する必要があります。サードパーティのチャンネルの視覚的な分離または個別のカテゴリを使用できます(Android CDD の TV アプリ セクションを参照)。重要なのは、ユーザーがインストールしたチャンネルを見つけられることです。

メーカーは、ユーザー エクスペリエンスを最大限に高めるために、グローバル検索リクエストに対して検索結果を含めるように TV アプリを実装する必要があります。ライブテレビには、サードパーティ入力(プラットフォームの互換性確保に必要)および組み込み入力からの結果を表示する実装が用意されています(こちらを参照)。

タイムシフト

Android 6.0 以降のデバイスでは、TV アプリが Android フレームワークタイムシフトの API をサポートする必要があります。また、メーカーは、ユーザーによる再生の一時停止、再開、巻き戻し、早送りを可能にする、再生コントロールを TV アプリに実装する必要があります。

タイムシフトをサポートする TV 入力の場合、TV アプリは、再生コントロールを表示する必要があります。

再生コントロール
図 15. 再生コントロール

DVR

Android 7.0 以降のデバイスでは、TV アプリで Android フレームワークのテレビ録画の API をサポートして、録画した番組のサポート、一覧表示、再生を行えるようにする必要があります。

これにより、デバイス メーカーは DVR サブシステムを TIF に接続できるようになり、テレビデバイスで DVR 機能を有効にする、または統合する際の作業の負担が大幅に軽減されます。また、サードパーティは、Android TV デバイスに接続できるアフターマーケット DVR システムを提供することもできます。

ライブ コンテンツの録画に加えて、TV アプリはリソースの競合も処理します。たとえば、デバイスに 2 つのチューナーがある場合は、同時に 2 つの番組を録画できます。ユーザーが 3 つの番組を録画するように要求した場合、TV アプリは競合に対処し、通知を行うか、ユーザーにリクエストの優先度についてのスケジュールを設定するように要求する必要があります。

TV アプリは、ユーザーがあるシリーズの 1 つのエピソードの録画をリクエストしたときに、同シリーズの今後放送されるエピソードもすべて録画したいかどうかをユーザーに尋ねるなど、より洗練されたロジックを実装することもできます。

Android TV で利用できる DVR の実装の詳細を以下の図に示します。

Android TV でのデジタル録画
図 16. Android TV でのデジタル録画

  1. TV 入力サービスは、TV アプリがリソースの潜在的な競合を処理できるように、利用可能なチューナーの数を通知します。
  2. TV アプリは、ユーザーが開始したテレビ番組の録画リクエストを受け取ります。
  3. TV アプリは、内部データベースに録画スケジュールを保存します。
  4. 録画する時刻になると、TV アプリは、録画に関連付けられているチャンネルに切り替えるようリクエストを送信します。
  5. TV 入力サービスは、このリクエストを受け取り、適切なリソースの有無にかかわらず応答し、チャンネルに切り替えます。
  6. 次に、TV アプリは録画を開始するよう求めるリクエストを TV 入力マネージャーに渡します。
  7. TV 入力サービスがこのリクエストを受け取り、録画を開始します。
  8. TV 入力サービスは、実際の動画データをストレージに保存します。ストレージには外部ストレージまたはクラウド ストレージを使用できます。
  9. 録画を終了する時刻になると、TV アプリは TV 入力マネージャーに録画の停止リクエストを渡します。
  10. TV 入力サービスは、リクエストを受信すると録画を停止し、関連付けられているメタデータを TV プロバイダに追加します。これにより、TV アプリはリクエストされた際にユーザーに録画を表示できます。

TV 入力サービスへの録画機能の実装について詳しくは、こちらの TV の録画の記事をご覧ください。

関連リソース

  • Android CDD とドキュメント化されているデベロッパー API は、最終確定済みのリファレンスです。
  • CTS 検証ツールは、互換性テスト プログラムの一環として API を実行します。ライブテレビに対してこれを実行することは、サードパーティ入力のコンテキストで EPG、検索、保護者による使用制限、その他の要件を確認する際の有効な方法です。
  • この分野におけるデベロッパーの期待については、TV 入力サービスを定義するをご覧ください。

保護者による使用制限

保護者による使用制限では、ユーザーが望ましくないチャンネルや番組をブロックできますが、PIN コードを入力するとブロックを回避できます。

保護者による使用制限の機能の責任は、TV アプリ、TV 入力マネージャー サービス、TV プロバイダ、TV 入力の間で共有されます。

保護者による使用制限は必須であり、CTS 検証ツールでカバーされています。

一部の国では、TV 入力が TVContentRating API を介して使用できるレーティング システムを定義しています。さらに、TV 入力では CTS 検証ツールテストで示すように、独自のカスタム レーティング システムを登録できます。これにより、偽の評価が導入されました。標準レーティング システムが存在する国の場合、デバイス メーカーには、TV 入力フレームワークの保護者による使用制限と、組み込むその他のメカニズムを組み合わせることをおすすめします。

TV プロバイダ

各チャンネル行には COLUMN_LOCKED フィールドが存在します。このフィールドを使用すると、PIN コードを入力しない状態で、特定のチャンネルが表示されないようロックできます。番組フィールド COLUMN_CONTENT_RATING は、表示を目的としており、保護者による使用制限の適用には使用されません。

TV 入力マネージャー

TV 入力マネージャーは、ブロックされたすべての TvContentRating を保存し、isRatingBlocked() に応答して、特定のレーティングを持つコンテンツをブロックすべきかどうかをアドバイスします。

TV 入力

TV 入力は、表示されているコンテンツの評価が変更された場合(番組またはチャンネルの変更時)、または(ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED で)保護者による使用制限の設定が変更された場合に、TV 入力マネージャーで isRatingBlocked() を呼び出して、現在のコンテンツをブロックする必要があるかどうかを確認します。コンテンツをブロックする必要がある場合は、TV 入力が音声と動画を無効にして、notifyContentBlocked(TvContentRating) を呼び出すことで現在のコンテンツがブロックされることを TV アプリに通知します。コンテンツをブロックする必要がない場合は、TV 入力が音声と動画を有効にして、notifyContentAllowed() を呼び出すことで現在のコンテンツが許可されていることを TV アプリに通知します。

TV アプリ

保護者による使用制限の API を使用し、互換性のあるプラットフォームを作成するには、システム TV アプリにおいて、特定のアプリで登録されたカスタム評価を含む、保護者による使用制限をユーザーが制御できるようにする必要があります。

現在のコンテンツがブロックされていることを TV 入力が通知するとき、またはユーザーがブロックされたチャンネルを表示しようとしたとき、TV アプリには、PIN コード UI が表示されます。

TV アプリは保護者による使用制限の設定を直接保存しません。ユーザーが保護者による使用制限の設定を変更すると、ブロックされたすべての TvContentRating が TV 入力マネージャーによって保存され、ブロックされたチャンネルは TV プロバイダによって保存されます。

TV アプリで保護者による使用制限の設定を変更するには、android.permission.MODIFY_PARENTAL_CONTROLS 権限を宣言する必要があります。

デバイス メーカーには以下のことをおすすめします。

  • CTS 検証ツールの保護者による使用制限のテストをリファレンス ライブテレビ アプリに対して実行し、互換性要件のデモンストレーションを行います。
  • ライブテレビ アプリを独自の TV アプリのリファレンスとして使用します。特に、ContentRatingsManagerRatingSystemsFragment のソース、およびそれらによってカスタム評価が処理される仕組みを確認してください。

HDMI-CEC

HDMI-CEC を利用すると、一方のデバイスから別のデバイスを操作できるため、1 台のリモコンでホームシアターの複数の家電を操作できるようになります。HDMI-CEC は Android TV によって使用され、セットアップを高速化し、中央の TV アプリを介してさまざまな TV 入力を遠隔から制御できるようにします。たとえば、入力やデバイス電源のオンとオフの切り替えなどを行うことができます。

Android TIF は HDMI コントロール サービスとして HDMI-CEC を実装しています。そのため、デバイス メーカーに必要とされるのは、シンプルな Android TV HAL と連動する低レベルのドライバの開発のみであり、より複雑なビジネス ロジックをスキップできます。標準的な実装では、Android は断片化された実装を削減し選択機能をサポートすることにより、互換性の問題を軽減することを目標としています。HDMI コントロール サービスは、入力や電力などの既存の Android サービスを使用します。

つまり、既存の HDMI-CEC 実装を、Android TIF との相互運用性を高めるために再設計する必要があります。ハードウェア プラットフォームには、CEC 電源やその他のコマンドを受信するためのマイクロプロセッサを使用することをおすすめします。

Android TV での CEC 統合
図 17. Android TV での CEC 統合

  1. CEC バスは、現在アクティブなソースからコマンドを受け取り、別のソースに切り替えます。
  2. ドライバがコマンドを HDMI-CEC HAL に渡します。
  3. HAL はすべての ActiveSourceChangeListeners に通知します。
  4. ActiveSourceChangeListener を介して、HDMI コントロール サービスに対してソースの変更についての通知が行われます。
  5. TV 入力マネージャー サービスは、TV アプリがソースを切り替えるためのインテントを生成します。
  6. TV アプリは、切り替えられる TV 入力に対して TV 入力マネージャー セッションを作成し、そのセッションで setMain を呼び出します。
  7. TV 入力マネージャー セッションは、この情報を HDMI TV 入力に渡します。
  8. HDMI TV 入力は、サイドバンドのサーフェスの設定をリクエストします。
  9. TV 入力マネージャー サービスは、サーフェスが設定されたときに対応するルーティング コントロール コマンドを HDMI コントロール サービスに再びルーティングします。

テレビ統合に関するガイドライン

ブロードキャスト アプリ

国ごとにブロードキャスト固有の要件(MHEG、Teletext、HbbTV など)が存在するため、メーカーはブロードキャスト アプリを対象とする独自のソリューションを用意する必要があります。次に例を示します。

  • MHEG: ネイティブ スタック
  • Teletext: ネイティブ スタック
  • HbbTV: HbbTV のソリューション(Vewd Software)

Android L リリースでは、Android TV はデバイス メーカーがシステム インテグレータまたは Android ソリューションをリージョン TV スタックに使用して、サーフェスを TV ソフトウェア スタックに渡す、または従来のスタックの操作に必要なキーコードを渡すことを想定しています。

ブロードキャスト アプリと TV アプリが連携する仕組みは次のとおりです。

  1. TV アプリがフォーカスされている状態で、すべてのキーを取得しています。
  2. TV アプリは、TV 入力デバイスにキー(赤色のボタンなど)を渡します。
  3. TV 入力デバイスは、内部で従来の TV スタックと統合されています。
  4. アクティベーション キーコード(赤色のボタンなど)を受け取ると、TV 入力デバイスがブロードキャスト アプリを有効にします。
  5. ブロードキャスト アプリは、TV アプリでフォーカスを取得し、ユーザーの操作を処理します。

音声検索 / おすすめでは、ブロードキャスト アプリが音声検索のアプリ内検索をサポートする場合があります。