Jetpack Media3 は、Android アプリでリッチな音声と映像のエクスペリエンスを表示できるようにするメディア ライブラリの新しいホームです。Media3 は、デバイス機能に基づく強力なカスタマイズ、信頼性、最適化を備えたシンプルなアーキテクチャを提供し、フラグメンテーションに伴う複雑さを抽象化します。
このドキュメントでは、Media3 で再生と編集のユースケースを実装するための主要な API について説明します。
再生コンポーネント
Media3 には、再生ユースケース向けのいくつかの主要コンポーネントが用意されています。これらのコンポーネントを構成するクラスは、以前の Android メディア ライブラリを扱ったことがあるユーザーにはおなじみでしょう。
次の図は、一般的なアプリでこれらのコンポーネントがどのように組み合わされているかを示しています。
 
  メディア プレーヤー
メディア プレーヤーは、メディア ファイルの再生を可能にするアプリのコンポーネントです。Media3 には次の機能があります。
| クラス | 説明 | 実装の注意事項 | 
|---|---|---|
| Player | Playerは、再生、一時停止、シークなどのメディア プレーヤーの従来のハイレベル機能を定義するインターフェースです。 | Media3 では、 Playerインターフェースは、MediaSessionやMediaControllerなど、複数のコンポーネントによって実装または使用される共通の API です。 | 
| ExoPlayer | ExoPlayerは、Media3 のPlayerインターフェースのデフォルト実装です。 | 
メディア セッション
メディア セッションは、メディア プレーヤーを操作するための汎用的な手段を提供します。これにより、アプリは外部ソースにメディア再生をアドバタイズし、外部ソースから再生制御リクエストを受信できるようになります。Media3 には次の機能があります。
| クラス | 説明 | 実装の注意事項 | 
|---|---|---|
| MediaSession | MediaSession を使用すると、アプリで音声や動画のプレーヤーを操作できます。メディア再生を外部にアドバタイズし、外部ソースから再生コマンドを受信します。 | Media3 では、 MediaSessionはコマンドを実行して現在の状態を取得するためにPlayerを必要とします。 | 
| MediaSessionService | MediaSessionServiceは、バックグラウンド再生を容易にするため、メディア セッションとそれに関連付けられたプレーヤーをアプリのメインActivityとは別のサービスに保持します。 | |
| MediaController | MediaControllerクラスは通常、アプリの外部(他のアプリやシステム自体など)からコマンドを送信するために使用されます。コマンドは、関連付けられたMediaSessionの基になるPlayerに送信されます。 | MediaControllerクラスはPlayerインターフェースを実装しますが、メソッドを呼び出すと、MediaControllerは接続されたMediaSessionに送信されたコマンドを送信します。Google アシスタントなどのクライアント アプリは、MediaControllerを使用して接続されたセッションでの再生を制御できます。 | 
| MediaLibraryService | MediaLibraryServiceはMediaSessionServiceと似ていますが、追加の API が含まれているため、コンテンツ ライブラリをクライアント アプリに提供できます。 | |
| MediaBrowser | MediaBrowserクラスを使用すると、ユーザーはメディア アプリのコンテンツ ライブラリをナビゲートして、再生するアイテムを選択できます。 | MediaBrowserクラスは、MediaControllerインターフェースとPlayerインターフェースの両方を実装します。MediaControllerと同様に、Android Auto などのクライアント アプリは通常MediaBrowserを実装します。 | 
UI コンポーネント
Media3 は、動画の視聴と再生の制御を行うためのデフォルトの UI コンポーネントを提供します。
| クラス | 説明 | 実装の注意事項 | 
|---|---|---|
| PlayerView | 動画と再生コントロールを表示するデフォルトの View。 | ExoPlayer、MediaController、またはその他のカスタムPlayerに接続します。 | 
| PlayerSurface | 動画を表示するための専用の描画 Surfaceを表すコンポーザブル。 | 任意の Playerに接続しますが、再生コントロールは含まれません。フレームのレンダリングにのみ使用され、さまざまな
      
      ContentScaleタイプに応じてサイズ変更できます。このコンポーザブルをはじめ、多くのコンポーザブルが Compose UI ユーティリティにあります。 | 
コンポーネントの編集
Media3 には、メディア編集のユースケース向けの Transformer API が含まれています。たとえば、次のようなユースケースがあります。
- フィルタやエフェクトの追加などの音声と動画の処理
- HDR 動画やスローモーション動画などの特殊な形式の処理
- 複数の入力ファイルを結合するなどの合成
- 最終出力をファイルにエクスポートする
| クラス | 説明 | 実装の注意事項 | 
|---|---|---|
| Transformer | Transformerクラスを使用して、変換の開始と停止を行い、実行中の変換の進行状況の更新を確認します。 | |
| Effects | Effectsオブジェクトは、メディア アイテムに適用する音声効果と動画効果のコレクションです。 | ExoPlayerを使用すると、エクスポート プロセスを開始する前に、メディア アイテムに追加された効果をプレビューできます。 | 
| EditedMediaItem | EditedMediaItemは、処理するメディア アイテムと、そのアイテムに適用する編集内容を表します。 | 
紹介動画
Media3 を構築したエンジニアによる Media3 の概要については、以下の動画をご覧ください。
参考リンク
- メディア デベロッパー センター
- ExoPlayerドキュメント
- 移行ガイド
- GitHub の AndroidX Media3
- Media3 メディア セッションのサンプルアプリ
- Universal Android Music Player サンプルアプリ
