Jetpack Media3 の概要

Jetpack Media3 は、Android アプリでリッチな音声と映像のエクスペリエンスを表示できるようにするメディア ライブラリの新しいホームです。Media3 は、デバイス機能に基づく強力なカスタマイズ、信頼性、最適化を備えたシンプルなアーキテクチャを提供し、フラグメンテーションに伴う複雑さを抽象化します。

このドキュメントでは、Media3 で再生と編集のユースケースを実装するための主要な API について説明します。

再生コンポーネント

Media3 には、再生ユースケース向けのいくつかの主要コンポーネントが用意されています。これらのコンポーネントを構成するクラスは、以前の Android メディア ライブラリを扱ったことがあるユーザーにはおなじみでしょう。

次の図は、一般的なアプリでこれらのコンポーネントがどのように組み合わされているかを示しています。

Media3 を使用するメディアアプリのさまざまなコンポーネントは、インターフェースとクラスを共有しているため、いくつかの簡単な方法で接続されます。
図 1: メディアアプリのコンポーネント

メディア プレーヤー

メディア プレーヤーは、メディア ファイルの再生を可能にするアプリのコンポーネントです。Media3 には次の機能があります。

クラス 説明 実装の注意事項
Player Player は、再生、一時停止、シークなどのメディア プレーヤーの従来のハイレベル機能を定義するインターフェースです。 Media3 では、Player インターフェースは、MediaSessionMediaController など、複数のコンポーネントによって実装または使用される共通の API です。
ExoPlayer ExoPlayer は、Media3 の Player インターフェースのデフォルト実装です。

Media3 ExoPlayer の詳細

メディア セッション

メディア セッションは、メディア プレーヤーを操作するための汎用的な手段を提供します。これにより、アプリは外部ソースにメディア再生をアドバタイズし、外部ソースから再生制御リクエストを受信できるようになります。Media3 には次の機能があります。

クラス 説明 実装の注意事項
MediaSession MediaSession を使用すると、アプリで音声や動画のプレーヤーを操作できます。メディア再生を外部にアドバタイズし、外部ソースから再生コマンドを受信します。 Media3 では、MediaSession はコマンドを実行して現在の状態を取得するために Player を必要とします。
MediaSessionService MediaSessionService は、バックグラウンド再生を容易にするため、メディア セッションとそれに関連付けられたプレーヤーをアプリのメイン Activity とは別のサービスに保持します。
MediaController MediaController クラスは通常、アプリの外部(他のアプリやシステム自体など)からコマンドを送信するために使用されます。コマンドは、関連付けられた MediaSession の基になる Player に送信されます。 MediaController クラスは Player インターフェースを実装しますが、メソッドを呼び出すと、MediaController は接続された MediaSession に送信されたコマンドを送信します。Google アシスタントなどのクライアント アプリは、MediaController を使用して接続されたセッションでの再生を制御できます。
MediaLibraryService MediaLibraryServiceMediaSessionService と似ていますが、追加の API が含まれているため、コンテンツ ライブラリをクライアント アプリに提供できます。
MediaBrowser MediaBrowser クラスを使用すると、ユーザーはメディア アプリのコンテンツ ライブラリをナビゲートして、再生するアイテムを選択できます。 MediaBrowser クラスは、MediaController インターフェースと Player インターフェースの両方を実装します。MediaController と同様に、Android Auto などのクライアント アプリは通常 MediaBrowser を実装します。

Media3 MediaSession の詳細

UI コンポーネント

Media3 は、動画の視聴と再生の制御を行うためのデフォルトの UI コンポーネントを提供します。

クラス 説明 実装の注意事項
PlayerView 動画と再生コントロールを表示するデフォルトの View ExoPlayerMediaController、またはその他のカスタム Player に接続します。
PlayerSurface 動画を表示するための専用の描画 Surface を表すコンポーザブル。 任意の Player に接続しますが、再生コントロールは含まれません。フレームのレンダリングにのみ使用され、さまざまな ContentScale タイプに応じてサイズ変更できます。このコンポーザブルをはじめ、多くのコンポーザブルが Compose UI ユーティリティにあります。

Media3 UI の詳細

コンポーネントの編集

Media3 には、メディア編集のユースケース向けの Transformer API が含まれています。たとえば、次のようなユースケースがあります。

  • フィルタやエフェクトの追加などの音声と動画の処理
  • HDR 動画やスローモーション動画などの特殊な形式の処理
  • 複数の入力ファイルを結合するなどの合成
  • 最終出力をファイルにエクスポートする
クラス 説明 実装の注意事項
Transformer Transformer クラスを使用して、変換の開始と停止を行い、実行中の変換の進行状況の更新を確認します。
Effects Effects オブジェクトは、メディア アイテムに適用する音声効果と動画効果のコレクションです。 ExoPlayer を使用すると、エクスポート プロセスを開始する前に、メディア アイテムに追加された効果をプレビューできます。
EditedMediaItem EditedMediaItem は、処理するメディア アイテムと、そのアイテムに適用する編集内容を表します。

Media3 Transformer の詳細

紹介動画

Media3 を構築したエンジニアによる Media3 の概要については、以下の動画をご覧ください。