Panduan

Media3 1.11 - Apa yang baru?

3 menit untuk dibaca
Melihat profil Toni Heidenreich
Toni Heidenreich Software Engineer, Android

Media3 1.11 telah dirilis. Dengan mendukung sebagian besar aplikasi media Android teratas, rilis ini menghadirkan fitur baru, perbaikan bug, dan peningkatan di seluruh komponen pemutaran, pengeditan, dan UI. Kami memperluas modul UI Jetpack Compose dengan slot Player yang dapat disesuaikan dan default yang mudah digunakan, gestur interaktif, pengamat status, dan pramuat video pendek menggunakan PlayerPool. Kami juga memodernisasi integrasi Media3 Cast dengan dukungan Pengalih Output SystemUI, memperkenalkan ekstensi jaringan klien HTTP Ktor baru, dan menambahkan utilitas muxing baru untuk file Ogg dan WAV.

Baca terus untuk mengetahui sorotan utama, dan lihat catatan rilis lengkap untuk mengetahui daftar perubahan yang komprehensif.

UI Pemutaran dan Compose

Dengan Android yang menjadi Compose-first, kami terus memperluas modul media3-ui-compose dan media3-ui-compose-material3. Update ini memperkenalkan kontrol yang lebih terperinci atas tata letak pemutar, pola interaksi yang lebih kaya, dan integrasi yang lebih mendalam dengan Material3.

Tata letak Pemutar yang dapat disesuaikan

Composable Pemutar Material 3 kini mendukung slot konten khusus untuk topControlscenterControlsbottomControls, dan errorOverlay. Anda dapat memasukkan Composable Anda sendiri atau menggunakan default siap pakai yang dipublikasikan di PlayerDefaults:

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Composable Player juga mengintegrasikan dukungan FocusRequester, yang memungkinkan navigasi D-pad dan keyboard yang lancar di Android TV, perangkat foldable, dan lingkungan desktop. 

player_video.png
Contoh untuk Pemutar Composable dengan kontrol yang disesuaikan

Gestur dan kontrol kecepatan pemutaran

PlaybackSpeedState kini menyediakan API fast-forward/slow-motion. The demo-compose app menampilkannya dengan gestur tekan lama untuk mempercepat pemutaran dan penelusuran dengan ketuk dua kali. Dikombinasikan dengan ProgressSlider yang diperkenalkan di 1.10, UI pemutar Compose kini menawarkan interaksi sentuh dan gestur yang kaya secara langsung.

Pramuat video pendek dengan PlayerPool

Untuk aplikasi dengan feed media jendela geser (misalnya, video vertikal pendek), mengelola beberapa instance ExoPlayer secara efisien adalah tantangan umum. Media3 1.11 memperkenalkan PlayerPool (di common-ktx) dan rememberPooledPlayer (di ui-compose) untuk menangani daur ulang dan pramuat pemutar secara otomatis.

ShortFormPlayerScreen baru di demo-compose menunjukkan hal ini dalam tindakan, feed halaman vertikal tempat pemutar dikumpulkan, dimuat sebelumnya, dan didaur ulang dengan lancar saat pengguna men-scroll.

MiniController

Composable MiniController baru di media3-ui-compose-material3 menyediakan panel pemutaran ringkas yang menampilkan judul, artis, karya seni, dan progres item saat ini bersama dengan kontrol putar/jeda. Sebagai semua Composable default kami di media3-ui-compose-material3, MiniController mendukung integrasi Warna Dinamis Material3, sehingga dapat otomatis beradaptasi dengan tema wallpaper pengguna.Hal ini ideal untuk panel bawah persisten atau fasilitas miniplayer, misalnya saat pengguna menjelajahi konten atau selama sesi Cast aktif.

mini_player.png
Media3 MiniController yang menampilkan gambar album, metadata media, dan kontrol dasar

Penampung status yang diperluas untuk metadata dan error

Kami menambahkan beberapa penampung status reaktif baru ke media3-ui-compose:

  • rememberCurrentMediaItemState – mengamati metadata tentang item yang sedang diputar
  • rememberPlaylistState – mengamati playlist lengkap dan indeks aktif
  • rememberErrorState – melacak error pemutaran, dengan Composable ErrorText yang cocok dan ErrorOverlay default di Material3

Kami akan terus berupaya menambahkan fitur baru dan opsi penyesuaian lainnya dalam rilis mendatang. Harap sampaikan pendapat Anda tentang issue tracker project.

Integrasi Cast yang dimodernisasi

Media3 1.11 memperbarui ekstensi Cast dengan opsi konfigurasi terprogram dan dukungan untuk perutean tingkat OS.

CastParams dan Pengalih Output SystemUI

Anda kini dapat mengonfigurasi ekstensi Cast menggunakan CastParams:

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

Menetapkan setShowSystemOutputSwitcherOnCastIconClick(true) mengonfigurasi MediaRouteButton untuk membuka Pengalih Output SystemUI native Android pada versi platform yang didukung, sehingga memberikan pengalaman pemilih output yang terpadu.

Status MediaRouteButton reaktif di Compose

Aplikasi yang menggunakan Jetpack Compose kini dapat dengan mudah menambahkan tombol perutean Media (juga dikenal sebagai tombol Cast), yang secara otomatis mengamati status dialog dan memperbarui sesuai dengan status tersebut. Tidak diperlukan logika lebih lanjut saat digunakan bersama dengan CastPlayer Media3.

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
Tombol rute media Media3 di aplikasi yang meluncurkan dialog pengalih output default

Peningkatan pemutaran dan sesi inti

Eclipsa Video - metadata HDR dinamis HAGC (API 37+)

_Eclipsa Video_ menjanjikan pengalaman HDR yang lebih konsisten di berbagai perangkat, dengan HDR putih dasar yang konsisten, headroom adaptif bergantung pada layar dan lingkungan sekitar, sehingga memastikan maksud kreatif dipertahankan di semua perangkat.

ExoPlayer kini mendukung pemutaran metadata berwaktu HAGC (ST 2094-50) yang diperlukan untuk media progresif (MP4, Matroska). Pemutar secara otomatis menggabungkan trek metadata HAGC dengan trek video terkait dan mengirimkan metadata di luar band ke dekoder di perangkat API 37+. Di perangkat lama, ExoPlayer akan kembali ke pengalaman pemutaran HDR standar tanpa penyesuaian.  

eclipsa.png
Ilustrasi untuk menunjukkan manfaat HDR Eclipsa Video, seperti kontrak warna yang lebih konsisten

Ekstensi klien HTTP Ktor baru

Modul ekstensi media3-datasource-ktor baru menyediakan KtorDataSource, yang didukung oleh stack HTTP Ktor. Hal ini menawarkan alternatif yang mengutamakan Kotlin dan ramah coroutine untuk modul sumber data Cronet dan OkHttp yang ada.

Koneksi MediaSession asinkron

MediaSession.Callback kini menyertakan onConnectAsync(), yang memungkinkan Anda memproses upaya koneksi pengontrol secara asinkron — misalnya, untuk memverifikasi otorisasi sebelum menerima koneksi. Anda dapat menampilkan Future langsung dengan Futures.immediateFuture(ConnectionResult) untuk perilaku yang sama dengan onConnect yang ada. 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

Default MediaSession yang lebih aman

Untuk aplikasi yang tidak mengganti onConnect atau onConnectAsync di MediaSession.Callback, library kini menggunakan konfigurasi yang lebih aman secara default. Secara khusus, data sesi tidak lagi dibagikan secara default dengan pengontrol yang tidak tepercaya, yang berarti aplikasi pihak ketiga atau non-sistem yang tidak memiliki akses notifikasi dibatasi untuk mengakses data sesi kecuali jika Anda secara eksplisit menerapkan metode callback ini untuk mengotorisasi koneksi.

Implementasi Muxer baru &parsing penampung

OggMuxer dan WavMuxer

Kami telah menambahkan dua muxer khusus baru: OggMuxer untuk muxing stream OPUS dan VORBIS ke dalam file .ogg standar, dan WavMuxer untuk membuat file audio PCM .wav yang tidak terkompresi dan floating-point.

Parsing penampung dan referensi trek

  • Referensi Trek MP4 (tref): Mp4Muxer.addTrackReference memungkinkan menghubungkan metadata dependen atau trek tambahan ke stream video utama.
  • Ekstraksi Bab: Bab QuickTime dan Nero dari file MP4 (.m4a.m4b), dan bab Matroska, kini diekstrak sebagai entri metadata Chapter untuk navigasi buku audio dan podcast.

Gunakan issue tracker untuk melaporkan bug, atau jika Anda memiliki pertanyaan atau permintaan fitur. Kami menantikan balasan dari Anda.

Ditulis oleh:
Lanjutkan membaca