TV入力フレームワーク

Android TV HAL アイコン

Android TV 入力フレームワーク (TIF) は、Android TV へのライブ コンテンツの配信を簡素化します。 Android TIF は、メーカーが Android TV を制御するための入力モジュールを作成するための標準 API を提供し、TV 入力によって公開されたメタデータを介してライブ TV の検索と推奨を可能にします。

このフレームワークは、TV 規格や地域の要件を実装しようとするものではありませんが、デバイス メーカーが再実装することなく、地域のデジタル TV 放送規格を満たすことを容易にします。このセクションのドキュメントは、カスタム TV 入力を作成したいサードパーティ アプリ開発者にも役立つ場合があります。

コンポーネント

Android TV 入力フレームワークの実装には、TV 入力マネージャーが含まれています。 TIF は、サードパーティ アプリに置き換えることができないシステム アプリである TV アプリと連携して、組み込みの IP チューナー チャンネルにアクセスします。 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 入力が TV 固有のハードウェアにアクセスできるようにするハードウェア定義
  • ペアレンタル コントロール: チャンネルとプログラムのブロックを可能にする技術
  • HDMI-CEC:HDMI経由でさまざまな機器を遠隔操作できる技術
  • チューナー フレームワーク: 内蔵チューナー TV 入力のフレームワーク
  • MediaCas: 条件付きアクセスのフレームワーク
  • Tuner Resource Manager: 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 入力マネージャー サービスを通じて TV 入力 HAL にアクセスできます。 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 入力は、基になる放送規格の値を「放送ジャンル」に設定する役割を担い、「正規ジャンル」フィールドには、 android.provider.TvContract.Genresから適切な関連ジャンルが自動的に設定されます。たとえば、放送規格 ATSC A/65 とジャンル 0x25 (「スポーツ」を意味する) の番組の場合、TV 入力は「放送ジャンル」に文字列「スポーツ」を入力し、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 フィールドです。
  • フラグ:フラグ フィールドは、チャネルを検索、参照、または表示から制限する必要があるかどうかを表します。これは、チャネル レベルでのみ設定できます。すべてのプログラムは、チャネルの設定に従います。
    • 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 を介してクエリ、挿入、更新がチェックされます。 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 アプリによって調整される場合があります。ただし、 TvContract.buildChannelUriForPassthroughInput()を使用して調整できるパススルー TV 入力は除きます。 TV 入力にもボリュームが設定されている場合があります。デバイス メーカーによって提供および署名された TV 入力 (署名アプリ) またはシステム パーティションにインストールされた他のアプリは、TV プロバイダー データベース全体にアクセスできます。このアクセスを使用して、利用可能なすべての TV チャンネルと番組を閲覧および検索するアプリを構築できます。

アプリはandroid.media.tv.TvInputManagerを使用してTvInputCallbackを作成および登録し、TV 入力の状態変更時または TV 入力の追加または削除時にコールバックされる場合があります。たとえば、TV アプリは、TV 入力が切断されたときに、切断されていることを表示して選択できないようにすることで対応できます。

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

テレビ入力

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

HDMI 入力や内蔵チューナー入力などの一部の入力は、基盤となるハードウェアと直接通信するため、メーカーのみが提供できます。 IPTV、プレースシフト、外部 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 でビデオを表示するように要求できます。そのため、メーカー提供の HDMI TV 入力がビデオをレンダリングしている間に、STB TV 入力が TV を制御できます。

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

Android TV KeyEvents
図 6. Android TV KeyEvents

上の図は、リモコンのボタンがピクチャ イン ピクチャ (PIP) 表示用の特定の TV 入力にどのように渡されるかを示しています。これらのボタンの押下は、デバイス メーカーが提供するハードウェア ドライバーによって解釈され、ハードウェア スキャンコードが Android キーコードに変換され、標準の Android入力パイプラインInputReaderおよびInputDispatcher関数に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 の赤いボタンの例

これは、ユーザーがテレビでインタラクティブなアプリにアクセスできるようにするためにヨーロッパで一般的な赤いボタン アプリのフローを示しています。アプリは、このトランスポート ストリームを介して配信できます。ボタンをクリックすると、ユーザーはこれらのブロードキャスト アプリを操作できます。たとえば、これらのブロードキャスト アプリを使用して、関連する Web ページやスポーツのスコアにアクセスできます。

ブロードキャスト アプリが TV アプリとどのようにやり取りするかについては、ブロードキャスト アプリのセクションを参照してください。

この例では:

  1. TV アプリにフォーカスがあり、すべてのキーを受け取ります。
  2. KeyEvents (Red ボタンなど) は、アクティブな TV 入力にInputEvents.
  3. システム TV 入力は MHEG-5 スタックと統合され、 RECEIVE_INPUT_EVENTシステム権限を持ちます。
  4. アクティベーション キーコード (例: 赤ボタン) を受信すると、TV 入力はブロードキャスト アプリをアクティブにします。
  5. TV 入力はKeyEventsInputEventsとして消費し、ブロードキャスト アプリはフォーカスされ、閉じられるまでInputEventsを処理します。

: サードパーティの TV 入力はキーを受信しません。

TV 入力 HAL

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

テレビアプリ

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

デバイス メーカーは、デバイス メーカーまたは国固有の機能を実装するために TV アプリを拡張する場合がありますが、これは TIF または参照 TV アプリの範囲外です。

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

セットアップと構成

  • TV 入力の自動検出
  • TV 入力にチャンネル設定を開始させる
  • ペアレンタル設定を制御する
  • チャンネルを編集する

閲覧中

  • すべての TV チャンネルにアクセスしてナビゲートする
  • テレビ番組情報バーにアクセス
  • 電子番組ガイド (EPG) データの表示
  • 複数のオーディオおよび字幕トラックをサポート
  • ペアレンタル コントロールの PIN チャレンジを提供する
  • TV 標準 (HbbTV など) の TV 入力 UI オーバーレイを許可する
  • TV チャンネルと番組の検索結果を入力する
  • アプリリンク カードを表示する
  • タイムシフト API のサポート
  • DVR 機能を処理し、TV 録画 API をサポートする

この機能セットは、プラットフォーム TIF API が拡張された新しい Android バージョンに合わせて増加します。 CTS Verifier は、互換性テストの範囲を提供します。

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

Android TV は、サードパーティ TV 入力用のデベロッパー API を提供し、インストールされたアプリがソフトウェア チャンネルをライブ TV エクスペリエンスに配信できるようにします。互換性のある Android デバイスの実装を確保するために、システムの TV アプリには、サードパーティの TV 入力とチャンネルをユーザーに表示することに関して、いくつかの責任があります。リファレンス Live TV アプリは、互換性のある実装を提供します。システム TV アプリを置き換える場合、デバイス メーカーは、すべての Android TV デバイスで開発者の期待に応えるために、独自のアプリが同様の互換性を提供していることを確認する必要があります。

システム TV アプリは、デバイスのデフォルトのライブ TV サービスと一緒にサードパーティの入力を表示する必要があります。開発者 API の約束は、ユーザーが標準の TV エクスペリエンス内でチャンネルを (インストールすると) 見つけられるようになることです。

Android CDD の TV アプリ セクションで定義されているように、組み込みチャンネルとサードパーティ チャンネルを視覚的に区別することができます。

次のセクションでは、ライブ TV アプリケーションが CDD 要件をどのように満たしているかを示します。

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

新しいサードパーティの入力/チャネルの追加は、ユーザーが Google Play などのアプリケーション ストアから TV 入力を見つけてインストールすることから始まります。

一部のサードパーティ TV 入力は、チャンネルを TvProvider データベースに自動的に追加します。ただし、ほとんどの場合、ユーザーがチャネルをセットアップしたり、ログインの詳細を提供したり、その他のアクションを実行できるようにするセットアップ アクティビティが提供されます。システム TV アプリは、ユーザーがこのセットアップ アクティビティを有効にできるようにする必要があります。これが、CDD がメインの TV アプリから離れた最小限のナビゲーション アクションであるサードパーティの入力を必要とする理由です。

リファレンス ライブ TV アプリには、入力にアクセスするためのチャンネル ソース メニューが用意されています。

設定に移動
図 8. [設定]に移動します。

[設定] の [チャンネル ソース] に移動します
図 9. [設定] の [チャネル ソース] に移動します。

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

ソースからチャネルを追加する
図 11.ソースからチャネルを追加します。

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

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

ユーザーが通知を通じてアクションを実行する場合、図 10 に示すようにソースを設定することを選択できます。

この分野での開発者の期待については、 TV 入力サービスの定義を参照してください。

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

デバイス メーカーは、特定のチャネルを非表示にして、ユーザーが独自の EPG を管理できるようにする UI を提供する場合があります。ライブ TV にはこの機能が含まれています。

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

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

EPG

サードパーティの入力開発者は、互換性のあるすべての Android TV デバイスで、一般的な使用時にユーザーが自分のチャンネルに簡単に移動できるという確信を持つ必要があります。

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

メーカーは、最高のユーザー エクスペリエンスを確保するために、TV アプリを実装して、グローバル検索要求の検索結果を含める必要があります。ライブ TV は、組み込みの入力だけでなく、サードパーティの入力 (プラットフォームの互換性のために必要) からの結果を提供する実装 ( com.android.tv.search.TvProviderSearchを参照) を提供します。

タイムシフト

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

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

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

DVR

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

これにより、デバイス メーカーは自社の DVR サブシステムを TIF にプラグインし、TV デバイスで DVR 機能を有効化または統合するために必要な統合作業を大幅に削減できます。また、サードパーティが Android TV デバイスに接続できるアフターマーケット DVR システムを提供できるようにします。

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

TV アプリは、ユーザーが 1 つのエピソードの録画を要求したときに、シリーズの今後のすべてのエピソードを録画するかどうかをユーザーに尋ねるなど、より高度なロジックを実装することもできます。

Android TV で可能な DVR 実装のビューについては、次の図を参照してください。

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

  1. TV 入力サービスは、TV アプリが可能なリソースの競合を処理できるように、使用可能なチューナーの数を TV アプリに通知します。
  2. TV アプリは、ユーザーが開始した 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 Verifier は、互換性テスト プログラムの一部として API を実行します。ライブ TV に対してこれを実行すると、EPG、検索、ペアレンタル コントロール、およびサード パーティの入力のコンテキストでその他の要件を確認するのに役立つ場合があります。
  • この分野での開発者の期待については、 TV 入力サービスの定義を参照してください。

ペアレンタルコントロール

ペアレンタル コントロールを使用すると、ユーザーは望ましくないチャンネルやプログラムをブロックできますが、PIN コードを入力してブロックをバイパスできます。

ペアレンタル コントロール機能の責任は、TV アプリ、TV 入力マネージャー サービス、TV プロバイダー、および TV 入力の間で共有されます。

ペアレンタル コントロールは必須であり、CTS Verifier によってカバーされています。

多くの国では、TV 入力がTVContentRating APIを介して使用できるレーティング システムが定義されています。さらに、TV 入力は、「偽の」評価を導入する CTS Verifier テストで実証されているように、独自のカスタム評価システムを登録できます。標準的なレーティング システムが存在する国の場合、デバイス メーカーは、TV 入力フレームワークのペアレンタル コントロールを、含まれる可能性のある他のメカニズムと組み合わせることが推奨されます。

テレビ プロバイダー

各チャンネル行にはCOLUMN_LOCKEDフィールドがあり、PIN コードを入力せずに特定のチャンネルを表示できないようにロックするために使用されます。プログラム フィールドCOLUMN_CONTENT_RATINGは表示用であり、ペアレンタル コントロールを実施するためには使用されません。

TV 入力マネージャー

TV 入力マネージャーは、ブロックされたすべてのTvContentRatingを保存し、 isRatingBlocked()に応答して、指定されたレーティングのコンテンツをブロックする必要があるかどうかを通知します。

テレビ入力

TV 入力は、表示されているコンテンツの評価が変更されたとき (番組またはチャンネルの変更時)、またはペアレンタル コントロール設定が変更されたとき ( ACTION_BLOCKED_RATINGS_CHANGEDおよびACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) に、TV 入力マネージャーでisRatingBlocked()を呼び出して、現在のコンテンツをブロックする必要があるかどうかを確認します。 .コンテンツをブロックする必要がある場合、TV 入力はオーディオとビデオを無効にし、 notifyContentBlocked(TvContentRating)を呼び出して現在のコンテンツがブロックされていることを TV アプリに通知します。コンテンツをブロックしてはならない場合、TV 入力はオーディオとビデオを有効にし、 notifyContentAllowed()を呼び出して現在のコンテンツが許可されていることを TV アプリに通知します。

テレビアプリ

ペアレンタル コントロール API を尊重し、互換性のあるプラットフォームを作成するために、システム TV アプリは、特定のアプリによって登録されたカスタム レーティングを含め、ユーザーがペアレンタル コントロールを管理する方法を提供する必要があります。

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

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

ペアレンタル コントロールの設定を変更するには、TV アプリでパーミッションandroid.permission.MODIFY_PARENTAL_CONTROLSを宣言する必要があります。

デバイス メーカーには、次のことをお勧めします。

  • 互換性要件のデモンストレーションのために、リファレンス ライブ TV アプリケーションに対して CTS Verifier ペアレンタル コントロール テストを実行します。
  • Live TV アプリを独自の TV アプリのリファレンスとして使用してください。特に、 ContentRatingsManagerRatingSystemsFragmentのソースと、それらがカスタム評価を処理する方法を参照してください。

HDMI-CEC

HDMI-CEC を使用すると、1 つのデバイスで別のデバイスを制御できるため、1 つのリモコンでホーム シアター内の複数の機器を制御できます。これは 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. HDMI コントロール サービスは、 ActiveSourceChangeListenerを介してソースの変更が通知されます。
  5. TV 入力マネージャー サービスは、TV アプリがソースを切り替えるためのインテントを生成します。
  6. 次に、TV アプリは、切り替え先の TV 入力用の TV 入力マネージャー セッションを作成し、そのセッションでsetMainを呼び出します。
  7. TV 入力マネージャー セッションは、この情報を HDMI TV 入力に渡します。
  8. HDMI TV 入力は、サイドバンド サーフェスの設定を要求します。
  9. TV 入力マネージャー サービスは、サーフェスが設定されると、対応するルーティング制御コマンドを生成して HDMI コントロール サービスに戻します。

TV 統合ガイドライン

放送アプリ

各国には放送固有の要件 (MHEG、Teletext、HbbTV など) があるため、メーカーは放送アプリ用に独自のソリューションを提供する必要があります。次に例を示します。

  • MHEG: ネイティブ スタック
  • テレテキスト: ネイティブ スタック
  • HbbTV: Vewd Software の HbbTV ソリューション

Android L リリースでは、Android TV は、デバイス メーカーが地域の TV スタックにシステム インテグレータまたは Android ソリューションを使用するか、サーフェスを TV ソフトウェア スタックに渡すか、レガシー スタックとやり取りするために必要なキーコードを渡すことを期待しています。

ブロードキャスト アプリと TV アプリのやり取りは次のとおりです。

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

音声検索/おすすめについては、放送アプリが音声検索のアプリ内検索をサポートしている場合があります。