Media3 1.9.0 telah dirilis. Selain perbaikan bug dan peningkatan performa seperti biasa, rilis terbaru ini juga berisi empat modul baru atau yang ditulis ulang:
media3-inspector- Mengekstrak metadata dan frame di luar pemutaranmedia3-ui-compose-material3- Membuat UI Media Compose Material3 dasar hanya dalam beberapa langkahmedia3-cast- Menangani transisi antara pemutaran Cast dan lokal secara otomatismedia3-decoder-av1- Pemutaran AV1 yang konsisten dengan decoder ekstensi yang ditulis ulang berdasarkan library dav1d
Kami juga menambahkan peningkatan pengelolaan cache dan memori ke PreloadManager, serta menyediakan beberapa penyederhanaan ExoPlayer, Transformer, dan MediaSession baru.
Rilis ini juga memberi Anda akses eksperimental pertama ke CompositionPlayer untuk melihat pratinjau pengeditan media.
Baca terus untuk mengetahui lebih lanjut, dan seperti biasa, lihat catatan rilis lengkap untuk mendapatkan ringkasan komprehensif tentang perubahan dalam rilis ini.
Mengekstrak metadata dan frame di luar pemutaran
Ada banyak kasus saat Anda ingin memeriksa media tanpa memulai pemutaran. Misalnya, Anda mungkin ingin mendeteksi format yang ada di dalamnya atau durasinya, atau mengambil thumbnail.
Modul media3-inspector baru menggabungkan semua utilitas untuk memeriksa media tanpa pemutaran di satu tempat:
MetadataRetrieveruntuk membaca durasi, format, dan metadata statis dariMediaItem.FrameExtractoruntuk mendapatkan frame atau thumbnail dari item.MediaExtractorCompatsebagai pengganti langsung class MediaExtractor platform Android, untuk mendapatkan informasi mendetail tentang sampel dalam file.
MetadataRetriever dan FrameExtractor mengikuti pola AutoCloseable sederhana. Lihat halaman panduan baru kami untuk mengetahui detail selengkapnya.
suspend fun extractThumbnail(mediaItem: MediaItem) {
FrameExtractor.Builder(context, mediaItem).build().use {
val thumbnail = frameExtractor.getThumbnail().await()
}
}
Membuat UI Media Compose Material3 dasar hanya dalam beberapa langkah
Pada rilis sebelumnya, kami mulai menyediakan kode konektor antara elemen UI Compose dan instance Pemutar Anda. Dengan Media3 1.9.0, kami menambahkan modul baru media3-ui-compose-material3 dengan tombol dan elemen konten Material3 yang sepenuhnya bergaya. Modul ini memungkinkan Anda membuat UI media hanya dalam beberapa langkah, sekaligus memberikan semua fleksibilitas untuk menyesuaikan gaya. Jika lebih suka membuat gaya UI sendiri, Anda dapat menggunakan blok penyusun yang menangani semua logika update dan koneksi, sehingga Anda hanya perlu berkonsentrasi pada desain elemen UI. Lihat halaman panduan yang diperluas untuk modul UI Compose.
Kami juga masih mengerjakan lebih banyak komponen Compose, seperti panel kontrol prabangun, pengganti lengkap siap pakai untuk PlayerView, serta integrasi subtitle dan iklan.
@Composable
fun SimplePlayerUI(player: Player, modifier: Modifier = Modifier) {
Column(modifier) {
ContentFrame(player) // Video surface and shutter logic
Row (Modifier.align(Alignment.CenterHorizontally)) {
SeekBackButton(player) // Simple controls
PlayPauseButton(player)
SeekForwardButton(player)
}
}
}
UI pemutar Compose sederhana dengan elemen siap pakai
Menangani transisi antara pemutaran Cast dan lokal secara otomatis
CastPlayer dalam modul media3-cast telah ditulis ulang untuk menangani transisi antara pemutaran lokal (misalnya dengan ExoPlayer) dan pemutaran Cast jarak jauh secara otomatis.
Saat menyiapkan MediaSession, cukup buat CastPlayer di sekitar ExoPlayer dan tambahkan MediaRouteButton ke UI Anda, dan selesai.
// MediaSession setup with CastPlayer
val exoPlayer = ExoPlayer.Builder(context).build()
val castPlayer = CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build()
val session = MediaSession.Builder(context, castPlayer).build()
// MediaRouteButton in UI
@Composable fun UIWithMediaRouteButton() {
MediaRouteButton()
}
Integrasi CastPlayer baru di aplikasi demo sesi Media3
Pemutaran AV1 yang konsisten dengan ekstensi yang ditulis ulang berdasarkan dav1d
Rilis 1.9.0 berisi modul ekstensi AV1 yang sepenuhnya ditulis ulang berdasarkan library dav1d yang populer.
Seperti semua modul decoder ekstensi, perhatikan bahwa modul ini memerlukan pembuatan dari sumber untuk menggabungkan kode native yang relevan dengan benar. Penggabungan decoder memberikan dukungan format dan konsistensi di semua perangkat, tetapi karena menjalankan decoding dalam proses Anda, decoder ini paling cocok untuk konten yang dapat Anda percayai.
Mengintegrasikan pengelolaan cache dan memori ke PreloadManager
Kami juga meningkatkan kualitas PreloadManager. Fitur ini sudah memungkinkan Anda memuat media ke dalam memori di luar pemutaran, lalu menyerahkannya dengan lancar ke pemutar saat diperlukan. Meskipun cukup berperforma, Anda tetap harus berhati-hati agar tidak melebihi batas memori dengan memuat terlalu banyak secara tidak sengaja. Jadi, dengan Media3 1.9.0, kami menambahkan dua fitur yang membuat hal ini jauh lebih mudah dan stabil:
- Dukungan cache – Saat menentukan seberapa jauh untuk memuat pramuat, Anda kini dapat memilih
PreloadStatus.specifiedRangeCached(0, 5000)sebagai status target untuk item yang dimuat pramuat. Tindakan ini akan menambahkan rentang yang ditentukan ke cache Anda di disk, bukan memuat data ke memori. Dengan demikian, Anda dapat menyediakan rentang item yang jauh lebih besar untuk dimuat pramuat karena item yang lebih jauh dari item saat ini tidak perlu lagi menggunakan memori. Perhatikan bahwa tindakan ini memerlukan penetapanCachediDefaultPreloadManager.Builder. - Pengelolaan memori otomatis – Kami juga memperbarui antarmuka
LoadControluntuk menangani kasus pramuat dengan lebih baik sehingga Anda kini dapat menetapkan batas memori atas eksplisit untuk semua item yang dimuat pramuat dalam memori. Batas ini adalah 144 MB secara default, dan Anda dapat mengonfigurasi batas diDefaultLoadControl.Builder.DefaultPreloadManagerakan otomatis berhenti memuat pramuat setelah batas tercapai, dan otomatis melepaskan memori item prioritas yang lebih rendah jika diperlukan.
Mengandalkan perilaku default baru yang disederhanakan di ExoPlayer
Seperti biasa, kami juga menambahkan banyak peningkatan inkremental ke ExoPlayer. Berikut beberapa di antaranya:
- Membisukan dan mengaktifkan suara – Kami sudah memiliki metode
setVolume, tetapi kini telah menambahkan metodemutedanunmuteyang praktis untuk memulihkan volume sebelumnya dengan mudah tanpa perlu melacaknya sendiri. - Deteksi pemutar yang macet – Dalam beberapa kasus yang jarang terjadi, pemutar dapat macet dalam status buffering atau pemutaran tanpa membuat progres apa pun, misalnya, karena masalah codec atau konfigurasi yang salah. Pengguna Anda akan merasa kesal, tetapi Anda tidak pernah melihat masalah ini di analisis Anda. Agar lebih jelas, pemutar kini melaporkan
StuckPlayerExceptionsaat mendeteksi status macet. - Wakelock secara default – Pengelolaan wake lock sebelumnya bersifat opsional, sehingga sulit menemukan kasus ekstrem saat progres pemutaran dapat tertunda cukup lama saat berjalan di latar belakang. Sekarang fitur ini bersifat tidak opsional, sehingga Anda tidak perlu khawatir dan juga dapat menghapus semua penanganan wake lock manual di sekitar pemutaran.
- Setelan yang disederhanakan untuk logika tombol CC – Mengubah
TrackSelectionParametersuntuk mengatakan "aktifkan/nonaktifkan subtitle" ternyata sulit dilakukan dengan benar, jadi kami menambahkan opsi booleanselectTextByDefaultsederhana untuk kasus penggunaan ini.
Menyederhanakan preferensi tombol media di MediaSession
Hingga saat ini, menentukan preferensi tombol yang akan muncul di laci notifikasi media di Android Auto atau WearOS memerlukan penentuan tombol dan perintah kustom, meskipun Anda hanya ingin memicu metode pemutar standar.
Media3 1.9.0 memiliki fungsi baru yang membuat hal ini jauh lebih sederhana – Anda kini dapat menentukan preferensi tombol media dengan perintah pemutar standar, tanpa memerlukan penanganan perintah kustom.
session.setMediaButtonPreferences(listOf(
CommandButton.Builder(CommandButton.ICON_FAST_FORWARD) // choose an icon
.setDisplayName(R.string.skip_forward)
.setPlayerCommand(Player.COMMAND_SEEK_FORWARD) // choose an action
.build()
))
Preferensi tombol media dengan tombol maju cepat
CompositionPlayer untuk pratinjau real-time
Rilis 1.9.0 memperkenalkan CompositionPlayer dengan anotasi @ExperimentalApi baru. Anotasi menunjukkan bahwa anotasi ini tersedia untuk eksperimen, tetapi masih dalam pengembangan.
CompositionPlayer adalah komponen baru dalam API pengeditan Media3 yang dirancang untuk pratinjau real-time pengeditan media. Dibangun berdasarkan antarmuka Player Media3 yang sudah dikenal, CompositionPlayer memungkinkan pengguna melihat perubahan yang mereka lakukan sebelum melakukan proses ekspor. Fitur ini menggunakan objek Composition yang sama dengan yang akan Anda teruskan ke Transformer untuk diekspor, sehingga menyederhanakan alur kerja pengeditan dengan menyatukan model data untuk pratinjau dan ekspor.
Sebaiknya mulai gunakan CompositionPlayer dan bagikan masukan Anda, serta pantau terus postingan dan update mendatang ke dokumentasi untuk mengetahui detail selengkapnya.
InAppMuxer sebagai muxer default di Transformer
Transformer kini menggunakan InAppMp4Muxer sebagai muxer default untuk menulis file penampung media. Secara internal, InAppMp4Muxer bergantung pada modul Muxer Media3, yang memberikan perilaku konsisten di semua versi API.
Perhatikan bahwa meskipun Transformer tidak lagi menggunakan MediaMuxer platform Android secara default, Anda tetap dapat menyediakan FrameworkMuxer.Factory melalui setMuxerFactory jika kasus penggunaan Anda memerlukannya.
API penyesuaian kecepatan baru
Rilis 1.9.0 menyederhanakan API penyesuaian kecepatan untuk pengeditan media. Kami telah memperkenalkan metode baru langsung di EditedMediaItem.Builder untuk mengontrol kecepatan, sehingga membuat API lebih intuitif. Anda kini dapat mengubah kecepatan klip dengan memanggil setSpeed(SpeedProvider provider) di EditedMediaItem.Builder:
val speedProvider = object : SpeedProvider {
override fun getSpeed(presentationTimeUs: Long): Float {
return speed
}
override fun getNextSpeedChangeTimeUs(timeUs: Long): Long {
return C.TIME_UNSET
}
}
EditedMediaItem speedEffectItem = EditedMediaItem.Builder(mediaItem)
.setSpeed(speedProvider)
.build()
Pendekatan baru ini menggantikan metode sebelumnya yang menggunakan Effects#createExperimentalSpeedChangingEffects(), yang telah kami hentikan dan akan dihapus pada rilis mendatang.
Memperkenalkan jenis trek untuk EditedMediaItemSequence
Dalam rilis 1.9.0, EditedMediaItemSequence mengharuskan penentuan jenis trek output yang diinginkan selama pembuatan urutan. Perubahan ini memastikan penanganan trek lebih eksplisit dan kuat di seluruh Komposisi.
Hal ini dilakukan melalui konstruktor EditedMediaItemSequence.Builder baru yang menerima kumpulan jenis trek (misalnya, C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO).
Untuk menyederhanakan pembuatan, kami telah menambahkan metode praktis statis baru:
- EditedMediaItemSequence.withAudioFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withVideoFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withAudioAndVideoFrom(List<EditedMediaItem>)
Sebaiknya migrasikan ke konstruktor baru atau metode praktis untuk definisi urutan yang lebih jelas dan andal.
Contoh pembuatan urutan khusus video:
EditedMediaItemSequence videoOnlySequence =
EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO))
.addItem(editedMediaItem)
.build()
Hubungi kami melalui Issue Tracker Media3 jika Anda menemukan bug, atau jika Anda memiliki pertanyaan atau permintaan fitur. Kami menantikan balasan dari Anda.
Lanjutkan membaca
-
Berita Produk
Ekosistem seluler selalu berkembang, menghadirkan peluang dan ancaman baru. Melalui perubahan ini, Android dan Google Play tetap berkomitmen untuk memastikan miliaran pengguna dapat terus menikmati aplikasi mereka dengan percaya diri dan inovasi developer dapat berkembang.
Vijaya Kaza • Waktu baca: 3 menit
-
Berita Produk
Rilis Jetpack Compose April ‘26 stabil. Rilis ini berisi modul Compose inti versi 1.11 (lihat pemetaan BOM lengkap), alat debug elemen bersama, peristiwa trackpad, dan lainnya.
Meghan Mehta • Waktu baca: 5 menit
-
Berita Produk
Android Studio Panda 4 kini stabil dan siap digunakan dalam produksi. Rilis ini menghadirkan Mode Perencanaan, Prediksi Pengeditan Berikutnya, dan lainnya, sehingga memudahkan Anda membuat aplikasi Android berkualitas tinggi.
Matt Dyor • Waktu baca: 5 menit
Terus dapatkan informasi
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.