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

Android は、ハイビジョン TV などの大画面のデバイスで使用するアプリ向けに最適化された、表現力豊かなユーザー エクスペリエンスを実現します。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 では、デフォルトのプレーヤーは Player インターフェースを実装する ExoPlayer クラスです。メディア セッションをプレーヤーに接続すると、アプリはメディア再生を外部に宣伝し、外部ソースから再生コマンドを受信できます。メディア セッションは、これらのコマンドをメディアアプリのプレーヤーに委任します。

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

再生コマンドの動作をカスタマイズする方法など、再生の詳細については、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 ポートや内蔵チューナーなどのハードウェア ソース、およびインターネット経由でストリーミングされる動画などのソフトウェア ソースからライブ動画コンテンツを受信および再生する一元化された方法を提供します。詳細については、テレビ入力サービスを構築するをご覧ください。