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

Android は、高解像度テレビなどの大画面デバイスで動作するアプリ向けに最適化された、リッチなユーザー エクスペリエンスを提供します。Android TV 向けに開発することで、アプリのユーザー層を拡大できます。このドキュメントでは、これを効果的に行う方法について説明します。

テレビアプリを作成する

TV アプリには、スマートフォンやタブレット向けのアプリと同じ構造を使用します。このアプローチにより、Android 向けアプリのビルドに関する既知の知識に基づいて新しい TV アプリを作成することも、既存のアプリを TV デバイスでも実行できるように拡張することもできます。

ただし、テレビのユーザー操作モデルは、スマートフォンやタブレットとは大きく異なります。TV デバイスでアプリを成功に導くには、3 m 離れた場所からでもはっきりと理解できる新しいレイアウトを設計し、十字キーと選択ボタンだけで機能するナビゲーションを提供する必要があります。

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

Media3 ExoPlayer を使用する

Jetpack Media3 には、再生、一時停止、シーク、トラック情報の表示などの基本機能を定義するプレーヤー インターフェースが用意されています。ExoPlayer は、Media3 のこのインターフェースのデフォルト実装です。

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

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

Media3 の MediaSession を使用する

メディア セッションは、システムがアプリのオーディオ プレーヤーや動画プレーヤーとやり取りするための普遍的な方法を提供します。Media3 を以前のメディア API と区別する主な特徴の 1 つは、コンポーネント間のコネクタが不要になったことです。

新しい MediaSession クラスは、プレーヤー インターフェースを実装するクラスを受け取ります。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 クラスです。メディア セッションをプレーヤーに接続すると、アプリはメディアの再生を外部でアドバタイズし、外部ソースから再生コマンドを受信できます。メディア セッションは、これらのコマンドをメディアアプリのプレーヤーに委任します。

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

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

アプリの中断を回避

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

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

  • アプリを終了したり、テレビのディスプレイをオフにしたりすると、音楽の再生が突然停止するMediaSession API を使用すると、バックグラウンド サービスでの継続的な再生が可能になります。

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

その他の考慮事項

メディアアプリを TV 向け Android に拡張する場合は、ユーザー補助機能の問題、エンゲージメントを促進する方法、ユーザーがコンテンツを見つけられるようにする方法、ゲームとテレビ入力サービスの作成方法を考慮する必要があります。

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

支援技術はロービジョンのユーザーを助けることができますが、TV アプリのコンテンツ検出の過程でユーザー補助をサポートすることは重要です。

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

アクセシビリティを向上させるための第一歩は認識です。テキストの拡大縮小、キーボード レイアウト、音声による説明について詳しくは、ユーザー補助機能リソースをご覧ください。

Google TV でエンゲージメントを高めるためのベスト プラクティス

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

オーディオ プレーヤーまたは動画プレーヤーを普遍的な方法で操作するには、MediaSession を使用する必要があります。実装方法について詳しくは、Media3 MediaSession を使用するをご覧ください。

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

また、以下のことについてユーザーをサポートすることもできます。

  • メディア アクション フィードを提供するか、Watch Next を統合することで、さまざまなサーフェスからコンテンツを見つけることができます。

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

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

TV 入力フレームワークを作成する

ライブテレビ番組やその他の継続的なチャンネル ベースのコンテンツの視聴は、テレビ エクスペリエンスの大きな部分を占めています。ユーザーはチャンネル ブラウジングで番組を選択して視聴することに慣れています。TV 入力フレームワークは、TV 番組ガイドでアイデアや音楽コンテンツを公開するためのチャンネルを作成します。

TV 入力フレームワークは、ハードウェア ソース(HDMI ポートや内蔵チューナーなど)とソフトウェア ソース(インターネット経由でストリーミングされる動画など)から、ライブ動画コンテンツを受信して再生するための統一された方法を提供します。詳細については、TV 入力サービスを作成するをご覧ください。