Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

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入力は、独自のコンテンツ、またはHDMI1などのデバイスメーカーのパススルーTV入力からのコンテンツを表示できます。ビルトインチューナーやIPTVチューナーなどの非パススルーTV入力からのコンテンツは表示できません。
  • ハードウェアTV入力アプリのTV_INPUT_HARDWARE権限は、起動時にTV入力サービスに通知し、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入力は「放送ジャンル」に文字列「スポーツ」を入力し、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を介してクエリ、挿入、更新でチェックされます。 TV入力は、それが書き込んだ情報にのみアクセスでき、他のTV入力によって提供される情報から切り離されます。
  • AndroidManifest.xmlを介した読み取り、書き込み権限(ユーザーの同意が必要)。利用可能なチャネルを決定します。
  • signatureOrSystemアプリのみが、データベース全体にアクセスするためのACCESS_ALL_EPG_DATA権限を取得できます。

TV入力マネージャー

TV入力マネージャーは、Android TV入力フレームワーク全体に中央システムAPIを提供します。アプリとTV入力の間のやり取りを調停し、ペアレンタルコントロール機能を提供します。 TV入力マネージャーセッションは、TV入力を使用して1対1で作成する必要があります。 TV入力マネージャーを使用すると、インストールされているTV入力にアクセスできるため、アプリで次のことが可能です。

  • TV入力をリストし、そのステータスを確認する
  • セッションを作成してリスナーを管理する

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

アプリはTvInputCallbackを作成してandroid.media.tv.TvInputManagerに登録し、TV入力の状態が変化したとき、またはTV入力が追加または削除されたTvInputCallbackにコールバックされます。たとえば、TVアプリは、TV入力が切断されたときに、切断されたものとして表示し、その選択を防ぐことで反応できます。

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

TV入力

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

HDMI入力や内蔵チューナー入力などの一部の入力は、基になるハードウェアと直接通信するため、製造元のみが提供できます。その他、IPTV、プレースシフト、外部STBなどは、サードパーティからAPKとしてGoogle Playストアで提供できます。ダウンロードしてインストールしたら、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

上の図は、リモートコントロールのボタンが特定のTV入力に渡され、ピクチャーインピクチャー(PIP)ディスプレイが表示される様子を示しています。これらのボタンの押下は、デバイスの製造元から提供されたハードウェアドライバーによって解釈され、ハードウェアスキャンコードをAndroidキーコードに変換し、それらを標準のAndroid 入力パイプラインの InputReaderおよびInputDispatcher関数にKeyEventsとしてInputDispatcher ます 。フォーカスがある場合、これらはTVアプリでイベントをトリガーします。

システムTV入力のみが、それらがRECEIVE_INPUT_EVENTシステム権限を持っている場合に限り、 InputEventsを受け取る資格があります。 TV入力は、どのInputEventsを消費するかを決定する責任があり、TVアプリが消費する必要のないキーを処理できるようにする必要があります。

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

MHEG-5入力例

次の図は、Android TIFを介してKeyEventsがルーティングされる方法の詳細を示していKeyEvents

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

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

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

この例では:

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

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

TV入力HAL

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

TVアプリ

システムTVアプリは、ライブTVコンテンツをユーザーに提示します。参照TVアプリ(ライブTV)がAndroidプラットフォームと一緒に提供され、そのまま使用したり、カスタマイズしたり、拡張したり、デバイスメーカーが交換したりできます。 ソースコードはAndroidオープンソースプロジェクトで入手できます。 リファレンス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 Appセクションで定義されているように、組み込みチャネルとサードパーティチャネルの視覚的な区別が許可されています。

次のセクションでは、ライブTVアプリケーションがCDD要件を満たす方法を示します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

EPG

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

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

メーカーは、最高のユーザーエクスペリエンスを実現するために、TVアプリを実装してグローバル検索リクエストの検索結果を含める必要があります。 Live 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入力フレームワークのペアレンタルコントロールを、それらに含まれる可能性のある他のメカニズムと組み合わせることが推奨されます。

TVプロバイダー

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

TV入力マネージャー

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

TV入力

TV入力は、表示されているコンテンツのレーティングが変更されたとき(プログラムまたはチャンネルの変更時)、またはペアレンタルコントロールの設定が変更されたとき( ACTION_BLOCKED_RATINGS_CHANGEDおよびACTION_PARENTAL_CONTROLS_ENABLED_CHANGEDときisRatingBlocked() 、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を宣言する必要があります。

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

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

HDMI-CEC

HDMI-CECを使用すると、1つのデバイスで別のデバイスを制御できるため、1つのリモコンでホームシアター内の複数のアプライアンスを制御できます。 Android TVは、セットアップを高速化し、中央のTVアプリを介してさまざまなTV入力を遠隔制御できるようにするために使用されます。たとえば、入力の切り替え、デバイスの電源投入または電源切断などが可能です。

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

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

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

  1. CECバスは、現在アクティブなソースからコマンドを受信して​​、別のソースに切り替えます。
  2. ドライバは、コマンドをHDMI-CEC HALに渡します。
  3. HALはすべてのActiveSourceChangeListeners通知し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アプリにフォーカスを置き、ユーザーのアクションを処理します。

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