メディアアプリを Android TV に拡張する

Android は、ハイビジョン テレビのような大画面のデバイスで使用するアプリ向けに最適化した、機能豊富なユーザー エクスペリエンスを提供します。Android TV 向けにアプリを開発することで、アプリのユーザー層を拡大できます。このドキュメントでは、効果的に行う方法について説明します。

TV アプリを作成する

TV アプリには、スマートフォンやタブレット向けのアプリと同じ構造を使用します。そのため、Android アプリのビルドに関する既知の技術を使用して新たな TV アプリを作成したり、既存のアプリを TV デバイスでも使用できるように拡張したりできます。

ただし、TV ユーザーのインタラクション モデルは、スマートフォンやタブレットのようなデバイスの場合と大きく異なっています。TV デバイス向けアプリがユーザーに受け入れられるには、3 メートル離れた場所からでも見やすい新しいレイアウト デザインや、リモコンの矢印ボタンと選択ボタンだけで操作できるナビゲーションが必要です。

TV ハードウェア コントローラの処理方法、TV レイアウトの作成、TV ナビゲーションの作成などの考慮事項について詳しくは、TV アプリをビルドするをご覧ください。

Media3 ExoPlayer を使用する

Jetpack Media3 は、再生、一時停止、シーク、トラック情報の表示などの基本機能を定義する Player インターフェースを提供します。ExoPlayer は、Media3 におけるこのインターフェースのデフォルト実装です。

Android の MediaPlayer API と比較して、複数のストリーミング プロトコルのサポート、デフォルトの音声と動画のレンダラ、メディア バッファリングを処理するコンポーネントなどの便利な機能が追加されています。

ExoPlayer はカスタマイズと拡張が可能で、Google Play ストア アプリのアップデートを通じて更新できます。詳しくは、Media3 ExoPlayer をご覧ください。

Media3 MediaSession を使用する

MediaSession は、システムがアプリの音声や動画のプレーヤーを操作するための汎用的な手段を提供します。Media3 が以前のメディア API と異なる主な特徴の 1 つは、コンポーネント間のコネクタが不要になったことです。

新しい MediaSession クラスは、Player インターフェースを実装する任意のクラスを受け取ります。ExoPlayer と MediaController はどちらも、そのインターフェースを実装するクラスです。これにより、コンポーネント間のやり取りが大幅に簡素化されます。詳しくは、プレーヤー インターフェースをご覧ください。

メディア再生アプリの作成について詳しくは、ExoPlayer を使用して基本的なメディア プレーヤーを作成するをご覧ください。

メディアアプリのエンドユーザーに最適なエクスペリエンスを提供するには、MediaSession を実装する必要があります。そのためには、次のように Player を初期化して MediaSession.Builder に渡します。

Kotlin

val player = ExoPlayer.Builder(context).build()
val mediaSession = MediaSession.Builder(context, player).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();
MediaSession mediaSession = new MediaSession.Builder(context, player).build();

状態の自動処理

Media3 ライブラリは、プレーヤーの状態を使用してメディア セッションを自動的に更新します。そのため、プレーヤーからセッションへのマッピングを手動で処理する必要はありません。これにより、ユーザーは常に再生中のメディアに関する最新情報を確認できます。たとえば、[再生しています] カードで確認できます。

再生を制御およびアドバタイズする

Media3 では、デフォルトのプレーヤーは ExoPlayer クラスです。このクラスは Player インターフェースを実装します。メディア セッションをプレーヤーに接続すると、アプリはメディア再生を外部に通知し、外部ソースから再生コマンドを受信できます。メディア セッションは、これらのコマンドをメディアアプリのプレーヤーに委任します。

メディア セッションは再生を制御するための鍵となります。これにより、外部ソースからのコマンドをメディアの再生を行うプレーヤーにルーティングできます。外部クライアントはメディア コントローラを使用して、メディアアプリに再生コマンドを発行できます。これらのコマンドはメディア セッションで受信され、最終的にメディア プレーヤーに委任されます。

再生コマンドの動作をカスタマイズする方法など、再生について詳しくは、MediaSession を使用して再生を制御およびアドバタイズするをご覧ください。

アプリの中断を回避する

MediaSession を使用すると、次のような不要な中断を回避できます。

  • テレビの電源を切るか、テレビの入力を切り替えると、予期せず再生が継続される。また、テレビのハードウェアのエネルギー消費量も増加します。MediaSession を使用すると、アプリはメディアを再生していることをプラットフォームに通知でき、プラットフォームは再生を停止できることをアプリに通知できます。

  • アプリから切り替えるときや、テレビのディスプレイをオフにすると、音楽の再生が突然停止するMediaSession API を使用すると、バックグラウンド サービスで再生を継続できます。

  • ユーザーが再生を制御できないようにするコンテンツとのやり取りの制限。たとえば、バックグラウンドで音楽を再生しているアプリに戻ったり、音声コマンドをサポートしたりします。アプリに MediaSession を実装すると、ユーザーは音声コマンドを使用して、曲やエピソードのシークやスキップを行えるようになります。

その他の考慮事項

メディアアプリを Android for TV に拡張する際は、アクセシビリティの問題、エンゲージメントを高める方法、ユーザーがコンテンツを見つけられるようにする方法、ゲームや TV 入力サービスを構築する方法を考慮する必要があります。

テレビのユーザー補助機能

支援技術は視覚障がいのあるユーザーをサポートできますが、テレビアプリのコンテンツ検索の過程でユーザー補助機能をサポートすることも重要です。

たとえば、ナビゲーション ガイダンスの提供や要素の適切なラベル付けに特に注意を払い、TV アプリが TalkBack などのユーザー補助機能と適切に連携できるようにします。これらの手順を行うことで、視覚障がいのあるユーザーの利便性を大幅に向上させることができます。

ユーザー補助機能を改善するための最初のステップは、認識することです。テキストの拡大縮小、キーボード レイアウト、音声解説について詳しくは、ユーザー補助のリソースをご覧ください。

Google TV でエンゲージメントを高めるためのおすすめの方法

Android TV 向けに作成されたアプリはすべて、Google TV を搭載したデバイスで動作します。Google TV で最高のユーザー エクスペリエンスを提供するため、次のベスト プラクティスを適用することをおすすめします。

MediaSession を使用して、音声プレーヤーや動画プレーヤーを操作する汎用的な方法を提供する必要があります。実装方法について詳しくは、Media3 MediaSession を使用するをご覧ください。

アプリは、ベースラインとして Google Cast をサポートする必要があります。Android、iOS、Chrome アプリを拡張して、Android TV、Chromecast デバイス、アシスタント デバイスへの音声と動画のストリーミングを可能にします。詳細については、Google Cast のドキュメントをご覧ください。

また、ユーザーの次の操作をサポートすることもできます。

  • メディア アクション フィードを提供するか、「次のおすすめ」を統合することで、複数のサーフェスでコンテンツを見つけやすくする

  • 音声とエンゲージメントを活用するには、アカウントのリンクと利用資格の同期をサポートし、音声キャストを提供し、Cast Connect を有効にします。

  • Google Play 請求サービスを統合し、スムーズな定期購入を提供することで、支払いをより簡単にします。

TV 入力フレームワークを構築する

テレビの生放送やその他の継続的なチャンネル ベースのコンテンツを視聴することは、テレビ利用の大部分を占めています。ユーザーは、チャンネル ブラウジングによってテレビで番組を選択して視聴することに慣れています。TV Input Framework では、テレビ番組ガイドに動画や音楽コンテンツを公開するためのチャンネルを作成できます。

TV Input Framework は、HDMI ポートや内蔵チューナーなどのハードウェア ソース、およびインターネット経由でストリーミングされる動画などのソフトウェア ソースからライブ動画コンテンツを受信および再生する一元化された方法を提供します。詳しくは、テレビ入力サービスをビルドするをご覧ください。