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

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

TV アプリを作成する

TV アプリには、スマートフォンやタブレット向けのアプリと同じ構造を使用します。このアプローチでは、Android 向けアプリの構築についての知識に基づいて新しい 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 入力フレームワークは、ハードウェア ソース(HDMI ポート、内蔵チューナーなど)とソフトウェア ソース(インターネット経由でストリーミングされる動画など)から、ライブ動画コンテンツを受信して再生するための統合方法を提供します。詳細については、テレビ入力サービスを構築するをご覧ください。