スタート ガイド

単純なユースケースの場合、ExoPlayer の使用を開始するには、次の手順を実装します。

  1. ExoPlayer を依存関係としてプロジェクトに追加します。
  2. ExoPlayer インスタンスを作成します。
  3. プレーヤーをビューにアタッチします(動画出力とユーザー入力用)。
  4. プレイする MediaItem をプレーヤーに用意します。
  5. 完了したらプレーヤーを放します。

以下では、これらの手順について詳しく説明します。詳細な例については、メインのデモアプリPlayerActivity をご覧ください。

ExoPlayer を依存関係として追加する

ExoPlayer モジュールを追加する

AndroidX Media3 の使用を開始する最も簡単な方法は、アプリ モジュールの build.gradle ファイルに必要なライブラリに Gradle 依存関係を追加する方法です。

たとえば、DASH 再生サポートと UI コンポーネントで ExoPlayer に依存するには、次のようにモジュールへの依存関係を追加します。

Kotlin

implementation("androidx.media3:media3-exoplayer:1.3.1")
implementation("androidx.media3:media3-exoplayer-dash:1.3.1")
implementation("androidx.media3:media3-ui:1.3.1")

Groovy

implementation "androidx.media3:media3-exoplayer:1.3.1"
implementation "androidx.media3:media3-exoplayer-dash:1.3.1"
implementation "androidx.media3:media3-ui:1.3.1"

1.3.1 が推奨バージョンです(最新バージョンはリリースノートで確認できます)。すべてのモジュールが同じバージョンであること。

AndroidX Media3 には、追加機能を提供するために外部ライブラリに依存するライブラリ モジュールがあります。Maven リポジトリから利用できるものもあれば、手動でビルドする必要があるものもあります。詳細については、ライブラリ ディレクトリを参照して各 README をご覧ください。

利用可能なライブラリ モジュールの詳細については、Google Maven AndroidX Media ページをご覧ください。

Java 8 のサポートを有効にする

まだ有効になっていない場合は、ExoPlayer に依存するすべての build.gradle ファイルで Java 8 サポートを有効にする必要があります。そのためには、android セクションに次の行を追加します。

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Multidex を有効にする

Gradle の minSdkVersion が 20 以下の場合、ビルドエラーを防ぐために multidex を有効にする必要があります。

プレーヤーを作成する

ExoPlayer インスタンスは、さまざまなカスタマイズ オプションを提供する ExoPlayer.Builder を使用して作成できます。次のコードは、インスタンスを作成する最も単純な例です。

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

スレッド化に関する注意事項

ExoPlayer インスタンスには、単一のアプリスレッドからアクセスする必要があります。ほとんどの場合、これはアプリのメインスレッドである必要があります。ExoPlayer の UI コンポーネントまたは IMA 拡張機能を使用する場合は、アプリのメインスレッドを使用する必要があります。

ExoPlayer インスタンスにアクセスするスレッドを明示的に指定するには、プレーヤーの作成時に Looper を渡します。Looper が指定されていない場合は、プレーヤーが作成されるスレッドの Looper が使用されます。スレッドに Looper がない場合は、アプリのメインスレッドの Looper が使用されます。いずれの場合も、プレーヤーにアクセスする必要があるスレッドの Looper は、Player.getApplicationLooper を使用して照会できます。

ExoPlayer のスレッドモデルの詳細については、ExoPlayer Javadoc の「スレッドモデル」のセクションをご覧ください。

プレーヤーをビューにアタッチする

ExoPlayer ライブラリは、メディア再生用のさまざまなビルド済み UI コンポーネントを提供します。これには、動画がレンダリングされる PlayerControlViewSubtitleViewSurface をカプセル化する PlayerView が含まれます。PlayerView はアプリのレイアウト xml に含めることができます。たとえば、プレーヤーをビューにバインドするには、次のようにします。

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

PlayerControlView をスタンドアロン コンポーネントとして使用することもできます。これはオーディオのみのユースケースに役立ちます。

ExoPlayer のビルド済み UI コンポーネントの使用は任意です。独自の UI を実装する動画アプリの場合、ターゲットの SurfaceViewTextureViewSurfaceHolderSurface は、ExoPlayer の setVideoSurfaceViewsetVideoTextureViewsetVideoSurfaceHoldersetVideoSurface メソッドを使用して、それぞれ設定できます。ExoPlayer の addTextOutput メソッドを使用して、再生中にレンダリングする必要がある字幕を受け取ることができます。

プレイリストにデータを入力し、プレーヤーを準備する

ExoPlayer では、すべてのメディアが MediaItem で表現されます。メディアを再生するには、対応する MediaItem を作成してプレーヤーに追加し、プレーヤーを準備して、play を呼び出して再生を開始する必要があります。

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer はプレイリストを直接サポートしているため、複数のメディア アイテムを順番に再生するプレーヤーを準備できます。

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

再生中に再生リストを更新できるため、再度プレーヤーを準備する必要はありません。再生リストの入力と操作について詳しくは、再生リストのページをご覧ください。クリッピングや字幕ファイルの追加など、メディア アイテムを作成する際に利用できるさまざまなオプションについて詳しくは、メディア アイテムのページをご覧ください。

プレーヤーを操作する

プレーヤーの準備が整ったら、プレーヤーのメソッドを呼び出して再生を制御できます。よく使用される方法をいくつか紹介します。

  • playpause が再生の開始と一時停止を行います。
  • seekTo: メディア内のシークを許可します。
  • hasPrevioushasNextpreviousnext により、再生リスト内の移動が可能になります。
  • setRepeatMode は、メディアをループするかどうかとその方法を制御します。
  • setShuffleModeEnabled は再生リストのシャッフルを制御します。
  • setPlaybackParameters: 再生速度と音声のピッチを調整します。

プレーヤーが PlayerView または PlayerControlView にバインドされている場合、これらのコンポーネントに対するユーザー操作により、プレーヤー上の対応するメソッドが呼び出されます。

プレーヤーを解放する

動画デコーダなどの限られたリソースを他のアプリで使用できるように、不要になったらプレーヤーを解放することが重要です。これを行うには、ExoPlayer.release を呼び出します。