Melihat Pratinjau Pengeditan dengan CompositionPlayer

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.

Mengambil satu MediaItem atau playlist instance MediaItem.

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 CompositionPlayer didasarkan pada antarmuka Player, beberapa perilakunya berbeda dari ExoPlayer karena bergantung pada Composition untuk pemutaran. Misalnya, CompositionPlayer hanya mendukung penetapan mode pengulangan ke REPEAT_MODE_OFF atau REPEAT_MODE_ALL.
  • Secara default, CompositionPlayer menggunakan SingleInputVideoGraph.Factory, tetapi jika Komposisi Anda menggunakan lebih dari satu urutan dengan item gambar atau video, Anda harus menggunakan setVideoGraphFactory() saat membuat instance CompositionPlayer untuk menggunakan MultipleInputVideoGraph.Factory. SingleInputVideoGraph.Factory sudah 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 dengan EditedMediaItem.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.