スタート ガイド

簡単なユースケースで 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.8.0")
implementation("androidx.media3:media3-exoplayer-dash:1.8.0")
implementation("androidx.media3:media3-ui:1.8.0")
implementation("androidx.media3:media3-ui-compose:1.8.0")

Groovy

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

ここで、1.8.0 は優先バージョンです(最新バージョンはリリースノートで確認できます)。すべてのモジュールは同じバージョンである必要があります。

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

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

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

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

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

プレーヤーを作成する

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

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 が使用されます。いずれの場合も、プレーヤーにアクセスする必要があるスレッドの LooperPlayer.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);

ExoPlayer のビルド済み UI コンポーネントの使用は任意です。独自の UI を実装する動画アプリの場合、ExoPlayer の setVideoSurfaceViewsetVideoTextureViewsetVideoSurfaceHoldersetVideoSurface メソッドをそれぞれ使用して、ターゲットの SurfaceViewTextureViewSurfaceHolderSurface を設定できます。Listener.onCues コールバックを使用して、再生中にレンダリングされるキャプションを受け取ることができます。また、setImageOutput を使用して、デコードされた画像を受け取ることができます。

ユーザー エクスペリエンスを向上させるには、keepScreenOn 属性を追加するか、ExoPlayer でウェイクロックを設定することを検討してください。デバイスを起動状態に保つ他のアクションについては、バックグラウンド処理のページで調べることができます。

android:keepScreenOn="true"

Media3 UI コンポーネントの使用方法とカスタマイズ方法については、UI ページをご覧ください。

プレイリストの入力とプレーヤーの準備

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 を呼び出します。