Jetpack Media3 は、Android アプリでリッチなオーディオとビジュアルのエクスペリエンスを表示できるようにするメディア ライブラリの新しいホームです。Media3 は、デバイスの機能に基づいて強力なカスタマイズ、信頼性、最適化を実現するシンプルなアーキテクチャを提供し、断片化に伴う複雑さを抽象化します。
このドキュメントでは、Media3 で再生と編集のユースケースを実装するための主要な API について説明します。
再生コンポーネント
Media3 には、再生のユースケースに対応する主要なコンポーネントがいくつか用意されています。これらのコンポーネントを構成するクラスは、以前の Android メディア ライブラリを使用したことがある方にはおなじみのものです。
次の図は、一般的なアプリでこれらのコンポーネントがどのように組み合わされているかを示しています。
メディア プレーヤー
メディア プレーヤーは、メディア ファイルの再生を可能にするアプリのコンポーネントです。Media3 には、次のものが含まれています。
| クラス | 説明 | 実装の注意事項 |
|---|---|---|
Player |
Player は、再生、一時停止、シークなど、メディア プレーヤーの従来の高レベル機能を定義するインターフェースです。 |
Media3 では、Player インターフェースは、MediaSession や MediaController などの複数のコンポーネントによって実装または使用される共通の API です。 |
ExoPlayer |
ExoPlayer は、Media3 の Player インターフェースのデフォルト実装です。 |
メディア セッション
メディア セッションは、メディア プレーヤーを操作するための汎用的な手段を提供します。これにより、アプリはメディア再生を外部ソースにアドバタイズし、外部ソースから再生コントロール リクエストを受信できます。Media3 には、次のものが含まれています。
| クラス | 説明 | 実装の注意事項 |
|---|---|---|
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 を開発したエンジニアによるこちらの動画をご覧ください。
役に立つリンク
- Media Developer Center
ExoPlayerドキュメント- 移行ガイド
- GitHub の AndroidX Media3
- Media3 メディア セッションのサンプルアプリ
- Universal Android Music Player サンプルアプリ