Untuk kasus penggunaan sederhana, memulai penggunaan ExoPlayer terdiri dari penerapan
langkah-langkah berikut:
- Tambahkan ExoPlayer sebagai dependensi ke project Anda.
- Buat instance
ExoPlayer. - Lampirkan pemutar ke tampilan (untuk output video dan input pengguna).
- Siapkan pemutar dengan
MediaItemuntuk diputar. - Lepaskan pemutar setelah selesai.
Langkah-langkah ini dijelaskan secara lebih mendetail 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 perlukan di 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.11.1")
implementation("androidx.media3:media3-exoplayer-dash:1.11.1")
implementation("androidx.media3:media3-ui:1.11.1")
implementation("androidx.media3:media3-ui-compose-material3:1.11.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.11.1"
implementation "androidx.media3:media3-exoplayer-dash:1.11.1"
implementation "androidx.media3:media3-ui:1.11.1"
implementation("androidx.media3:media3-ui-compose-material3:1.11.1")
dengan 1.11.1 adalah versi pilihan Anda (versi terbaru dapat ditemukan dengan membaca 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. Jelajahi direktori library dan lihat README masing-masing untuk mengetahui detailnya.
Informasi selengkapnya tentang modul library yang tersedia dapat ditemukan di halaman Media AndroidX Google Maven.
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 kode 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 paling sederhana untuk membuat instance.
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, thread ini harus menjadi thread utama aplikasi. Penggunaan 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 thread tempat pemutar dibuat akan
digunakan, atau jika thread tersebut tidak memiliki Looper, Looper thread
utama aplikasi akan digunakan. Dalam semua kasus, Looper thread tempat
pemutar harus diakses dapat dikueri menggunakan
Player.getApplicationLooper.
Untuk mengetahui informasi selengkapnya tentang model threading ExoPlayer, lihat bagian "Model threading" di Javadoc ExoPlayer.
Memasang pemutar ke tampilan
Library media3-ui menyediakan berbagai komponen UI bawaan untuk pemutaran
media. Ini termasuk PlayerView, yang mengenkapsulasi 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
mengimplementasikan 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, pertimbangkan untuk menambahkan atribut keepScreenOn. Anda dapat menyelidiki tindakan lain yang membuat perangkat tetap aktif di
halaman pekerjaan 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 otomatis 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 media diwakili oleh MediaItem. Untuk memutar
media, Anda perlu 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 Anda dapat menyiapkan pemutar dengan beberapa item media untuk 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 mengklip dan melampirkan file subtitel, di halaman Item media.
Mengontrol pemutar
Setelah pemutar disiapkan, pemutaran dapat dikontrol dengan memanggil metode pada pemutar. Berikut adalah beberapa metode yang paling umum digunakan:
playdanpausememulai dan menjeda pemutaran.seekTomemungkinkan pencarian dalam media.hasPrevious,hasNext,previous, dannextmemungkinkan navigasi melalui playlist.setRepeatModemengontrol apakah dan bagaimana media diulang.setShuffleModeEnabledmengontrol pengacakan playlist.setPlaybackParametersmenyesuaikan kecepatan pemutaran dan tinggi nada audio.
Jika pemutar terikat ke PlayerView atau PlayerControlView,
interaksi pengguna dengan komponen ini akan menyebabkan metode yang sesuai pada
pemutar dipanggil.
Lepaskan pemain
Penting untuk merilis pemutar saat tidak lagi diperlukan, sehingga dapat mengosongkan
resource terbatas seperti dekoder video untuk digunakan oleh aplikasi lain. Hal ini
dapat dilakukan dengan memanggil ExoPlayer.release.