簡単なユースケースの場合、ExoPlayer
の使用を開始するには、次の手順を実装します。
- 依存関係として ExoPlayer をプロジェクトに追加します。
ExoPlayer
インスタンスを作成します。- プレーヤーをビューにアタッチします(動画出力とユーザー入力用)。
- プレーヤーがプレイできるように
MediaItem
を準備します。 - 完了したらプレーヤーを離します。
以下では、これらの手順について詳しく説明します。完全な例については、メインのデモアプリの PlayerActivity
をご覧ください。
ExoPlayer を依存関係として追加する
ExoPlayer モジュールを追加する
AndroidX Media3 の使用を開始する最も簡単な方法は、アプリ モジュールの build.gradle
ファイルに必要なライブラリの Gradle 依存関係を追加することです。
たとえば、DASH 再生と UI コンポーネントをサポートする ExoPlayer に依存するには、次のようにモジュールに依存関係を追加します。
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
ここで、1.4.1 は任意のバージョンです(最新バージョンはリリースノートで確認できます)。すべてのモジュールが同じバージョンである必要があります。
AndroidX Media3 には、追加機能を提供するために外部ライブラリに依存するライブラリ モジュールがあります。一部は Maven リポジトリから入手できますが、他のものは手動でビルドする必要があります。詳しくは、libraries ディレクトリを参照し、個々の 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
を使用して作成できます。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 の「Threading model」セクションをご覧ください。
プレーヤーをビューにアタッチする
ExoPlayer ライブラリには、メディア再生用のさまざまな事前構築済み UI コンポーネントが用意されています。たとえば、PlayerView
は、動画がレンダリングされる PlayerControlView
、SubtitleView
、Surface
をカプセル化します。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 を実装する動画アプリの場合、ExoPlayer の setVideoSurfaceView
、setVideoTextureView
、setVideoSurfaceHolder
、setVideoSurface
メソッドを使用して、ターゲット SurfaceView
、TextureView
、SurfaceHolder
、Surface
をそれぞれ設定できます。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();
再生中に再生リストを更新でき、プレーヤーを再度準備する必要はありません。再生リストの追加と操作について詳しくは、再生リストのページをご覧ください。メディア アイテムの作成時に利用できるさまざまなオプション(クリップや字幕ファイルの添付など)について詳しくは、メディア アイテムのページをご覧ください。
プレーヤーを操作する
プレーヤーの準備が整ったら、プレーヤーのメソッドを呼び出して再生を制御できます。よく使用される方法の一部を以下に示します。
play
とpause
は、再生を開始または一時停止します。seekTo
を使用すると、メディア内のシークが可能になります。hasPrevious
、hasNext
、previous
、next
を使用すると、再生リスト内を移動できます。setRepeatMode
は、メディアをループするかどうかと、ループする方法の制御に使用します。setShuffleModeEnabled
はプレイリストのシャッフルを制御します。setPlaybackParameters
: 再生速度と音声のピッチを調整します。
プレーヤーが PlayerView
または PlayerControlView
にバインドされている場合、これらのコンポーネントに対するユーザー操作によって、プレーヤーの対応するメソッドが呼び出されます。
プレーヤーをリリースする
プレーヤーが不要になったら解放して、動画デコーダなどの限られたリソースを解放し、他のアプリが使用できるようにすることが重要です。これを行うには、ExoPlayer.release
を呼び出します。