Memulai

Untuk kasus penggunaan sederhana, memulai ExoPlayer terdiri dari penerapan langkah-langkah berikut:

  1. Tambahkan ExoPlayer sebagai dependensi ke project Anda.
  2. Buat instance ExoPlayer.
  3. Lampirkan pemutar ke tampilan (untuk output video dan input pengguna).
  4. Siapkan pemutar dengan MediaItem untuk diputar.
  5. Lepaskan pemutar setelah selesai.

Langkah-langkah ini dijelaskan lebih detail di bawah. Untuk contoh lengkap, lihat PlayerActivity di aplikasi demo utama.

Menambahkan ExoPlayer sebagai dependensi

Menambahkan modul ExoPlayer

Cara termudah untuk mulai menggunakan AndroidX Media3 adalah dengan menambahkan dependensi gradle pada library yang Anda butuhkan dalam file build.gradle modul aplikasi Anda.

Misalnya, untuk bergantung pada ExoPlayer dengan dukungan pemutaran DASH dan komponen UI, Anda dapat menambahkan dependensi pada modul seperti ini:

Kotlin

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

Groovy

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

dengan 1.10.0 adalah versi pilihan Anda (versi terbaru dapat ditemukan dengan melihat catatan rilis). Semua modul harus memiliki versi yang sama.

AndroidX Media3 memiliki modul library yang bergantung pada library eksternal untuk menyediakan fungsi tambahan. Beberapa tersedia dari repositori Maven, sedangkan yang lain harus dibuat secara manual. Telusuri direktori library dan lihat README individual untuk mengetahui detailnya.

Informasi selengkapnya tentang modul library yang tersedia dapat ditemukan di halaman Google Maven AndroidX Media.

Mengaktifkan dukungan Java 8

Jika belum diaktifkan, Anda harus mengaktifkan setidaknya dukungan Java 8 di semua file build.gradle yang bergantung pada ExoPlayer, dengan menambahkan hal berikut ke bagian android:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Membuat pemutar

Anda dapat membuat instance ExoPlayer menggunakan ExoPlayer.Builder, yang menyediakan berbagai opsi penyesuaian. Kode berikut adalah contoh pembuatan instance yang paling sederhana.

Kotlin

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

Java

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

Catatan tentang threading

Instance ExoPlayer harus diakses dari satu thread aplikasi. Untuk sebagian besar kasus, ini harus menjadi thread utama aplikasi. Menggunakan thread utama aplikasi adalah persyaratan saat menggunakan komponen UI ExoPlayer atau ekstensi IMA.

Thread tempat instance ExoPlayer harus diakses dapat ditentukan secara eksplisit dengan meneruskan Looper saat membuat pemutar. Jika tidak ada Looper yang ditentukan, Looper dari thread tempat pemutar dibuat akan digunakan, atau jika thread tersebut tidak memiliki Looper, Looper dari thread utama aplikasi akan digunakan. Dalam semua kasus, Looper dari thread tempat pemutar harus diakses dapat dikueri menggunakan Player.getApplicationLooper.

Untuk mengetahui informasi selengkapnya tentang model threading ExoPlayer, lihat "Threading model" bagian dari ExoPlayer Javadoc.

Melampirkan pemutar ke tampilan

Library media3-ui menyediakan berbagai komponen UI bawaan untuk pemutaran media. Komponen ini mencakup PlayerView, yang merangkum PlayerControlView, SubtitleView, dan Surface tempat video dirender. PlayerView dapat disertakan dalam xml tata letak aplikasi Anda. Misalnya, untuk mengikat pemutar ke tampilan:

Kotlin

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

Java

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

Penggunaan komponen UI bawaan Media3 bersifat opsional. Untuk aplikasi video yang menerapkan UI-nya sendiri, target SurfaceView, TextureView, SurfaceHolder atau Surface dapat ditetapkan menggunakan metode setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder, dan setVideoSurface Player masing-masing. Callback Listener.onCues dapat digunakan untuk menerima teks yang harus dirender selama pemutaran dan setImageOutput dapat digunakan untuk menerima gambar yang didekode.

Untuk pengalaman pengguna yang lebih nyaman, sebaiknya tambahkan atribut keepScreenOn. Anda dapat menyelidiki tindakan lain yang membuat perangkat tetap aktif di halaman tugas latar belakang.

android:keepScreenOn="true"

Jika aplikasi Anda menggunakan Jetpack Compose untuk UI-nya, Anda dapat menggunakan Composable Player dari library media3-ui-compose-material3. Player menampilkan video dan menyertakan nilai yang telah diisi sebelumnya untuk slot kontrol pemutaran. Untuk melampirkan objek androidx.media3.common.Player ke Composable androidx.media3.ui.compose.material3.Player, cukup teruskan sebagai argumen:

// Bind the player to the composable.
Player(player = player)

Baca selengkapnya tentang penggunaan komponen UI Media3 dan penyesuaiannya di halaman UI.

Mengisi playlist dan menyiapkan pemutar

Di ExoPlayer, setiap bagian media direpresentasikan oleh MediaItem. Untuk memutar bagian media, Anda harus membuat MediaItem yang sesuai, menambahkannya ke pemutar, menyiapkan pemutar, dan memanggil play untuk memulai pemutaran:

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 mendukung playlist secara langsung, sehingga pemutar dapat disiapkan dengan beberapa item media yang akan diputar satu per satu:

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();

Playlist dapat diperbarui selama pemutaran tanpa perlu menyiapkan pemutar lagi. Baca selengkapnya tentang mengisi dan memanipulasi playlist di halaman Playlist. Baca selengkapnya tentang berbagai opsi yang tersedia saat membuat item media, seperti kliping dan melampirkan file teks, di halaman Item media.

Mengontrol pemutar

Setelah pemutar disiapkan, pemutaran dapat dikontrol dengan memanggil metode di pemutar. Berikut beberapa metode yang paling umum digunakan:

  • play dan pause memulai dan menjeda pemutaran.
  • seekTo memungkinkan pencarian dalam media.
  • hasPrevious, hasNext, previous, dan next memungkinkan navigasi melalui playlist.
  • setRepeatMode mengontrol apakah dan bagaimana media diulang.
  • setShuffleModeEnabled mengontrol pengacakan playlist.
  • setPlaybackParameters menyesuaikan kecepatan pemutaran dan nada audio.

Jika pemutar terikat ke PlayerView atau PlayerControlView, interaksi pengguna dengan komponen ini akan menyebabkan metode yang sesuai pada pemutar dipanggil.

Melepaskan pemutar

Penting untuk melepaskan pemutar jika tidak lagi diperlukan, sehingga dapat mengosongkan resource terbatas seperti dekoder video untuk digunakan oleh aplikasi lain. Hal ini dapat dilakukan dengan memanggil ExoPlayer.release.