Library Jetpack Media3 menyediakan API CompositionPlayer, sebuah
implementasi Player yang canggih untuk melihat pratinjau pengeditan video secara real time.
Jika aplikasi Anda memungkinkan pengguna mengedit video, seperti menerapkan efek, memangkas, atau menggabungkan beberapa item media input, CompositionPlayer membantu Anda menampilkan pratinjau output yang akurat. Hal ini dapat berguna jika Anda tidak perlu menyimpan hasil edit yang diterapkan, atau untuk memvalidasi bahwa hasil edit dikonfigurasi sesuai yang diinginkan sebelum diterapkan ke video akhir untuk diekspor.
Apakah CompositionPlayer itu?
CompositionPlayer adalah penerapan khusus dari
antarmuka Pemutar, yang dirancang khusus untuk memutar objek Composition.
Composition menentukan
cara penataan aset media input, seperti klip video dan trek audio, serta efek audio dan video yang harus diterapkan padanya. Untuk mempelajari lebih lanjut API
Composition, lihat Menentukan Composition item media.
Tujuan utama CompositionPlayer adalah merender Composition ini,
lengkap dengan semua pengeditan yang ditentukan, secara real-time, sehingga pengguna dapat melihat persis
tampilan hasil pengeditan mereka sebelum melakukan proses ekspor yang berpotensi memakan waktu dan
sumber daya. Objek Composition yang sama kemudian dapat
digunakan dengan instance Transformer untuk diekspor, yang dapat Anda pelajari lebih lanjut
di Mengekspor Composition.
CompositionPlayer versus ExoPlayer
Meskipun CompositionPlayer dan ExoPlayer adalah penerapan Player
dalam Media3, keduanya dioptimalkan untuk kasus penggunaan yang berbeda:
Fitur |
CompositionPlayer |
ExoPlayer |
Input media |
Mengambil satu objek Komposisi, yang dapat terdiri dari beberapa instance EditedMediaItem dengan efek per item. |
|
Linimasa |
Linimasa dan durasi didasarkan pada seluruh Komposisi. |
Linimasa dan durasi sesuai dengan MediaItem yang sedang diputar secara aktif. |
Efek |
Efek ditentukan dalam Komposisi dan dapat diterapkan ke EditedMediaItem individual atau ke seluruh Komposisi. |
Efek ditetapkan pada instance ExoPlayer itu sendiri dengan setVideoEffects(), dan setiap efek diterapkan satu per satu ke setiap item dalam playlist. |
Pada dasarnya, CompositionPlayer paling berguna saat Anda perlu merender
Composition media dan efek yang kompleks, biasanya dalam konteks pengeditan. Gunakan
ExoPlayer untuk pemutaran konten audio atau video serbaguna, atau untuk
melihat pratinjau hasil edit aset tunggal dengan setVideoEffects().
CompositionPlayer untuk pratinjau
Mengintegrasikan CompositionPlayer ke dalam aplikasi Anda memerlukan beberapa langkah penting. Pertama, gunakan pola Builder untuk membuat instance CompositionPlayer, lalu tetapkan Composition yang akan diputar:
val compositionPlayer = CompositionPlayer.Builder(context).build() compositionPlayer.setComposition(composition) compositionPlayer.prepare() compositionPlayer.play()
Untuk mengetahui panduan tentang cara membuat Composition, lihat bagian
Membuat Composition.
Perhatikan bahwa karena CompositionPlayer menerapkan antarmuka Player, Anda dapat
menetapkan output target dan mengontrol pemutar melalui metode
Player standar.
Penanganan error
Lampirkan instance Player.Listener ke CompositionPlayer untuk bereaksi
terhadap peristiwa dan error pemutaran. Callback onPlayerError() juga akan
memunculkan masalah apa pun yang berasal dari komponen khusus pengeditan seperti
Composition atau VideoGraph.Factory. Baca dokumentasi Peristiwa pemutar untuk mengetahui detail selengkapnya.
Pertimbangan Penting
Beberapa fitur dan batasan yang perlu diingat saat Anda menggunakan CompositionPlayer:
- Meskipun
CompositionPlayerdidasarkan pada antarmukaPlayer, beberapa perilakunya berbeda dariExoPlayerkarena bergantung padaCompositionuntuk pemutaran. Misalnya,CompositionPlayerhanya mendukung penetapan mode pengulangan keREPEAT_MODE_OFFatauREPEAT_MODE_ALL. - Secara default,
CompositionPlayermenggunakanSingleInputVideoGraph.Factory, tetapi jika Komposisi Anda menggunakan lebih dari satu urutan dengan item gambar atau video, Anda harus menggunakansetVideoGraphFactory()saat membuat instanceCompositionPlayeruntuk menggunakanMultipleInputVideoGraph.Factory.SingleInputVideoGraph.Factorysudah cukup jika hanya satu urutan yang memiliki item gambar atau video, dan urutan lainnya hanya berisi audio. - Semua item media dalam Komposisi Anda harus memiliki durasi yang ditetapkan secara eksplisit,
baik dengan
MediaItem.Builder.setImageDurationMs()untuk gambar, atau denganEditedMediaItem.Builder.setDurationUs()untuk audio atau video.
Kasus penggunaan berikut didukung:
- Pratinjau aset tunggal.
- Pratinjau urutan tunggal (yaitu, item media berurutan).
- Pratinjau rangkaian video tunggal + rangkaian audio tunggal (misalnya, audio latar belakang).
Kasus penggunaan berikut sedang dalam pengembangan aktif:
- Pratinjau multi-aset, termasuk tata letak seperti picture-in-picture, berdampingan, dan petak, yang melibatkan beberapa urutan video.
- Menyesuaikan pipeline pengeditan dengan mesin grafis yang berbeda.
Permintaan fitur
Jika Anda memiliki permintaan fitur atau masukan untuk CompositionPlayer, ajukan masalah di repositori GitHub Media3.