Media3
| Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa | 
|---|---|---|---|---|
| 22 Oktober 2025 | 1.8.0 | - | - | 1.9.0-alpha01 | 
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Media3, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:
Groovy
dependencies { def media3_version = "1.8.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Untuk mengetahui informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Anda dapat menggunakan Issue tracker media3 untuk menemukan jawaban atas pertanyaan, masalah umum dan permintaan fitur, serta mengajukan masalah baru.
Versi 1.9.0
Versi 1.9.0-alpha01
22 Oktober 2025
androidx.media3:media3-*:1.9.0-alpha01 dirilis.
Versi 1.9.0-alpha01 berisi commit ini.
- Common Library:
- Perbarui 
minSdkke23sesuai dengan library AndroidX lainnya. - Tambahkan 
PlayerTransferState, yang memfasilitasi transfer status pemutaran di seluruh instancePlayer. - Tambahkan metode 
void mute()danvoid unmute()ke Player yang mempertahankan dan memulihkan volume Player sebelum dan sesudah menyetelnya ke nol. - Memublikasikan class utilitas 
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManager, danStuckPlayerDetectoryang sebelumnya digunakan olehExoPlayersecara internal untuk memungkinkan penggunaan ulang bagi pemutar lain (#1893). - Memperbaiki penanganan pemroses 
ForwardingPlayersaat pemutar delegasi pokok menggunakan kesamaan referensi untuk membandingkan instance pemroses (#2675). - Tambahkan fungsi ekstensi penangguhan 
Player.listenTodi librarymedia3-common-ktxyang menentukanPlayer.Eventstertentu yang harus ditindaklanjuti. - Memperbaiki error di 
BasePlayer.getBufferedPercentageyang disebabkan oleh overflow bilangan bulat saat posisi buffer yang dilaporkan jauh lebih besar daripada durasi yang dilaporkan (#2750). 
 - Perbarui 
 - ExoPlayer:
- Menambahkan deteksi pemutar yang macet yang memicu error pemutar 
StuckPlayerExceptionjika pemutar tampak macet. Hal ini terjadi dalam kasus berikut, dengan setiap waktu tunggu default dapat dikonfigurasi diExoPlayer.Builderjika diperlukan:- Setelah 10 menit 
STATE_BUFFERINGsaat mencoba memutar dan tidak ada progres buffering. - Setelah 10 detik 
STATE_READYsaat mencoba memutar dan tidak ada progres pemutaran. - Setelah 1 menit 
STATE_READYmelampaui durasi yang dinyatakan tanpa mencapai akhir item. - Setelah 10 menit dengan alasan penekanan pemutaran saat mencoba memutar.
 
 - Setelah 10 menit 
 - Aktifkan penanganan kunci tetap aktif secara default untuk memperbaiki masalah buffering selama pemutaran di latar belakang. Ini sama dengan menyetel
ExoPlayer.Builder.setWakeModekeC.WAKE_MODE_LOCAL. - Tambahkan logika pendengaran untuk memperbarui ID perangkat virtual secara otomatis saat
perubahan dilaporkan ke 
Contextyang awalnya diteruskan keExoPlayer.Builder. - Tambahkan 
ExoPlayer.setVirtualDeviceIduntuk memperbarui ID perangkat virtual secara manual yang diperoleh dariContextyang diteruskan keExoPlayer.Builder. - Pastikan perender tidak menggunakan data dari item playlist berikutnya lebih dari 10 detik sebelum akhir item saat ini.
 - Menambahkan 
setSeekBackIncrementMs,setSeekForwardIncrementMs, dansetMaxSeekToPreviousPositionMskeExoPlayeruntuk memperbarui setelan ini setelah konstruksi (#2736). - Tambahkan fungsi pra-peng-cache-an di 
DefaultPreloadManager. Aplikasi kini dapat menampilkanDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)atauDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)melaluiTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)untuk menunjukkan bahwa item media perlu di-cache sebelumnya. - Gunakan fungsi pra-cache 
DefaultPreloadManagerdi aplikasi demo shortform. - Tambahkan setter 
DefaultLoadControl.Builderuntuk pemutaran lokal dan sesuaikan nilai defaultDefaultLoadControlagar berfungsi dengan baik dengan berbagai file lokal. - Memperbaiki bug yang menyebabkan pemutar tetap berada di
STATE_READYatauSTATE_BUFFERINGsaat playlist kosong disetel. - Meningkatkan kualitas API pengelola pra-muat:
- Tambahkan 
addMediaItems(List<MediaItem>, List<T>)danaddMediaSources(List<MediaSource>, List<T>)yang menambahkan item media atau sumber media secara batch, dan otomatis memanggilinvalidate()setelahnya. - Tambahkan 
removeMediaItems((List<MediaItem>)danremoveMediaSources(List<MediaSource>)yang menghapus item media atau sumber media secara batch, dan pastikan pengelola pramuat tidak memulai pramuat atau melanjutkan pramuat salah satu item atau sumber media tersebut setelah dihapus. - Izinkan 
DefaultPreloadManager.setCurrentPlayingIndex(int)untuk membatalkan validasinya sendiri secara otomatis. Aplikasi tidak perlu lagi memanggilinvalidate()secara eksplisit setelah memperbarui indeks pemutaran saat ini. 
 - Tambahkan 
 - Menambahkan kemampuan untuk melewati reset keyframe untuk pencarian maju dalam grup gambar yang sama saat dalam mode scrubbing.
 - Tambahkan 
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)untuk aplikasi guna menetapkan nilai byte buffer target bagi pemain denganplayerNameyang ditentukan.DefaultLoadControlkini dapat membuat keputusan setiap pemain secara terpisah berdasarkan byte yang dialokasikan dan byte buffer targetnya sendiri. - Tambahkan 
SkipInfokeAdPlaybackState.AdGroupuntuk membawa informasi lewati untuk setiap iklan dalam grup iklan. - Memperbaiki bug saat memanggil 
removeMediaItems(List)selama memutar post-roll menyebabkan error (#2746). - Memperbaiki beberapa gangguan pemutaran playlist saat frame keliru selalu ditetapkan sebagai sampel terakhir dan dirender.
 - Mengaktifkan jalur percobaan ulang jika pemutar gagal membuat ID sesi audio (#2382, #2678).
 - Tambahkan dukungan untuk mengontrol total byte buffer untuk sumber di
DefaultPreloadManageruntuk menghindari total byte buffer untuk pra-pemuatan dari bertambah secara sewenang-wenang. Untuk menggunakan logika kontrol default, Aplikasi dapat menetapkan byte buffer target untuk pra-pemuatan melaluiDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)untukplayerNamePlayerId.Preload.name("preload"), dan menyuntikkanDefaultLoadControlyang dibuat melaluiDefaultPreloadManager.Builder.setLoadControl(LoadControl). 
 - Menambahkan deteksi pemutar yang macet yang memicu error pemutar 
 - CompositionPlayer:
- Publikasikan 
CompositionPlayerdengan anotasi@ExperimentalApibaru untuk menunjukkan bahwa fitur tersebut tersedia untuk eksperimen, tetapi masih dalam pengembangan. Beberapa API kemungkinan akan berubah secara signifikan dalam rilis mendatang, dan ada masalah umum serta batasan pada beberapa kasus penggunaan (beberapa tidak terdokumentasi). - Menambahkan dukungan untuk 
COMMAND_SET_AUDIO_ATTRIBUTESdan penanganan fokus audio diCompositionPlayer. - Menambahkan dukungan untuk perubahan kecepatan dalam urutan sekunder di
CompositionPlayer. 
 - Publikasikan 
 - Transformator:
- Gunakan 
InAppMp4Muxersebagai muxer default. - Menambahkan 
EditedMediaItem.Builder#setSpeed()dan tidak menggunakan lagiEffects#createExperimentalSpeedChangingEffects(). - Mengganti 
forceAudioTrackdanforceVideoTrackdengantrackTypesdiEditedMediaItemSequence. 
 - Gunakan 
 - Pemilihan Trek:
- Tambahkan 
TrackSelectionParameters.selectTextByDefaultuntuk memilih trek teks apa pun tanpa menentukan preferensi lain yang lebih spesifik. - Tambahkan 
preferredVideoLabels,preferredAudioLabels, danpreferredTextLabelsdiTrackSelectionParametersuntuk menentukan preferensi untuk trek dengan label tertentu, misalnya yang dibaca dari tag NAMA HLS (#1666). 
 - Tambahkan 
 - Ekstraktor:
- FLAC: Memperketat deteksi header untuk mengurangi kemungkinan menemukan header palsu dalam data FLAC yang dienkode, sehingga menyebabkan error decoding (#558).
 - MP3: Mengizinkan jeda di antara (dan sebelum) tag ID3 di awal file MP3 (#811, #5718).
 - MP4: Membedakan jenis MIME 
audio/mpeg(MP3),audio/mpeg-L1, danaudio/mpeg-L2dengan melihat nilai lapisan sampel pertama sebelum memancarkan format trek dari ekstraktor (#2683). - MP4: Meningkatkan efisiensi sniffing file yang sangat besar dengan mengasumsikan bahwa kotak 
stblyang lebih besar dari 1 MB menyiratkan bahwa file harus tidak terfragmentasi (#2650). - Matroska: Menambahkan dukungan untuk deteksi DTS-HD (#6225).
 - Memperbaiki masalah di 
MatroskaExtractorsaat pencarian mungkin tidak akurat untuk file dengan beberapa trek. Titik cue kini dikaitkan dengan benar dengan trek masing-masing, sehingga menghasilkan pencarian yang lebih presisi. - MP4: Menambahkan dukungan untuk metadata 
©mvn(nama gerakan) dan©mvi(indeks gerakan), yang kini dikeluarkan sebagai objekTextInformationFramediFormat.metadatadengan IDMVNMdanMVIN(#2754). - MPEG-TS: Memperbaiki 
IllegalArgumentExceptiondariReorderingBufferQueueyang disebabkan oleh paket PES tanpa stempel waktu (#2764). - MP4: Mengabaikan trek dengan kotak 
stsdyang tidak ada (daripada gagal mengurai seluruh file). - Menambahkan dukungan untuk mengekstrak Foto Gerak HEIC. 
HeifExtractorkini dapat mem-parsing file HEIC yang berisi trek video dan audio yang disematkan. - MP3: Mengubah 
FLAG_ENABLE_INDEX_SEEKINGuntuk lebih memilih mencari informasi dari header metadata (seperti Xing dan VBRI) jika tersedia, dan melakukan penggantian ke pencarian berbasis indeks jika tidak ada informasi pencarian lain. Hal ini meningkatkan performa untuk file dengan metadata pencarian (#2839). 
 - Pemeriksa:
- Memperkenalkan modul 
:media3-inspectorbaru yang berfungsi sebagai beranda khusus untuk utilitas pemeriksaan media. Modul ini kini berisiandroidx.media3.inspector.MetadataRetrieverbaru, yang akan menyediakan API terpadu untuk metadata dan ekstraksi frame.androidx.media3.exoplayer.MetadataRetrieveryang ada sekarang tidak digunakan lagi dan diganti dengan versi baru ini. - Memperkenalkan 
androidx.media3.inspector.FrameExtractor, API publik baru untuk ekstraksi frame. ClassAutoCloseableini menyediakan cara untuk mengekstrak frame dengan dukungan untuk video HDR, efek video, dan pemilihan decoder kustom. Objek ini harus dibuat melaluiBuilderuntukMediaItemtertentu. - FrameExtractor: Menambahkan 
getThumbnail()untuk mengekstrak frame thumbnail representatif dari file media tanpa memerlukan stempel waktu tertentu. 
 - Memperkenalkan modul 
 - Audio:
- Membuat instance 
AudioProcessormengetahui pencarian. - Mengizinkan penyisipan antarmuka 
AudioOutputProviderbaru ke dalamDefaultAudioSink.Builderuntuk mendukung jalur output audio kustom. Defaultnya adalahAudioTrackAudioOutputProvider. - Penelusuran handle di 
GainProcessor. - Memanfaatkan kemampuan profil dan tingkat dekoder AC-4 dalam penilaian dukungan format trek (#2580).
 - Hindari potensi penundaan yang disebabkan oleh penanganan callback perubahan perutean di awal pemutaran (#2646).
 - Mengizinkan penggunaan ulang codec untuk format EAC3, EAC3-JOC, dan AC-4 (#1346).
 - Menambahkan dukungan untuk sampel PCM float di 
Sonic. - Menambahkan dukungan untuk sampel PCM 16 bit di 
ToFloatPcmAudioProcessor. 
 - Membuat instance 
 - Video:
- Nonaktifkan penggunaan ulang codec untuk konten Dolby Vision dengan profil yang berbeda.
 
 - Teks:
- Memperbaiki parsing subtitel CEA-6/708 dalam konten Dolby Vision (#2775).
 
 - Gambar:
- Memperbaiki masalah ScrubbingMode saat pemutar macet saat menggeser trek thumbnail DASH (#2815).
 
 - DRM:
- Ubah jenis nilai yang ditampilkan metode 
MediaDrmCallbackdaribyte[]menjadi jenisMediaDrmCallback.Responsebaru, untuk memungkinkan menampilkan informasi opsional tambahan. Ini adalah perubahan yang merusak sumber, tetapi kerusakan dapat diselesaikan dengan mudah dengan membungkus nilai yang ditampilkanbyte[]sebelumnya dengannew Responsesebelum ditampilkan. - Menambahkan info permintaan utama seperti URL dan latensi ke
AnalyticsListener.onDrmKeysLoaded(#1001). - Pindahkan data permintaan penyediaan dari parameter URL ke isi POST.
 
 - Ubah jenis nilai yang ditampilkan metode 
 - Muxer:
- Menambahkan 
MediaMuxerCompat, pengganti frameworkMediaMuxeryang dapat langsung digunakan. - Tambahkan 
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()untuk mengizinkan pembuatan Foto Gerak. - Tambahkan 
WebmMuxeruntuk mengizinkan muxing aliran mediaOPUS,VORBIS,VP8, danVP9ke dalam format filewebm. 
 - Menambahkan 
 - Ekstensi IMA:
- Penghapusan aturan proguard kustom, sehingga aplikasi dapat menggunakan aturan yang dirilis di arsip Android IMA.
 - Menambahkan 
ImaServerSideAdInsertionUriBuilder.setNetworkCode, API baru untuk menetapkan kode jaringan Google Ad Manager agar IMA SDK dapat menangani ID iklan seperti yang ditentukan dalam setelan Google Ad Manager. Kode jaringan bersifat opsional, tetapi direkomendasikan untuk permintaan streaming layanan Penuh. Untuk menemukan kode jaringan, lihat artikel ini. - Menambahkan dependensi IMA ke 3.37.0 yang memerlukan pengaktifan penghapusan gula pada library inti. Hal ini juga harus diaktifkan oleh aplikasi dependen. Lihat catatan konfigurasi IMA.
 - Mendukung opsi UI kustom IMA DAI di pembuat URI SSAI. Opsi UI kustom untuk penyisipan iklan sisi server mencakup dukungan rendering "Dapat Dilewati" dan "Tentang Iklan Ini". Saat ini, fitur ini tersedia untuk penayang tertentu yang berada di balik daftar yang diizinkan. Perubahan ini juga mengupgrade IMA SDK ke versi 3.38.0 (catatan rilis) untuk mengakses API opsi UI kustom.
 
 - Sesi:
- Menambahkan parameter baru ke 
MediaSession.Callback.onPlaybackResumptionuntuk menunjukkan apakah panggilan terjadi hanya untuk mengumpulkan informasi atau untuk memulai pemutaran (#1764). - Perbarui 
MediaSession.ControllerInfo.isTrusteduntuk juga mendeklarasikan pengontrol dari aplikasi sendiri sebagai tepercaya (#2542). - Menambahkan 
MediaSessionService.triggerNotificationUpdateuntuk memicu update notifikasi secara manual (#1833). - Tambahkan 
ProgressListenerke metode perintah kustom. - Ubah nilai default untuk
MediaLibrarySession.Builder.setLibraryErrorReplicationModemenjadi non-fatal. - Tambahkan parameter 
ContextkeMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Baca ID kontrol volume dari platform 
PlaybackInfo, bukan mengambilnya melalui binder. Hal ini memastikan bahwa jenis pemutaran dan ID kontrol volume dibaca secara atomik dan cocok satu sama lain. - Memperbaiki bug saat peristiwa tombol 
ACTION_UPdifilter sebelum diteruskan ke callback untuk penanganan kustom. Hal ini menghadirkan paritas dengan yang dilakukan media1 dan platform (#2637). - Memperbaiki bug saat 
getCurrentTimeline()dipanggil olehPlayerWrappermeskipun perintah tidak tersedia (#2665). - Memperbaiki bug saat pesan tertinggal di antrean pesan looper utama yang menyebabkan kebocoran memori setelah layanan dihentikan (#2692).
 - Saat terhubung ke aplikasi sesi lama dengan 
MediaBrowser, perintah kustom dikirim ke sesi hanya jika tindakan kustom diiklankan sebagai tindakan kustom diPlaybackStateCompatsesi lama. Semua tindakan kustom lainnya dikirim ke layanan. - Menerapkan 
onAudioSessionIdChangeduntuk memberi tahu pengontrol media saat ID sesi audio ditetapkan oleh sesi (#244). - Memperbaiki bug yang menyebabkan 
KEYCODE_HEADSETHOOKtidak memulai pemutar saat dan peristiwa tombol mediaIntenttiba dionStartCommand(). Hal ini diperbaiki dengan menangani 'KEYCODE_HEADSETHOOK' sepertiKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Memperbaiki bug yang menyebabkan ukuran Surface tidak dikomunikasikan antara sesi dan pengontrol, sehingga efek video gagal diterapkan di demo-session. Jika Anda menggunakan pengontrol, hal ini dapat menjadi perubahan yang merusak jika pemutar Anda tidak dapat menangani panggilan 
setVideoSurfaceHolder. - Memperbaiki propagasi nilai metadata 
StringCharSequencenon-seperti string yang diberi gaya rentang (#2853). 
 - Menambahkan parameter baru ke 
 - UI:
- Tambahkan class 
ProgressStateWithTickIntervaldan ComposablerememberProgressStateWithTickIntervalyang sesuai ke modulmedia3-ui-compose. Penampung status ini digunakan didemo-composeuntuk menampilkan posisi dan durasi saat ini dalam bentuk teks. - Tambahkan 
MuteButtonStatekeui-composeyang menangani penonaktifan volumePlayer. Penampung status ini digunakan didemo-composeuntuk menampilkan tombol aktifkan/nonaktifkan suara. - Tambahkan class 
ProgressStateWithTickCountdan ComposablerememberProgressStateWithTickCountyang sesuai ke modulmedia3-ui-compose. Penampung status ini digunakan didemo-composeuntuk menampilkan progres sebagai status progres hanya baca horizontal. - Tambahkan Composable 
ContentFramekemedia3-ui-composeyang menggabungkan pengelolaanPlayerSurfacedengan pengubahan ukuran rasio aspek dan penutupan dengan rana. - Mengatasi bug platform API 34 yang menyebabkan video direntangkan/dipangkas
saat menggunakan 
SurfaceViewdi dalam ComposeAndroidViewdan oleh karena itu memengaruhi ComposablesContentFramedanPlayerSurfacedenganSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Buat modul 
media3-ui-compose-material3baru dan tambahkan Composable bertema Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) ke dalamnya. - Menambahkan dukungan untuk menempatkan tombol rute media di 
PlayerView. 
 - Tambahkan class 
 - Ekstensi HLS:
- Mengurai atribut lewati iklan interstisial HLS.
 - Petakan atribut kontrol lewati dari dokumen daftar aset dan playlist HLS ke 
AdPlaybackStateuntuk akses publik. - Memperbaiki bug saat waktu mulai playlist dihilangkan ketika tag EXT-X-PROGRAM-START-DATE yang menentukan waktu mulai dihapus dari playlist (#2760).
 - Gunakan penelusuran biner untuk menemukan indeks segmen dari posisi tertentu dalam playlist (#2826.
 
 - Ekstensi DASH:
- Memperbaiki 
UnsupportedOperationExceptionsaat memutar streaming DASH dengan manifes URIdata:non-hierarkis (#2688). - Reset 
LiveConfigurationke nilai yang diberikan olehMediaItemdariDashMediaSourcesaat dirilis dan saat item media diperbarui oleh pengguna (#2606). - Menghindari error yang disebabkan oleh update manifes tidak valid yang tidak dilaporkan sebagai error pemutar (#2805).
 
 - Memperbaiki 
 - Ekstensi RTSP:
- Menangani error paket RTP yang hilang saat memproses unit NAL terpisah-pisah untuk H264 dan H265 (#2613).
 
 - Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Ekstensi AV1: Decoder software AV1 kini menggunakan library 
dav1dberperforma tinggi, menggantikan penerapanlibgav1sebelumnya untuk meningkatkan kecepatan decoding. 
 - Ekstensi AV1: Decoder software AV1 kini menggunakan library 
 - Ektensi Cast:
- Tambahkan 
CastPlayer.Builder, yang memungkinkanCastPlayermelakukan pemutaran lokal dan Cast. Untuk mempertahankan perilakuCastPlayerlama yang hanya mendukung pemutaran Cast, Anda dapat menggunakanRemoteCastPlayer. KonstruktorCastPlayeryang sudah ada mempertahankan perilaku lamanya, tetapi tidak digunakan lagi dan digantikan dengan builderCastPlayeratauRemoteCastPlayer. - Berhenti menerapkan jenis MIME non-null di 
DefaultMediaItemConverter. - Gunakan 
MediaItem.mediaMetadata.mediaTypeuntuk menyimpulkan MEDIA_TYPE Cast yang akan digunakan dalamDefaultCastOptionsProvider#toMediaQueueItem, jika tersedia. - Aktifkan transfer jarak jauh ke lokal di 
DefaultCastOptionsProvider. - Menambahkan dukungan untuk Cast di demo Sesi.
 - Menambahkan dukungan untuk menampilkan tombol rute media di UI Composable.
 - Menambahkan dukungan untuk menampilkan tombol rute media pada menu panel tindakan.
 - Menambahkan dukungan untuk menampilkan tombol rute media sebagai UI View.
 
 - Tambahkan 
 - Utilitas Pengujian:
- Tambahkan perbedaan waktu maksimum untuk perilaku maju otomatis 
FakeClock. Secara default, nilainya adalah 1 detik, tetapi dapat dikonfigurasi melaluiFakeClock.Builder. - Tambahkan perbedaan waktu maksimum antara pesan untuk
RobolectricUtil.runMainLooperUntil(danrunLooperUntil). Nilai defaultnya adalah 1 detik, tetapi dapat dikonfigurasi melalui penggantian baru metode ini. - Memindahkan 
CapturingRenderersFactorydaritest-utilsketest-utils-robolectric. 
 - Tambahkan perbedaan waktu maksimum untuk perilaku maju otomatis 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus konstruktor 
DefaultPreloadManageryang tidak digunakan lagi. Sebagai gantinya, gunakanDefaultPreloadManager.Builder. - Menghapus konstruktor 
EditedMediaItemSequenceyang tidak digunakan lagi. Sebagai gantinya, gunakanEditedMediaItemSequence.Builder. 
 - Menghapus konstruktor 
 
Versi 1.8.0
Versi 1.8.0
30 Juli 2025
Versi 1.8.0 berisi commit ini.
- Common Library:
- Menambahkan dukungan untuk mengganti pemutar di 
ForwardingSimpleBasePlayer. 
 - Menambahkan dukungan untuk mengganti pemutar di 
 - ExoPlayer:
- Menambahkan pengambil untuk mode acak ke antarmuka 
ExoPlayer(#2522). - Melempar pengecualian dengan lebih jelas jika 
DefaultAudioSinkdiakses dari beberapa thread. Jika hal ini terjadi karena panggilan keRendererCapabilities.getFormatSupportdi luar pemutar, pastikan untuk memanggil metode ini di thread yang sama dengan thread pemutaran ExoPlayer atau menggunakan instance yang berbeda dari yang digunakan untuk pemutaran (#1191). - Memperbaiki bug yang menyebabkan format audio non-stereo di TV dapat ditandai sebagai tidak didukung oleh 
DefaultTrackSelector. - Pastikan frame terakhir dirender dengan benar saat menggunakan tanda 
DECODE_ONLYMediaCodec (yang diaktifkan secara default dalam mode scrubbing). - Menambahkan dukungan untuk menggunakan ID perangkat virtual dari 
Contextyang diteruskan keExoPlayer.Builder. - Mengaktifkan penjadwalan dinamis secara default dalam mode scrubbing.
 - Menghindari pemuatan ulang sumber yang tidak perlu saat mencari ke akhir item.
 - Gunakan 
MediaCodec.BUFFER_FLAG_DECODE_ONLYsecara default dalam mode scrubbing. - Melempar 
IllegalStateExceptionsaatPreloadMediaSourcediputar olehExoPlayerdengan thread pemutaran yang berbeda dengan thread pemuatan awal (#2495). - Tambahkan 
cloneAndMovekeShuffleModedengan penerapan default (#2226). - Mengubah perilaku default 
Renderer.getMinDurationToProgressUsuntuk menampilkan nilai yang lebih besar jika tidak ada panggilan kerenderyang diperlukan. - Memperbaiki bug saat penjadwalan internal menunda frame terakhir saat mencari ke akhir saat dijeda. Untuk saat ini, perbaikan bug hanya berlaku jika
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnableddiaktifkan. - Tambahkan metode 
ExoPlayer.setScrubbingModeEnabled(boolean). Hal ini mengoptimalkan pemutar untuk banyak pencarian yang sering dilakukan (misalnya, dari pengguna yang menarik panel penggeser). Perilaku mode scrubbing dapat disesuaikan dengansetScrubbingModeParameters(..)padaExoPlayerdanExoPlayer.Builder. - Mengizinkan penyesuaian toleransi pencarian fraksional dalam mode scrubbing.
 - Meningkatkan kecepatan operasi codec dalam mode scrubbing.
 - Memperbaiki bug yang menyebabkan error persiapan dalam konten 
AdsMediaSourcemungkin tidak pernah dilaporkan (#2337). - Memperbaiki kebocoran memori di 
MergingMediaSource, misalnya yang digunakan saat melakukan sideload subtitel (#2338). - Mengizinkan 
CmcdConfiguration.Factorymenampilkannulluntuk menonaktifkan logging CMCD untuk item media tertentu (#2386). - Meningkatkan ukuran buffer gambar default dari 128 KB (kesalahan salin-tempel dari jalur teks) menjadi 26 MB, yang cukup besar untuk gambar Ultra HDR 50 MP (#2417).
 - Menambahkan 
PreCacheHelperyang memungkinkan aplikasi melakukan pra-cache satu media dengan posisi dan durasi awal yang ditentukan. - Menambahkan dukungan pramuat dari posisi yang ditentukan di 
DefaultPreloadManager. 
 - Menambahkan pengambil untuk mode acak ke antarmuka 
 - Transformator:
- Menambahkan 
CodecDbLiteyang memungkinkan pengoptimalan setelan encoding video khusus chipset. - Tambahkan tanda 
setEnableCodecDbLitekeDefaultEncoderFactoryuntuk mengaktifkan pengoptimalan setelan CodecDB Lite. Secara default, tanda ini disetel ke false. - Mengisi jeda awal (ditambahkan melalui 
addGap()) dengan audio senyap kini memerlukan setelanexperimentalSetForceAudioTrack(true)secara eksplisit diEditedMediaItemSequence.Builder. Jika jeda berada di tengah urutan, tanda ini tidak diperlukan. - Memindahkan antarmuka 
Muxerdarimedia3-transformerkemedia3-muxer. - Jadikan setelan 
MediaItem.Builder().setImageDuration(long)wajib untuk mengimpor item media sebagai gambar. - Tambahkan
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)yang menyertakan daftar pengeditan MP4 saat memangkas untuk menginstruksikan pemain agar mengabaikan sampel di antara frame utama sebelum titik awal pangkas, dan titik awal pangkas. - Update aplikasi Demo Komposisi untuk menggunakan Kotlin dan Jetpack Compose, serta tambahkan 
VideoCompositorSettingskustom untuk mengatur urutan ke dalam tata letak 2x2 atau PiP. 
 - Menambahkan 
 - Ekstraktor:
- Mengurai metadata dari file MP4 terpisah-pisah (#2084).
 - JPEG: Mendukung foto motion yang tidak memiliki segmen Exif di awal (#2552).
 - Menambahkan dukungan untuk penelusuran di MP4 terfragmentasi dengan beberapa atom 
sidx. Perilaku ini dapat diaktifkan menggunakan tandaFLAG_MERGE_FRAGMENTED_SIDXdiFragmentedMp4Extractor(#9373). - Mengabaikan tabel pencarian kosong dalam file FLAC (termasuk yang hanya berisi titik pencarian placeholder), dan melakukan pencarian biner jika durasi file diketahui (#2327).
 - Memperbaiki penguraian unit SEI H.265 untuk sepenuhnya melewati jenis SEI yang tidak dikenal (#2456).
 - Perbarui 
WavExtractoruntuk menggunakan data SubFormat ekstensi header untuk format audio saat mengurai file jenisWAVE_FORMAT_EXTENSIBLE. - MP4: Menambahkan dukungan untuk kotak 
ipcmdanfpcmyang menentukan trek audio PCM mentah (PCM floating point 64-bit tidak didukung). - MP4: Menangani bagian rotasi matriks transformasi 
tkhdyang memutar dan mencerminkan video. Hal ini memastikan bahwa video yang dipantulkan yang diambil oleh kamera depan iPhone ditampilkan dengan benar, tetapi dipantulkan secara tidak benar pada sumbu y (#2012). - MP3: Menggunakan durasi dan ukuran data dari Xing, VBRI, dan metadata kecepatan bit variabel serupa yang tidak dapat dicari saat melakukan penggantian ke pencarian kecepatan bit konstan karena 
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194). 
 - Audio:
- Memperbaiki bug saat 
AnalyticsListener.onAudioPositionAdvancingtidak dipanggil saat pemutaran audio dimulai sangat dekat dengan akhir media. - Menambahkan dukungan untuk semua format sampel PCM linear di 
ChannelMappingAudioProcessordanTrimmingAudioProcessor. - Menambahkan dukungan untuk jeda audio di 
CompositionPlayer. - Menghapus panggilan palsu ke 
BaseAudioProcessor#flush()dariBaseAudioProcessor#reset(). - Izinkan upmixing/downmixing daya konstan di DefaultAudioMixer.
 - Menjadikan 
ChannelMappingAudioProcessor,TrimmingAudioProcessor, danToFloatPcmAudioProcessorpublik (#2339). - Gunakan 
AudioTrack#getUnderrunCount()diAudioTrackPositionTrackeruntuk mendeteksi kekurangan dalamDefaultAudioSink, bukan estimasi upaya terbaik. - Meningkatkan perataan stempel waktu audio untuk penyimpangan posisi yang tidak terduga dari perangkat output audio.
 - Memperbaiki bug saat sinkronisasi A/V terganggu selama 10 detik pertama setelah melanjutkan dari jeda saat terhubung ke perangkat Bluetooth.
 - Memperbaiki bug yang menyebabkan 
AnalyticsListener.onAudioPositionAdvancingtidak melaporkan waktu saat audio mulai maju, tetapi melaporkan waktu pengukuran pertama. - Memperbaiki pemulihan ke audio multisaluran setelah kembali ke audio stereo di beberapa perangkat (#2258).
 
 - Memperbaiki bug saat 
 - Video:
- Memperluas solusi permukaan yang terlepas ke perangkat "lenovo" dan "motorola" (#2059).
 - Meningkatkan pelepasan frame video yang lancar saat startup ketika sampel audio tidak dimulai tepat di posisi yang diminta.
 - Memperluas solusi permukaan yang terlepas ke perangkat "realme" (#2059).
 - Menambahkan API 
ExoPlayereksperimental untuk menyertakan flagMediaCodec.BUFFER_FLAG_DECODE_ONLYsaat mengantrekan buffer input khusus dekode. Flag ini akan memberi sinyal kepada decoder untuk melewati buffer khusus dekode sehingga menghasilkan pencarian yang lebih cepat. Aktifkan denganDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Meningkatkan pemeriksaan performa codec untuk codec video software. Hal ini dapat menyebabkan beberapa jalur tambahan ditandai sebagai 
EXCEEDS_CAPABILITIES. - Memperbaiki error pemutaran Widevine VP9 di beberapa perangkat (#2408).
 
 - Teks:
- Menambahkan dukungan untuk trek VobSub dalam file MP4 (#2510).
 - Memperbaiki jeda pemutaran saat segmen subtitel awalnya gagal dimuat dan kemudian berhasil dimuat, diikuti oleh beberapa segmen subtitel kosong (#2517).
 - Memperbaiki SSA dan SubRip untuk menampilkan tanda yang sedang berlangsung saat mengaktifkan subtitel (#2309).
 - Memperbaiki pemutaran yang macet saat beralih dari streaming dengan error subtitel ke live stream dengan trek subtitel kosong (#2328).
 - Memperbaiki subtitel CEA-608 yang tidak jelas saat memutar streaming H.262 yang berisi frame B (#2372).
 - Menambahkan dukungan untuk subtitel SSA dengan 
CodecId = S_TEXT/SSAdi file Matroska. Sebelumnya,MatroskaExtractorhanya mendukungCodecId = S_TEXT/ASSyang dimaksudkan untuk merepresentasikan varian 'lanjutan' (v4+) dari SubStation Alpha (tetapi logika parsing ExoPlayer sama untuk kedua varian) (#2384). - Menambahkan dukungan untuk properti 
layerdalam file subtitle SubStation Alpha (SSA) yang digunakan untuk menentukan urutan z-order dari tanda saat lebih dari satu tanda ditampilkan di layar secara bersamaan (#2124). 
 - Metadata:
- Menambahkan dukungan untuk mengambil durasi media dan 
TimelinekeMetadataRetrieverdan memigrasikannya ke API berbasis instance,AutoCloseable. GunakanBuilderbaru untuk membuat instance untukMediaItem, lalu panggilretrieveTrackGroups(),retrieveTimeline(), danretrieveDurationUs()untuk mendapatkanListenableFutureuntuk metadata. Metode statis sebelumnya kini tidak digunakan lagi (#2462). 
 - Menambahkan dukungan untuk mengambil durasi media dan 
 - Gambar:
- Batasi bitmap yang didekode ke ukuran tampilan di
BitmapFactoryImageDecoder, untuk menghindari aplikasi mengalami error denganCanvas: trying to draw too large bitmap.dariPlayerViewsaat mencoba menampilkan gambar yang sangat besar (misalnya 50 MP). - Ubah tanda tangan
DefaultRenderersFactory.getImageDecoderFactory()untuk mengambil parameterContext. - Sejajarkan ukuran output bitmap maksimum yang digunakan dalam 
CompositionPlayerdengan ukuran yang sudah digunakan dalamTransformer(artinyaCompositionPlayertidak mempertimbangkan ukuran tampilan saat mendekode bitmap, tidak sepertiExoPlayer). 
 - Batasi bitmap yang didekode ke ukuran tampilan di
 - DRM:
- Menambahkan kelebihan beban baru 
OfflineLicenseHelper.newWidevineInstanceyang menerimaMediaItem.DrmConfigurationsehingga header permintaan HTTP dapat diterapkan dengan benar (#2169). 
 - Menambahkan kelebihan beban baru 
 - Efek:
- Tambahkan 
Presentation.createForShortSide(int)yang membuatPresentationyang memastikan sisi terpendek selalu cocok dengan nilai yang diberikan, terlepas dari orientasi input. 
 - Tambahkan 
 - Muxer:
- Memperbaiki bug saat tanda sampel yang benar tidak ditetapkan untuk sampel audio dalam MP4 yang terfragmentasi.
 writeSampleData()API kini menggunakan classBufferInfokhusus muxer, bukanMediaCodec.BufferInfo.- Tambahkan 
Muxer.Factory#supportsWritingNegativeTimestampsInEditListyang secara default bernilai salah. 
 - Ekstensi IMA:
- Memperbaiki bug saat error pemuatan di satu iklan dapat secara tidak sengaja membatalkan grup iklan lain.
 - Memperbaiki bug yang menyebabkan grup iklan setelah akhir periode VOD menghentikan pemutaran.
Grup iklan dengan waktu mulai setelah periode tidak lagi dimasukkan ke dalam antrean
MediaPeriodQueue(#2215). 
 - Sesi:
- Memperbaiki bug saat koneksi dari pengontrol Media3 non-hak istimewa pihak ketiga diabaikan.
 - Menghapus pemeriksaan untuk perintah yang tersedia saat mengirim perintah kustom ke 
MediaBrowserServiceCompatlama. Hal ini setara dengan perilaku pengontrol/browser lama saat terhubung ke aplikasi lama. - Memperbaiki bug yang menyebabkan error pemutaran pertama pemutar salah diperlakukan sebagai pengecualian kustom persisten. Hal ini mencegah aplikasi dipulihkan.
 - Memperbaiki bug saat beberapa perubahan pengontrol yang tidak ditangani oleh
sesi dapat menyebabkan 
IllegalStateExceptions. - Memperbaiki bug yang menyebabkan tindakan pengontrol yang tidak ditangani oleh sesi dapat membuat pengontrol berada dalam status tidak valid.
 - Memperbaiki peringatan pelanggaran peluncuran tidak aman StrictMode (#2330).
 - Memperbaiki bug saat memanggil 
setSessionExtrasdari thread utama saat menjalankan pemutar dari thread aplikasi yang berbeda dengan thread utama menyebabkanIllegalStateException(#2265). - Jangan otomatis menampilkan notifikasi jika pemutar disiapkan dengan item media tanpa menyiapkan atau memutarnya
(#2423https://github.com/androidx/media/issues/2423). Perilaku ini dapat dikonfigurasi melalui 
MediaSessionService.setShowNotificationForIdlePlayer. - Tambahkan 
PlaybackExceptionkustom untuk semua atau pengontrol yang dipilih. - Memperbaiki bug yang menyebabkan penelusuran di live stream pada 
MediaControllerdapat menyebabkanIllegalArgumentException. - Untuk live stream, hentikan publikasi posisi pemutaran dan kemampuan untuk mencari item saat ini untuk pengontrol media platform, guna menghindari artefak posisi di UI Android Auto (dan pengontrol lain yang menggunakan informasi ini dari sesi media platform) (#1758).
 - Memperbaiki bug saat meneruskan null ke 
getLibraryRootdariMediaBrowseryang terhubung keMediaBrowserServiceCompatlama menghasilkanNullPointerException. - Memperbaiki bug yang menyebabkan pengiriman tindakan kustom, hasil penelusuran, atau permintaan getItem
membuat aplikasi sesi lama error dengan 
ClassNotFoundException. - Memperbaiki bug saat 
MediaItem.LocalConfiguration.uridibagikan keMediaMetadatasesi platform. Untuk membagikan URI secara sengaja agar pengontrol dapat meminta ulang media, tetapkanMediaItem.RequestMetadata.mediaUri. 
 - UI:
- Memperbaiki bug saat 
PlayerSurfacedi dalam komponen yang dapat digunakan kembali sepertiLazyColumntidak berfungsi dengan benar (#2493). - Memperbaiki bug Compose yang menyebabkan adanya jeda antara menyetel status tombol awal dan mengamati perubahan status (misalnya, bentuk ikon atau diaktifkan). Setiap perubahan yang dilakukan pada Pemutar di luar periode pengamatan kini akan diambil (#2313).
 - Tambahkan pemegang status dan composable ke modul 
media3-ui-composeuntukSeekBackButtonStatedanSeekForwardButtonState. - Menambahkan dukungan untuk mode scrubbing ExoPlayer ke 
PlayerControlView. Jika diaktifkan, hal ini akan membuat pemutar masuk ke mode scrubbing saat pengguna mulai menarik panel scrubber, mengeluarkan panggilanplayer.seekTountuk setiap gerakan, lalu keluar dari mode scrubbing saat sentuhan diangkat dari layar. Integrasi ini dapat diaktifkan dengantime_bar_scrubbing_enabled = truedi XML atau metodesetTimeBarScrubbingEnabled(boolean)dari Java/Kotlin. - Buat 
PlayerSurfacemenerima argumenPlayernullable. 
 - Memperbaiki bug saat 
 - Download:
- Menambahkan dukungan download sebagian untuk streaming progresif. Aplikasi dapat menyiapkan
streaming progresif dengan 
DownloadHelper, dan memintaDownloadRequestdari helper dengan menentukan media berbasis waktu posisi awal dan akhir yang harus dicakup oleh download.DownloadRequestyang ditampilkan membawa rentang byte yang telah diselesaikan, yang dapat digunakan untuk membuatProgressiveDownloaderdan mendownload konten yang sesuai. - Tambahkan 
DownloadHelper.Factoryyang menggantikan metodeDownloadHelper.forMediaItem()statis. - Menambahkan 
Factoryuntuk penerapanSegmentDownloader. - Menambahkan dukungan download sebagian untuk streaming adaptif. Aplikasi dapat menyiapkan streaming adaptif dengan 
DownloadHelper, dan memintaDownloadRequestdari helper dengan menentukan posisi awal dan akhir media berbasis waktu yang harus dicakup oleh download.DownloadRequestyang ditampilkan membawa rentang waktu yang telah diselesaikan, yang dengannyaSegmentDownloaderkonkret dapat dibuat dan mendownload konten yang sesuai. 
 - Menambahkan dukungan download sebagian untuk streaming progresif. Aplikasi dapat menyiapkan
streaming progresif dengan 
 - Ekstensi Cronet:
- Menambahkan penanganan cookie otomatis (#5975).
 
 - Ekstensi HLS:
- Memperbaiki bug saat 
HlsSampleStreamWrappermencoba mencari di dalam buffer ketika tidak ada chunk yang tersedia di buffer #2598. - Memperbaiki bug saat perubahan pemilihan trek setelah memuat bagian latensi rendah dan petunjuk pramuat dapat menyebabkan pemutaran macet atau terhenti (#2299).
 - Mencegah pemuatan ulang yang berlebihan dengan menunggu setengah durasi target saat
CAN-BLOCK-RELOAD=YEStidak dipenuhi oleh server (#2317). - Memperbaiki bug yang menyebabkan pemutaran terhenti saat memulai streaming iklan interstisial sebelum mid-roll dan resolusi daftar aset dicoba untuk iklan yang salah (#2558).
 - Memperbaiki penguraian playlist untuk menerima 
\f(feed formulir) dalam nilai atribut string yang dikutip (#2420). - Mendukung pembaruan iklan interstisial dengan ID yang sama (#2427).
 - Memperbaiki bug yang menyebabkan error pemuatan playlist terkadang tidak diteruskan setelah live stream kehabisan segmen untuk dimuat (#2401https://github.com/androidx/media/issues/2401).
 - Mengelompokkan rendering subtitle menurut tag NAME, mirip dengan cara pengelompokan rendering audio saat ini (#1666).
 - Mendukung X-ASSET-LIST dan live stream dengan 
HlsInterstitialsAdsLoader. 
 - Memperbaiki bug saat 
 - Ekstensi DASH:
- Memperbaiki masalah saat set adaptasi pemutaran trik digabungkan dengan set adaptasi utamanya untuk membentuk 
TrackGroupyang tidak valid (#2148). - Memperbaiki bug saat memperpendek durasi periode DASH dapat memunculkan pengecualian ketika sampel di luar durasi baru telah dibaca oleh pipeline rendering (#2440).
 - Memperbaiki bug yang menyebabkan pengalihan tidak diikuti saat menggunakan parameter kueri CMCD (#2475).
 
 - Memperbaiki masalah saat set adaptasi pemutaran trik digabungkan dengan set adaptasi utamanya untuk membentuk 
 - Ekstensi RTSP:
- Menambahkan dukungan untuk Paket Agregasi RTP untuk H265 sesuai dengan RFC 7798#4.4.2 (#2413).
 - Memperbaiki 
RtspClientuntuk menggunakan URI lokasi sebagaimana diberikan saat memproses respons HTTP 302 (#2398). - Menambahkan dukungan penguraian untuk SessionDescription yang berisi baris dengan karakter spasi kosong di akhir (#2357).
 
 - Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Memperbaiki bug saat
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangetidak berpengaruh untuk ekstensi decoder audio (#2258). 
 - Memperbaiki bug saat
 - Ektensi Cast:
 - Utilitas Pengujian:
- Tambahkan 
advance(player).untilPositionAtLeastdanuntilMediaItemIndexkeTestPlayerRunHelperuntuk memajukan pemutar hingga posisi tertentu tercapai. Dalam sebagian besar kasus, metode ini lebih andal daripada metodeuntilPositiondanuntilStartOfMediaItemyang ada. - Pindahkan 
FakeDownloaderke modultest-utils-robolectricuntuk digunakan kembali dalam pengujian lain. - Menghapus 
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...), dantransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). GunakanShadowMediaCodecConfiguntuk mengonfigurasi encoder dan decoder bayangan. - Mengganti awalan "exotest" dengan "media3" dalam nama codec yang dilaporkan oleh
ShadowMediaCodecConfig. 
 - Tambahkan 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus konstruktor 
SegmentDownloaderyang tidak digunakan lagiSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)dan konstruktor yang sesuai di subclass-nyaDashDownloader,HlsDownloader, danSsDownloader. - Menghapus 
Player.hasNext(),Player.hasNextWindow()yang tidak digunakan lagi. Sebagai gantinya, gunakanPlayer.hasNextMediaItem(). - Menghapus 
Player.next()yang tidak digunakan lagi. Sebagai gantinya, gunakanPlayer.seekToNextMediaItem(). - Menghapus 
Player.seekToPreviousWindow()yang tidak digunakan lagi. Sebagai gantinya, gunakanPlayer.seekToPreviousMediaItem(). - Menghapus 
Player.seekToNextWindow()yang tidak digunakan lagi. Sebagai gantinya, gunakanPlayer.seekToNextMediaItem(). - Menghapus 
BaseAudioProcessoryang tidak digunakan lagi di modulexoplayer. GunakanBaseAudioProcessordi modulcommon. - Menghapus konstruktor 
MediaCodecVideoRendereryang tidak digunakan lagiMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider). 
 - Menghapus konstruktor 
 
Versi 1.8.0-rc02
24 Juli 2025
Gunakan versi stabil 1.8.0.
Versi 1.8.0-rc01
16 Juli 2025
Gunakan versi stabil 1.8.0.
Versi 1.8.0-beta01
2 Juli 2025
Gunakan versi stabil 1.8.0.
Versi 1.8.0-alpha01
19 Mei 2025
Gunakan versi stabil 1.8.0.
Versi 1.7.0
Versi 1.7.1
16 Mei 2025
Rilis ini memiliki kode yang sama dengan 1.6.1 dan dirilis untuk memastikan rilis ini muncul sebagai rilis 'lebih baru' daripada 1.7.0, yang merupakan rilis alfa yang secara tidak sengaja diberi tag sebagai stabil (lihat di bawah).
Versi 1.7.0
16 Mei 2025
Rilis ini seharusnya 1.7.0-alpha01, tetapi secara tidak sengaja diberi tag
1.7.0 (yaitu stabil) di maven.google.com. Jangan gunakan rilis ini. Tetap menggunakan 1.6.1 atau upgrade ke 1.7.1 (yang memiliki kode yang sama dengan 1.6.1).
Versi 1.6.0
1.6.1
14 April 2025
androidx.media3:media3-*:1.6.1 dirilis.
Versi 1.6.1 berisi
commit ini.
- Common Library:
- Menambahkan metode 
PlaybackParameters.withPitch(float)untuk menyalinPlaybackParametersdengan mudah menggunakan nilaipitchbaru (#2257). 
 - Menambahkan metode 
 - ExoPlayer:
- Memperbaiki masalah saat transisi item media gagal karena error pemroses yang dapat dipulihkan selama inisialisasi item media berikutnya (#2229).
 - Memperbaiki masalah saat 
ProgressiveMediaPeriodmenampilkanIllegalStateExceptionsaatPreloadMediaSourcemencoba memanggilgetBufferedDurationUs()sebelum disiapkan (#2315). - Memperbaiki pengiriman 
CmcdDatadalam permintaan manifes untuk DASH, HLS, dan SmoothStreaming (#2253). - Pastikan 
AdPlaybackState.withAdDurationsUs(long[][])dapat digunakan setelah grup iklan dihapus. Pengguna masih perlu meneruskan array durasi untuk grup iklan yang dihapus, yang dapat berupa kosong atau null (#2267). 
 - Ekstraktor:
- MP4: Mengurai 
alternate_groupdari kotaktkhddan menampilkannya sebagai entriMp4AlternateGroupDatadiFormat.metadatasetiap trek (#2242). 
 - MP4: Mengurai 
 - Audio:
- Memperbaiki masalah pelepasan saat posisi mungkin macet saat memutar playlist konten pendek (#1920).
 
 - Sesi:
- Menurunkan waktu tunggu agregasi untuk callback 
MediaSessionplatform dari 500 menjadi 100 milidetik dan menambahkan setter eksperimental untuk memungkinkan aplikasi mengonfigurasi nilai ini. - Memperbaiki masalah saat notifikasi muncul kembali setelah ditutup oleh pengguna (#2302).
 - Memperbaiki bug saat sesi menampilkan linimasa satu item padahal pemutar yang di-wrap sebenarnya kosong. Hal ini terjadi saat pemutar yang digabungkan tidak memiliki 
COMMAND_GET_TIMELINEyang tersedia, sementaraCOMMAND_GET_CURRENT_MEDIA_ITEMtersedia dan pemutar yang digabungkan kosong (#2320). - Memperbaiki bug saat panggilan
MediaSessionService.setMediaNotificationProviderdiabaikan tanpa pemberitahuan setelah interaksi lain dengan layanan sepertisetForegroundServiceTimeoutMs(#2305). 
 - Menurunkan waktu tunggu agregasi untuk callback 
 - UI:
- Aktifkan 
PlayerSurfaceagar dapat berfungsi denganExoPlayer.setVideoEffectsdanCompositionPlayer. - Memperbaiki bug yang menyebabkan 
PlayerSurfacetidak dapat dikomposisi ulang denganPlayerbaru. 
 - Aktifkan 
 - Ekstensi HLS:
- Memperbaiki masalah saat durasi chunk tidak ditetapkan di 
CmcdDatauntuk media HLS, yang menyebabkan kegagalan pernyataan saat memproses segmen media terenkripsi (#2312). 
 - Memperbaiki masalah saat durasi chunk tidak ditetapkan di 
 - Ekstensi RTSP:
- Menambahkan dukungan untuk URI dengan skema RTSPT sebagai cara untuk mengonfigurasi sesi RTSP agar menggunakan TCP (#1484).
 
 - Ektensi Cast:
- Menambahkan dukungan untuk metadata playlist (#2235).
 
 
1.6.0
26 Maret 2025
androidx.media3:media3-*:1.6.0 dirilis.
Versi 1.6.0 berisi
commit ini.
- Common Library:
- Tambahkan 
AudioManagerCompatdanAudioFocusRequestCompatuntuk menggantikan class yang setara diandroidx.media. - Upgrade Kotlin dari 1.9.20 ke 2.0.20 dan gunakan plugin Gradle Compose Compiler. Mengupgrade library KotlinX Coroutines dari 1.8.1 ke 1.9.0.
 - Menghapus metode 
Format.toBundle(boolean excludeMetadata), gunakanFormat.toBundle()sebagai gantinya. - Memperbaiki bug di 
SimpleBasePlayersaat menyetelcurrentMediaItemIndexbaru diStatesetelahsetPlaylistdengannullMediaMetadatatidak mengevaluasi ulang metadata (#1940). - Mengubah akses 
SimpleBasePlayer.Statedari dilindungi menjadi publik agar lebih mudah menangani update di kelas lain (#2128). 
 - Tambahkan 
 - ExoPlayer:
- Tambahkan 
MediaExtractorCompat, class baru yang menyediakan fitur setara dengan platformMediaExtractor. - Menambahkan dukungan pemanasan awal 'ExoPlayer' eksperimental untuk pemutaran menggunakan
MediaCodecVideoRenderer. Anda dapat mengonfigurasiDefaultRenderersFactorymelaluiexperimentalSetEnableMediaCodecVideoRendererPrewarminguntuk menyediakanMediaCodecVideoRenderersekunder keExoPlayer. Jika diaktifkan,ExoPlayerakan memproses awal video item media berurutan selama pemutaran untuk mengurangi latensi transisi item media. - Kurangi nilai default untuk 
bufferForPlaybackMsdanbufferForPlaybackAfterRebufferMsdiDefaultLoadControlmenjadi 1.000 dan 2.000 md. - Menginisialisasi 
DeviceInfodan volume perangkat secara asinkron (jika diaktifkan menggunakansetDeviceVolumeControlEnabled). Nilai ini tidak tersedia langsung setelahExoPlayer.Builder.build(), danPlayer.Listenermemberi tahu perubahan melaluionDeviceInfoChangeddanonDeviceVolumeChanged. - ID sesi audio awal tidak lagi langsung tersedia setelah
membuat pemutar. Anda dapat menggunakan
AnalyticsListener.onAudioSessionIdChangeduntuk mendengarkan update awal jika diperlukan. - Pertimbangkan bahasa saat memilih trek video. Secara default, pilih trek video 'utama' yang cocok dengan bahasa trek audio yang dipilih, jika tersedia. Preferensi bahasa video vulgar dapat
dinyatakan dengan
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Menambahkan parameter 
selectedAudioLanguageke metodeDefaultTrackSelector.selectVideoTrack(). - Menambahkan parameter 
retryCountkeMediaSourceEventListener.onLoadStarteddan metodeMediaSourceEventListener.EventDispatcheryang sesuai. - Memperbaiki bug saat item atau periode playlist dalam streaming DASH multi-periode dengan durasi yang tidak cocok dengan konten sebenarnya dapat menyebabkan frame terhenti di akhir item (#1698).
 - Pindahkan 
BasePreloadManager.Listenerke tingkat teratasPreloadManagerListener. RenderersFactory.createSecondaryRendererdapat diterapkan untuk menyediakan perender sekunder untuk prapenyiapan. Pemanasan awal memungkinkan transisi item media yang lebih cepat selama pemutaran.- Aktifkan pengiriman 
CmcdDatauntuk permintaan manifes dalam format streaming adaptif DASH, HLS, dan SmoothStreaming (#1951). - Berikan 
MediaCodecInfocodec yang akan diinisialisasi diMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Ubah 
AdsMediaSourceuntuk memungkinkanAdPlaybackStatesberkembang dengan menambahkan grup iklan. Modifikasi yang tidak valid terdeteksi dan memunculkan pengecualian. - Memperbaiki masalah saat frame khusus dekode tambahan dapat ditampilkan secara berurutan dengan cepat saat bertransisi ke media konten setelah iklan mid-roll.
 - Buat 
DefaultRenderersFactorymenambahkan dua instanceMetadataRendereruntuk memungkinkan aplikasi menerima dua skema metadata yang berbeda secara default. - Mengevaluasi ulang apakah pemuatan potongan yang sedang berlangsung harus dibatalkan saat pemutaran dijeda (#1785).
 - Menambahkan opsi ke 
ClippingMediaSourceuntuk mengizinkan clipping di media yang tidak dapat dicari. - Memperbaiki bug saat mencari dengan pemanasan awal dapat memblokir transisi item media berikutnya.
 - Memperbaiki bug saat 
ExoPlayer.isLoading()tetaptruesaat bertransisi keSTATE_IDLEatauSTATE_ENDED(#2133). - Menambahkan 
lastRebufferRealtimeMskeLoadControl.Parameter(#2113). 
 - Tambahkan 
 - Transformator:
- Menambahkan dukungan untuk transmuxing ke format alternatif yang kompatibel dengan versi sebelumnya.
 - Menambahkan dukungan untuk transcoding dan transmuxing format Dolby Vision (profil 8).
 - Perbarui parameter 
VideoFrameProcessor.registerInputStreamdanVideoFrameProcessor.Listener.onInputStreamRegistereduntuk menggunakanFormat. - Buat metadata statis HDR saat menggunakan 
DefaultEncoderFactory. - Mengaktifkan dukungan untuk diagnostik platform Android menggunakan
MediaMetricsManager. Transformer meneruskan peristiwa pengeditan dan data performa ke platform, yang membantu memberikan informasi performa dan proses debug sistem di perangkat. Data ini juga dapat dikumpulkan oleh Google jika berbagi data penggunaan dan diagnostik diaktifkan oleh pengguna perangkat. Aplikasi dapat memilih untuk tidak berkontribusi pada diagnostik platform untuk Transformer denganTransformer.Builder.setUsePlatformDiagnostics(false). - Pisahkan 
InAppMuxermenjadiInAppMp4MuxerdanInAppFragmentedMp4Muxer. Anda menggunakanInAppMp4Muxeruntuk menghasilkan file MP4 yang tidak terfragmentasi, sedangkanInAppFragmentedMp4Muxerdigunakan untuk menghasilkan file MP4 yang terfragmentasi. - Memindahkan antarmuka 
Muxerdarimedia3-muxerkemedia3-transformer. - Tambahkan 
MediaProjectionAssetLoader, yang menyediakan media dariMediaProjectionuntuk perekaman layar, dan tambahkan dukungan untuk perekaman layar ke aplikasi demo Transformer. - Tambahkan 
#getInputFormat()ke antarmukaCodec. - Mengalihkan tanggung jawab untuk merilis 
GlObjectsProviderke pemanggil diDefaultVideoFrameProcessordanDefaultVideoCompositorjika memungkinkan. 
 - Ekstraktor:
- AVI: Memperbaiki penanganan file dengan audio terkompresi bitrate konstan yang header streaming-nya menyimpan jumlah byte, bukan jumlah chunk.
 - Memperbaiki penanganan unit NAL dengan panjang yang dinyatakan dalam 1 atau 2 byte (bukan 4).
 - Memperbaiki 
ArrayIndexOutOfBoundsExceptiondalam daftar edit MP4 saat daftar edit dimulai pada frame non-sinkron tanpa frame sinkron sebelumnya (#2062). - Memperbaiki masalah saat streaming TS dapat terhenti di beberapa perangkat (#2069).
 - FLAC: Menambahkan dukungan untuk file FLAC 32-bit. Sebelumnya, video ini tidak dapat diputar dengan 
IllegalStateException: Playback stuck buffering and not loading(#2197). 
 - Audio:
- Memperbaiki 
onAudioPositionAdvancingagar dipanggil saat pemutaran dilanjutkan (sebelumnya dipanggil saat pemutaran dijeda). - Jangan lewati 
SonicAudioProcessorsaatSpeedChangingAudioProcessordikonfigurasi dengan parameter default. - Memperbaiki kekurangan dalam 
Sonic#getOutputSize()yang dapat menyebabkanDefaultAudioSinkterhenti. - Perbaiki 
MediaCodecAudioRenderer.getDurationToProgressUs()danDecoderAudioRenderer.getDurationToProgressUs()sehingga pencarian dengan benar mereset durasi yang diberikan. - Menjadikan 
androidx.media3.common.audio.SonicAudioProcessorfinal. - Menambahkan dukungan untuk PCM float ke 
ChannelMappingAudioProcessordanTrimmingAudioProcessor. 
 - Memperbaiki 
 - Video:
- Ubah 
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacemenjadi dilindungi sehingga aplikasi dapat mengganti untuk memblokir penggunaan permukaan placeholder (#1905). - Menambahkan penguraian dependensi sampel AV1 
ExoPlayereksperimental untuk mempercepat pencarian. Aktifkan dengan APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesbaru. - Menambahkan API 
ExoPlayereksperimental untuk melepaskan buffer input dekoderMediaCodecVideoRendereryang terlambat dan tidak bergantung. Aktifkan denganDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - Memperbaiki masalah saat pemutar tanpa platform langsung siap dan sangat lambat mendekode frame yang tertunda (#1973).
 - Mengecualikan perangkat Xiaomi dan OPPO dari mode permukaan terpisah untuk menghindari layar berkedip (#2059).
 
 - Ubah 
 - Teks:
- Menambahkan dukungan untuk subtitel VobSub (#8260).
 - Berhenti memuat semua file subtitel yang dikonfigurasi dengan
MediaItem.Builder.setSubtitleConfigurationssecara agresif, dan hanya memuat satu jika dipilih oleh pemilihan trek (#1721). - TTML: Menambahkan dukungan untuk mereferensikan 
tts:origindantts:extentmenggunakanstyle(#2953). - Batasi stempel waktu WebVTT dan SubRip hingga tepat 3 tempat desimal. Sebelumnya, kami salah mengurai sejumlah tempat desimal, tetapi selalu menganggap nilai dalam milidetik, sehingga menyebabkan stempel waktu yang salah (#1997).
 - Memperbaiki pemutaran yang terhenti saat playlist berisi item yang diklip dengan teks CEA-608 atau CEA-708.
 - Memperbaiki 
IllegalStateExceptionsaat file SSA berisi tanda dengan durasi nol (waktu mulai dan berakhir sama) (#2052). - Menekan (dan mencatat) error parsing subtitel saat subtitel di-mux ke dalam penampung yang sama dengan audio dan video (#2052).
 - Memperbaiki penanganan karakter UTF-8 multi-byte dalam file WebVTT menggunakan akhir baris CR (#2167).
 
 - DRM:
- Memperbaiki error 
MediaCodec$CryptoException: Operation not supported in this configurationsaat memutar konten ClearKey di perangkat dengan API < 27 (#1732). 
 - Memperbaiki error 
 - Efek:
- Memindahkan fungsi 
OverlaySettingskeStaticOverlaySettings.OverlaySettingsdapat dibuat subclass untuk memungkinkan setelan overlay dinamis. 
 - Memindahkan fungsi 
 - Muxer:
- Memindahkan 
MuxerExceptiondari antarmukaMuxeruntuk menghindari nama yang sepenuhnya memenuhi syarat yang sangat panjang. - Mengganti nama metode 
setSampleCopyEnabled()menjadisetSampleCopyingEnabled()diMp4Muxer.BuilderdanFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()danFragmentedMp4Muxer.addTrack()kini menampilkan ID jalurint, bukanTrackToken.Mp4MuxerdanFragmentedMp4Muxertidak lagi menerapkan antarmukaMuxer.- Nonaktifkan pengelompokan dan penyalinan sampel 
Mp4Muxersecara default. - Memperbaiki bug di 
FragmentedMp4Muxeryang membuat banyak fragmen saat hanya trek audio yang ditulis. 
 - Memindahkan 
 - Sesi:
- Mempertahankan status layanan latar depan selama 10 menit tambahan saat pemutaran dijeda, dihentikan, atau gagal. Hal ini memungkinkan pengguna melanjutkan pemutaran dalam
batas waktu ini tanpa berisiko pembatasan layanan latar depan di berbagai
perangkat. Perhatikan bahwa hanya memanggil 
player.pause()tidak dapat lagi digunakan untuk menghentikan layanan latar depan sebelumstopSelf()saat menggantionTaskRemoved, gunakanMediaSessionService.pauseAllPlayersAndStopSelf()sebagai gantinya. - Menjaga notifikasi tetap terlihat saat pemutaran mengalami error atau berhenti. Notifikasi hanya dihapus jika playlist dikosongkan atau pemutar dilepaskan.
 - Meningkatkan penanganan tindakan MediaSession platform Android ACTION_PLAY dan ACTION_PAUSE agar hanya menetapkan salah satunya sesuai dengan perintah yang tersedia dan juga menerima jika hanya salah satunya yang ditetapkan.
 - Tambahkan 
Contextsebagai parameter keMediaButtonReceiver.shouldStartForegroundService(#1887). - Memperbaiki bug saat memanggil metode 
PlayerdiMediaControlleryang terhubung ke sesi lama menghapus perubahan dari update yang tertunda. - Membuat 
MediaSession.setSessionActivity(PendingIntent)menerima null (#2109). - Memperbaiki bug yang menyebabkan notifikasi usang tetap terlihat saat playlist dihapus (#2211).
 
 - Mempertahankan status layanan latar depan selama 10 menit tambahan saat pemutaran dijeda, dihentikan, atau gagal. Hal ini memungkinkan pengguna melanjutkan pemutaran dalam
batas waktu ini tanpa berisiko pembatasan layanan latar depan di berbagai
perangkat. Perhatikan bahwa hanya memanggil 
 - UI:
- Tambahkan pemegang status dan composable ke modul 
media3-ui-composeuntukPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonState, danPlaybackSpeedState. 
 - Tambahkan pemegang status dan composable ke modul 
 - Download:
- Memperbaiki bug di 
CacheWriteryang membuat sumber data tetap terbuka dan area cache terkunci jika sumber data menampilkanExceptionselainIOException(#9760). 
 - Memperbaiki bug di 
 - Ekstensi HLS:
- Tambahkan versi pertama 
HlsInterstitialsAdsLoader. Pemuat iklan membaca interstisial HLS dari playlist media HLS dan memetakannya keAdPlaybackStateyang diteruskan keAdsMediaSource. Versi awal ini hanya mendukung streaming VOD HLS dengan atributX-ASSET-URI. - Menambahkan 
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Aplikasi dapat menggunakannya untuk membuat instanceAdsMediaSourceyang menggunakanHlsInterstitialsAdsLoaderdengan cara yang mudah dan aman. - Mem-parsing tag 
SUPPLEMENTAL-CODECSdari playlist HLS untuk mendeteksi format Dolby Vision (#1785). - Melonggarkan kondisi untuk mencari posisi sinkronisasi dalam streaming HLS (#2209).
 
 - Tambahkan versi pertama 
 - Ekstensi DASH:
- Menambahkan dukungan format AC-4 Level-4 untuk DASH (#1898).
 - Memperbaiki masalah saat menghitung interval update untuk penyisipan iklan di live stream multi-periode (#1698).
 - Mengurai atribut 
scte214:supplementalCodecsdari manifes DASH untuk mendeteksi format Dolby Vision (#1785). - Meningkatkan penanganan transisi periode dalam live stream yang berisi sampel media di luar durasi periode yang dinyatakan (#1698).
 - Memperbaiki masalah saat kumpulan adaptasi yang ditandai dengan 
adaptation-set-switchingtetapi memiliki bahasa atau tanda peran yang berbeda digabungkan (#2222). 
 - Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Menambahkan modul dekoder MPEG-H yang menggunakan dekoder MPEG-H bawaan untuk mendekode audio MPEG-H (#1826).
 
 - Ekstensi MIDI:
- Salurkan instance 
AudioSinkdanAudioRendererEventListenerkustom ke dalamMidiRenderer. 
 - Salurkan instance 
 - Ektensi Cast:
- Tingkatkan dependensi 
play-services-cast-frameworkke 21.5.0 untuk memperbaiki errorFLAG_MUTABLEdi aplikasi yang menargetkan API 34+ di perangkat yang telah menginstal tetapi menonaktifkan layanan Google Play (#2178). 
 - Tingkatkan dependensi 
 - Aplikasi demo:
- Perluas 
demo-composedengan tombol tambahan dan tingkatkan kualitas integrasiPlayerSurfacedengan dukungan penskalaan dan rana. 
 - Perluas 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus metode 
AudioMixer.create()yang tidak digunakan lagi. Sebagai gantinya, gunakanDefaultAudioMixer.Factory().create(). - Menghapus metode 
Transformer.Builderyang tidak digunakan lagi berikut:setTransformationRequest(), gunakansetAudioMimeType(),setVideoMimeType(), dansetHdrMode()sebagai gantinya.setAudioProcessors(), tetapkan pemroses audio diEditedMediaItem.Builder.setEffects(), dan teruskan keTransformer.start().setVideoEffects(), tetapkan efek video diEditedMediaItem.Builder.setEffects(), dan teruskan keTransformer.start().setRemoveAudio(), gunakanEditedMediaItem.Builder.setRemoveAudio()untuk menghapus audio dariEditedMediaItemyang diteruskan keTransformer.start().setRemoveVideo(), gunakanEditedMediaItem.Builder.setRemoveVideo()untuk menghapus video dariEditedMediaItemyang diteruskan keTransformer.start().setFlattenForSlowMotion(), gunakanEditedMediaItem.Builder.setFlattenForSlowMotion()untuk meratakanEditedMediaItemyang diteruskan keTransformer.start().setListener(), gunakanaddListener(),removeListener(), atauremoveAllListeners().
 - Menghapus metode 
Transformer.Listeneryang tidak digunakan lagi berikut:onTransformationCompleted(MediaItem), gunakanonCompleted(Composition, ExportResult)sebagai gantinya.onTransformationCompleted(MediaItem, TransformationResult), gunakanonCompleted(Composition, ExportResult)sebagai gantinya.onTransformationError(MediaItem, Exception), gunakanonError(Composition, ExportResult, ExportException)sebagai gantinya.onTransformationError(MediaItem, TransformationException), gunakanonError(Composition, ExportResult, ExportException)sebagai gantinya.onTransformationError(MediaItem, TransformationResult, TransformationException), gunakanonError(Composition, ExportResult, ExportException)sebagai gantinya.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), gunakanonFallbackApplied(Composition, TransformationRequest, TransformationRequest)sebagai gantinya.
 - Hapus class 
TransformationResultyang tidak digunakan lagi. Sebagai gantinya, gunakanExportResult. - Hapus class 
TransformationExceptionyang tidak digunakan lagi. Sebagai gantinya, gunakanExportException. - Menghapus 
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONyang tidak digunakan lagi. Sebagai gantinya, gunakanTransformer.PROGRESS_STATE_NOT_STARTED. - Menghapus 
Transformer.setListener()yang tidak digunakan lagi. Sebagai gantinya, gunakanTransformer.addListener(),Transformer.removeListener(), atauTransformer.removeAllListeners(). - Menghapus 
Transformer.startTransformation()yang tidak digunakan lagi. Sebagai gantinya, gunakanTransformer.start(MediaItem, String). - Menghapus 
SingleFrameGlShaderProgramyang tidak digunakan lagi. Sebagai gantinya, gunakanBaseGlShaderProgram. - Menghapus 
Transformer.flattenForSlowMotion. Sebagai gantinya, gunakanEditedMediaItem.flattenForSlowMotion. - Menghapus 
ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponent, danExoPlayer.DeviceComponent. androidx.media3.exoplayer.audio.SonicAudioProcessordihapus.- Menghapus metode 
DownloadHelperyang tidak digunakan lagi berikut:- Konstruktor 
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), gunakanDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)sebagai gantinya. getRendererCapabilities(RenderersFactory), fungsi yang setara dapat dicapai dengan membuatDefaultRendererCapabilitiesListdenganRenderersFactory, dan memanggilDefaultRendererCapabilitiesList.getRendererCapabilities().
 - Konstruktor 
 - Menghapus metode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). GunakanPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)dan teruskan(MediaSession.Token) compatToken.getToken()sebagai gantinya. 
 - Menghapus metode 
 
1.6.0-rc02
19 Maret 2025
Gunakan versi stabil 1.6.0.
1.6.0-rc01
12 Maret 2025
Gunakan versi stabil 1.6.0.
1.6.0-beta01
26 Februari 2025
Gunakan versi stabil 1.6.0.
Versi 1.6.0-alpha03
6 Februari 2025
Gunakan versi stabil 1.6.0.
Versi 1.6.0-alpha02
30 Januari 2025
Gunakan versi stabil 1.6.0.
Versi 1.6.0-alpha01
20 Desember 2024
Gunakan versi stabil 1.6.0.
Versi 1.5
Versi 1.5.1
19 Desember 2024
androidx.media3:media3-*:1.5.1 dirilis.
Versi 1.5.1 berisi commit ini.
- ExoPlayer:
- Menonaktifkan penggunaan dekripsi asinkron di MediaCodec untuk menghindari masalah waktu tunggu codec yang dilaporkan dengan API platform ini (#1641).
 
 - Ekstraktor:
- MP3: Jangan hentikan pemutaran lebih awal saat daftar isi frame 
VBRItidak mencakup semua data MP3 dalam file (#1904). 
 - MP3: Jangan hentikan pemutaran lebih awal saat daftar isi frame 
 - Video:
- Rollback penggunaan nilai rasio aspek piksel yang disediakan 
MediaCodecAdaptersaat diberikan selama pemrosesanonOutputFormatChanged(#1371). 
 - Rollback penggunaan nilai rasio aspek piksel yang disediakan 
 - Teks:
- Memperbaiki bug di 
ReplacingCuesResolver.discardCuesBeforeTimeUsyang menyebabkan isyarat aktif ditimeUs(dimulai sebelumnya tetapi belum berakhir) salah dihapus (#1939). 
 - Memperbaiki bug di 
 - Metadata:
- Mengekstrak penomoran disk/lagu dan genre dari komentar Vorbis ke dalam
MediaMetadata(#1958). 
 - Mengekstrak penomoran disk/lagu dan genre dari komentar Vorbis ke dalam
 
Versi 1.5.0
27 November 2024
androidx.media3:media3-*:1.5.0 dirilis.
Versi 1.5.0 berisi commit ini.
- Common Library:
- Menambahkan 
ForwardingSimpleBasePlayeryang memungkinkan penerusan ke pemutar lain dengan penyesuaian kecil sekaligus memastikan konsistensi penuh dan penanganan pemroses (#1183). - Ganti 
SimpleBasePlayer.State.playlistdengan metodegetPlaylist(). - Tambahkan penggantian untuk 
SimpleBasePlayer.State.Builder.setPlaylist()guna menentukanTimelinedanTrackssertaMetadatasaat ini secara langsung daripada membuat struktur playlist. - Tingkatkan 
minSdkmenjadi 21 (Android Lollipop). Hal ini selaras dengan semua library AndroidX lainnya. - Menambahkan artefak 
androidx.media3:media3-common-ktxyang menyediakan fungsi khusus Kotlin yang dibangun di atas library Umum - Tambahkan fungsi ekstensi penangguhan 
Player.listenuntuk memutar coroutine guna memantauPlayer.Eventske librarymedia3-common-ktx. - Hapus anotasi 
@DoNotInlinedari class dalam yang secara manual tidak sesuai dengan class yang dirancang untuk menghindari kegagalan verifikasi class runtime. Versi terbaru R8 kini secara otomatis memisahkan panggilan seperti ini untuk menghindari kegagalan runtime (sehingga pemisahan manual tidak lagi diperlukan). Semua pengguna Gradle library harus sudah menggunakan versi Plugin Android Gradle yang menggunakan versi R8 yang melakukan hal ini, karenacompileSdk = 35. Pengguna library dengan sistem build non-Gradle harus memastikan langkah pengecilan/pengaburan yang setara dengan R8 melakukan proses out-of-lining otomatis yang serupa untuk menghindari kegagalan verifikasi class runtime. Perubahan ini telah dilakukan di library AndroidX lainnya. 
 - Menambahkan 
 - ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()kini dapat dipanggil untuk setiap item media. Sebelumnya, fungsi ini tidak dipanggil untuk yang pertama. GunakanMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()untuk mengaktifkannya.- Menambahkan 
PreloadMediaSource.PreloadControl.onPreloadErroruntuk mengizinkan penerapanPreloadMediaSource.PreloadControlmengambil tindakan saat terjadi error. - Tambahkan 
BasePreloadManager.Listeneruntuk menyebarkan peristiwa pra-pemuatan ke aplikasi. - Mengizinkan perubahan waktu tunggu klien SNTP dan mencoba lagi alamat alternatif saat waktu tunggu habis (#1540).
 - Hapus 
MediaCodecAdapter.Configuration.flagskarena kolom tersebut selalu nol. - Mengizinkan pengguna memilih speaker bawaan untuk pemutaran di Wear OS API 35+ (jika perangkat mengiklankan dukungan untuk fitur ini).
 - Tunda panggilan pemblokiran ke
Context.getSystemService(Context.AUDIO_SERVICE)hingga penanganan fokus audio diaktifkan. Hal ini memastikan panggilan pemblokiran tidak dilakukan jika penanganan fokus audio tidak diaktifkan (#1616). - Mengizinkan pemutaran terlepas dari durasi yang di-buffer saat pemuatan gagal (#1571).
 - Tambahkan 
AnalyticsListener.onRendererReadyChanged()untuk memberi sinyal saat setiap perender memungkinkan pemutaran siap. - Memperbaiki 
MediaCodec.CryptoExceptionyang terkadang dilaporkan sebagai "error runtime yang tidak terduga" saatMediaCodecdioperasikan dalam mode asinkron (perilaku default di API 31+). - Teruskan 
bufferedDurationUs, bukanbufferedPositionUsdenganPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Juga mengubahDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSmenjadiDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, aplikasi kemudian perlu meneruskan nilai yang merepresentasikan durasi tertentu dari posisi awal default yang sumber medianya harus dimuat sebelumnya dengan IntDef ini, bukan posisi. - Tambahkan implementasi 
ForwardingRendereryang meneruskan semua panggilan metode ke perender lain (1703). - Menambahkan pra-pemuatan playlist untuk item berikutnya dalam playlist. Aplikasi dapat mengaktifkan pra-pemuatan dengan memanggil 
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)dengan tepat. Secara default, pramuat dinonaktifkan. Jika diaktifkan dan agar tidak mengganggu pemutaran,DefaultLoadControlmembatasi pra-pemuatan agar dimulai dan dilanjutkan hanya saat pemutar tidak memuat untuk pemutaran. Aplikasi dapat mengubah perilaku ini dengan menerapkanLoadControl.shouldContinuePreloading()yang sesuai (seperti saat mengganti metode ini diDefaultLoadControl). PenerapanLoadControldefault menonaktifkan pra-pemuatan jika aplikasi menggunakan penerapanLoadControlkustom. - Menambahkan metode 
MediaSourceEventListener.EventDispatcher.dispatchEvent()untuk mengizinkan pemanggilan peristiwa pemroses subclass (1736). - Tambahkan 
DefaultPreloadManager.Builderyang membangun instanceDefaultPreloadManagerdanExoPlayerdengan konfigurasi bersama yang konsisten. - Menghapus parameter 
Renderer[]dariLoadControl.onTracksSelected()karena penerapanDefaultLoadControldapat mengambil jenis streaming dariExoTrackSelection[]. - Menghentikan penggunaan 
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])dan menandai metode sebagai final untuk mencegah penggantian.DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])baru harus digunakan sebagai gantinya. - Laporkan peristiwa 
MediaSourceEventListenerdari sumber sekunder diMergingMediaSource. Hal ini akan menyebabkan peristiwa mulai/error/dibatalkan/selesai pemuatan dilaporkan untuk subtitle yang di-sideload (yang ditambahkan denganMediaItem.LocalConfiguration.subtitleConfigurations), yang mungkin muncul sebagai peristiwa pemuatan duplikat yang dikeluarkan dariAnalyticsListener. - Mencegah error subtitle & metadata agar tidak menghentikan pemutaran sepenuhnya.
Sebagai gantinya, trek yang bermasalah dinonaktifkan dan pemutaran trek yang tersisa dilanjutkan
(#1722).
- Dalam penanganan subtitel baru (selama ekstraksi), error parsing (misalnya, data subtitel tidak valid 
) dan error pemuatan (misalnya, HTTP 404) terkait akan dikeluarkan melalui callback 
onLoadError. - Dalam penanganan teks lama (selama rendering), hanya error pemuatan terkait yang dikeluarkan melalui callback 
onLoadError, sementara error parsing diabaikan tanpa pemberitahuan (ini adalah perilaku yang sudah ada). 
 - Dalam penanganan subtitel baru (selama ekstraksi), error parsing (misalnya, data subtitel tidak valid 
) dan error pemuatan (misalnya, HTTP 404) terkait akan dikeluarkan melalui callback 
 - Memperbaiki bug saat item atau periode playlist dalam streaming DASH multi-periode dengan durasi yang tidak cocok dengan konten sebenarnya dapat menyebabkan frame terhenti di akhir item (#1698).
 - Menambahkan setter ke 
SntpClientuntuk menetapkan waktu berlalu maksimum sejak update terakhir, setelah itu klien diinisialisasi ulang (#1794). 
 - Transformator:
- Tambahkan 
SurfaceAssetLoader, yang mendukung pengantrean data video ke Transformer melaluiSurface. ImageAssetLoadermelaporkan input yang tidak didukung melaluiAssetLoader.onErrordaripada menampilkanIllegalStateException.- Menjadikan setelan durasi gambar menggunakan
MediaItem.Builder.setImageDurationMswajib untuk ekspor gambar. - Menambahkan dukungan ekspor untuk jeda dalam urutan EditedMediaItem audio.
 
 - Tambahkan 
 - Pemilihan Trek:
DefaultTrackSelector: Lebih memilih audio berbasis objek daripada audio berbasis channel jika faktor lainnya sama.
 - Ekstraktor:
- Izinkan 
Mp4ExtractordanFragmentedMp4Extractoruntuk mengidentifikasi sampel H264 yang tidak digunakan sebagai referensi oleh sampel berikutnya. - Menambahkan opsi untuk mengaktifkan pencarian berbasis indeks di 
AmrExtractor. - Perlakukan file MP3 dengan lebih dari 128 kB di antara frame yang valid sebagai terpotong
(bukan tidak valid). Artinya, file dengan data non-MP3 di bagian akhir,
tanpa metadata lain untuk menunjukkan panjang byte MP3, kini akan menghentikan
pemutaran di akhir data MP3, bukan gagal dengan
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Memperbaiki penanganan sampel pra-putar untuk posisi awal media non-keyframe saat memproses daftar pengeditan dalam file MP4 (#1659).
 - Meningkatkan penghitungan kecepatan frame dengan menggunakan durasi media dari kotak 
mdhddiMp4ExtractordanFragmentedMp4Extractor(#1531). - Memperbaiki penskalaan 
media_timeyang salah dalam daftar pengeditan MP4. Meskipunsegment_durationsudah diskalakan dengan benar menggunakan skala waktu film,media_timekini diskalakan dengan benar menggunakan skala waktu jalur, seperti yang ditentukan oleh standar format MP4 (#1792). - Menangani frame yang tidak berurutan dalam perhitungan 
endIndicesuntuk MP4 dengan daftar edit (#1797). - Memperbaiki penguraian durasi media dalam kotak 
mdhdfile MP4 untuk menangani nilai-1(#1819). - Menambahkan dukungan untuk mengidentifikasi kotak 
h263dalam file MP4 untuk video H.263 (#1821). - Menambahkan dukungan format file media dasar ISO AC-4 Level-4 (#1265).
 
 - Izinkan 
 - DataSource:
- Perbarui 
HttpEngineDataSourceuntuk mengizinkan penggunaan mulai dari ekstensi versi S 7, bukan level API 34 (#1262). DataSourceContractTest: Tegaskan bahwaDataSource.getUri()menampilkan URI yang telah di-resolve (seperti yang didokumentasikan). Jika berbeda dengan URI yang diminta, pengujian dapat menunjukkannya menggunakan metodeDataSourceContractTest.TestResource.Builder.setResolvedUri()baru.DataSourceContractTest: Memastikan bahwaDataSource.getUri()dangetResponseHeaders()menampilkan nilai 'open' setelah panggilan keopen()gagal (karena resource 'tidak ditemukan') dan sebelum panggilanclose()berikutnya.- Mengganti 
DataSourceContractTest.getNotFoundResources()memungkinkan sub-class pengujian menyediakan beberapa resource 'tidak ditemukan', dan juga menyediakan header yang diharapkan. Hal ini memungkinkan untuk membedakan antara HTTP 404 (dengan header) dan "server tidak ditemukan" (tanpa header). 
- Mengganti 
 
 - Perbarui 
 - Audio:
- Mengonfigurasi metadata kenyaringan CTA-2075 secara otomatis pada codec jika ada di media.
 - Memastikan penurunan volume yang lancar saat mencari.
 - Memperbaiki suara pop yang dapat terjadi selama pencarian.
 - Memperbaiki akumulasi error pemotongan untuk algoritma pengubahan tempo/nada Sonic.
 - Memperbaiki bug di 
SpeedChangingAudioProcessoryang menyebabkan frame output dihapus. 
 - Video:
MediaCodecVideoRenderermenghindari mendekode sampel yang tidak dirender atau digunakan sebagai referensi oleh sampel lain.- Pada API 35 dan yang lebih baru, 
MediaCodecAdapterkini dapat menerimanullSurfacediconfiguredan panggilan ke metode barudetachOutputSurfaceuntuk menghapusSurfaceyang ditetapkan sebelumnya jika codec mendukungnya (MediaCodecInfo.detachedSurfaceSupported). - Gunakan nilai rasio aspek piksel yang diberikan 
MediaCodecAdapterjika tersedia saat memprosesonOutputFormatChanged(#1371). - Menambahkan solusi untuk masalah perangkat di Galaxy Tab S7 FE yang menyebabkan streaming H264 aman 60 fps ditandai sebagai tidak didukung (#1619).
 - Menambahkan solusi untuk codec yang macet setelah sampel terakhir tanpa menampilkan sinyal akhir streaming.
 
 - Teks:
- Menambahkan 
VoiceSpankustom dan mengisinya untuk rentang suara WebVTT (#1632). - Pastikan WebVTT di HLS dengan stempel waktu subtitel yang sangat besar (yang meluap
long64-bit saat ditampilkan sebagai mikrodetik dan dikalikan dengan basis waktu MPEG90,000) ditampilkan (#1763). - Mendukung teks CEA-608 dalam konten Dolby Vision (#1820).
 - Memperbaiki pemutaran yang terhenti pada streaming multi-periode DASH saat subtitel CEA-608 diaktifkan (#1863).
 
 - Menambahkan 
 - Metadata:
- Tetapkan jenis 
C.TRACK_TYPE_METADATAke trek yang berisi konten es atau vnd.dvb.ait. 
 - Tetapkan jenis 
 - Gambar:
- Tambahkan 
ExternallyLoadedImageDecoderuntuk menyederhanakan integrasi dengan library pemuatan gambar eksternal seperti Glide atau Coil. 
 - Tambahkan 
 - DataSource:
- Menambahkan 
FileDescriptorDataSource,DataSourcebaru yang dapat digunakan untuk membaca dariFileDescriptor(#3757). 
 - Menambahkan 
 - Efek:
- Menambahkan solusi 
DefaultVideoFrameProcessoruntuk penskalaanSurfaceTexturekecil.SurfaceTexturedapat mencakup penskalaan kecil yang memotong batas 1-texel di sekitar tepi buffer yang dipangkas. Sekarang ditangani sehingga output lebih mendekati yang diharapkan. - Percepat 
DefaultVideoFrameProcessor.queueInputBitmap(). Hasilnya, mengekspor gambar ke video denganTransformermenjadi lebih cepat. 
 - Menambahkan solusi 
 - Ekstensi IMA:
- Memperbaiki bug saat menghapus playlist dapat menyebabkan
ArrayIndexOutOfBoundsExceptiondiImaServerSideAdInsertionMediaSource. - Memperbaiki bug yang menyebabkan streaming DAI yang disisipkan sisi server tanpa preroll dapat
menghasilkan 
ArrayIndexOutOfBoundsExceptionsaat diputar melewati midroll terakhir (#1741). 
 - Memperbaiki bug saat menghapus playlist dapat menyebabkan
 - Sesi:
- Tambahkan 
MediaButtonReceiver.shouldStartForegroundService(Intent)untuk mengizinkan aplikasi menekan perintah putar yang masuk untuk pelanjutan pemutaran dengan mengganti metode ini. Secara default, layanan selalu dimulai dan pemutaran tidak dapat dihentikan tanpa sistem menghentikan layanan denganForegroundServiceDidNotStartInTimeException(#1528). - Memperbaiki bug yang menyebabkan perintah kustom yang dikirim dari 
MediaBrowserdikirim keMediaSessionCompat.Callback, bukan varian metodeMediaBrowserServiceCompatsaat terhubung ke layanan lama. Hal ini mencegahMediaBrowsermenerima nilai sebenarnya yang dikirim kembali oleh layanan lama (#1474). - Menangani 
IllegalArgumentExceptionyang ditampilkan oleh perangkat dari produsen tertentu saat menyetel penerima siaran untuk intent tombol media (#1730). - Menambahkan tombol perintah untuk item media. Hal ini menambahkan Media3 API untuk yang dikenal sebagai 
Custom browse actionsdengan library lama denganMediaBrowserCompat. Perhatikan bahwa dengan tombol perintah Media3 untuk item media tersedia untukMediaBrowserdanMediaController. Lihat Mengimplementasikan tindakan penjelajahan kustom. - Memperbaiki bug saat pengontrol Media3 terkadang tidak dapat mengizinkan aplikasi sesi memulai layanan latar depan setelah meminta 
play(). - Batasi 
CommandButton.Builder.setIconUriagar hanya menerima URI konten. - Teruskan petunjuk koneksi browser Media3 ke
MediaBrowserCompatawal saat terhubung keMediaBrowserCompatlama. Layanan dapat menerima petunjuk koneksi yang diteruskan sebagai petunjuk root dengan panggilan pertama keonGetRoot(). - Memperbaiki bug saat 
MediaBrowseryang terhubung ke layanan browser lama, tidak menerima error yang dikirim oleh layanan setelah browser berlangganan keparentid. - Meningkatkan perilaku interoperabilitas, sehingga browser Media3 yang
terhubung ke 
MediaBrowserServicelama tidak meminta turunanparentIddua kali saat berlangganan ke induk. 
 - Tambahkan 
 - UI:
- Aktifkan solusi video yang diregangkan/dipangkas di
PlayerView-in-Compose-AndroidView, karena masalah dengan transisi bersama berbasis XML. Aplikasi yang menggunakanPlayerViewdi dalamAndroidViewperlu memanggilPlayerView.setEnableComposeSurfaceSyncWorkarounduntuk memilih ikut serta (#1237, #1594). - Menambahkan 
setFullscreenButtonStatekePlayerViewuntuk mengizinkan update ikon tombol layar penuh sesuai permintaan, yaitu di luar jalur dan tidak reaktif terhadap interaksi klik (#1590, #184). - Memperbaiki bug saat pilihan "Tidak Ada" dalam pilihan teks tidak berfungsi jika ada preferensi pemilihan trek teks yang ditentukan aplikasi.
 
 - Aktifkan solusi video yang diregangkan/dipangkas di
 - Ekstensi DASH:
- Menambahkan dukungan untuk periode yang dimulai di tengah segmen (#1440).
 
 - Ekstensi Streaming Lancar:
- Memperbaiki error 
Bad magic number for Bundlesaat memutar streaming SmoothStreaming dengan trek teks (#1779). 
 - Memperbaiki error 
 - Ekstensi RTSP:
 - Ekstensi Decoder (FFmpeg, VP9, AV1, dll.):
- Tambahkan modul dekoder IAMF, yang memberikan dukungan untuk pemutaran file MP4 yang berisi trek IAMF menggunakan library native libiamf untuk menyintesis audio.
- Pemutaran diaktifkan dengan tata letak stereo serta 5.1 dengan spasialisasi bersama dengan pelacakan gerak kepala opsional yang diaktifkan, tetapi dukungan pemutaran binaural saat ini tidak tersedia.
 
 - Menambahkan dukungan halaman 16 KB untuk ekstensi dekoder di Android 15 (#1685).
 
 - Tambahkan modul dekoder IAMF, yang memberikan dukungan untuk pemutaran file MP4 yang berisi trek IAMF menggunakan library native libiamf untuk menyintesis audio.
 - Ekstensi Cast:
- Hentikan pembersihan linimasa setelah CastSession terputus, yang memungkinkan aplikasi pengirim melanjutkan pemutaran secara lokal setelah koneksi terputus.
 - Isi 
DeviceInfoCastPlayer saatContextdiberikan. Hal ini memungkinkan penautanMediaSessionkeRoutingSession, yang diperlukan untuk mengintegrasikan Pengalih Output (#1056). 
 - Utilitas Pengujian:
DataSourceContractTestkini mencakup pengujian untuk memverifikasi:- Aliran input 
read positiondiperbarui. - Buffer output 
offsetditerapkan dengan benar. 
- Aliran input 
 
 - Aplikasi demo
- Mengatasi kebocoran memori di aplikasi bentuk pendek demo (#1839).
 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus 
Player.hasPrevious,Player.hasPreviousWindow()yang tidak digunakan lagi. GunakanPlayer.hasPreviousMediaItem()sebagai gantinya. - Menghapus metode 
Player.previous()yang tidak digunakan lagi. Sebagai gantinya, gunakanPlayer.seekToPreviousMediaItem(). - Menghapus metode 
DrmSessionEventListener.onDrmSessionAcquiredyang tidak digunakan lagi. - Menghapus konstruktor 
DefaultEncoderFactoryyang tidak digunakan lagi. Sebagai gantinya, gunakanDefaultEncoderFactory.Builder. 
 - Menghapus 
 
Versi 1.5.0-rc02
19 November 2024
Gunakan versi stabil 1.5.0.
Versi 1.5.0-rc01
13 November 2024
Gunakan versi stabil 1.5.0.
Versi 1.5.0-beta01
30 Oktober 2024
Gunakan versi stabil 1.5.0.
Versi 1.5.0-alpha01
10 September 2024
Gunakan versi stabil 1.5.0.
Versi 1.4.0
Versi 1.4.1
27 Agustus 2024
androidx.media3:media3-*:1.4.1 dirilis.
Versi 1.4.1 berisi commit ini.
- ExoPlayer:
 - Ekstraktor:
- MP3: Memperbaiki error 
Searched too many bytesdengan mengabaikan data non-MP3 di akhir dengan benar berdasarkan kolom panjang dalam frameInfo(#1480). 
 - MP3: Memperbaiki error 
 - Teks:
- TTML: Memperbaiki penanganan nilai 
tts:fontSizepersentase untuk memastikan nilai tersebut diwarisi dengan benar dari node induk dengan nilaitts:fontSizepersentase. - Memperbaiki 
IndexOutOfBoundsExceptiondiLegacySubtitleUtilkarena salah menangani kasus waktu mulai output yang diminta lebih besar dari atau sama dengan waktu acara akhir diSubtitle(#1516). 
 - TTML: Memperbaiki penanganan nilai 
 - DRM:
- Memperbaiki error 
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEdi perangkat API 31+ yang memutar konten Widevine L1. Error ini disebabkan oleh penerapan frameworkMediaDrm.requiresSecureDecoderyang tidak lengkap (#1603). 
 - Memperbaiki error 
 - Efek:
- Tambahkan metode 
release()keGlObjectsProvider. 
 - Tambahkan metode 
 - Sesi:
- Mengubah ketuk dua kali 
KEYCODE_HEADSETHOOKmenjadi tindakan 'cari berikutnya', seperti yang didokumentasikan (#1493). - Tangani 
KEYCODE_HEADSETHOOKsebagai perintah 'putar' diMediaButtonReceiversaat memutuskan apakah akan mengabaikannya untuk menghindariForegroundServiceDidNotStartInTimeException(#1581). 
 - Mengubah ketuk dua kali 
 - Ekstensi RTSP:
- Lewati Deskripsi Media yang tidak valid dalam penguraian SDP (#1087).
 
 
Versi 1.4.0
25 Juli 2024
androidx.media3:media3-*:1.4.0 dirilis.
Versi 1.4.0 berisi commit ini.
- Common Library:
- Teruskan panggilan penelusuran yang dianggap no-op ke metode 
BasePlayer.seekTo()danSimpleBasePlayer.handleSeek()yang dilindungi, bukan mengabaikannya. Jika Anda menerapkan metode ini di pemutar kustom, Anda mungkin perlu menangani panggilan tambahan ini denganmediaItemIndex == C.INDEX_UNSET. - Menghapus dependensi kompilasi pada penghapusan gula Java 8 yang ditingkatkan (#1312).
 - Pastikan durasi yang diteruskan ke 
MediaItem.Builder.setImageDurationMs()diabaikan untukMediaItemnon-gambar (seperti yang didokumentasikan). - Tambahkan 
Format.customDatauntuk menyimpan informasi kustom yang disediakan aplikasi tentang instanceFormat. 
 - Teruskan panggilan penelusuran yang dianggap no-op ke metode 
 - ExoPlayer:
- Tambahkan 
BasePreloadManageryang mengoordinasikan pra-pemuatan untuk beberapa sumber berdasarkan prioritas yang ditentukan olehrankingData-nya. Penyesuaian dapat dilakukan dengan memperluas class ini. TambahkanDefaultPreloadManageryang menggunakanPreloadMediaSourceuntuk memuat sampel media sumber ke dalam memori, dan menggunakan bilangan bulatrankingDatayang menunjukkan indeks item di UI. - Tambahkan 
PlayerIdke sebagian besar metodeLoadControluntuk memungkinkan penerapanLoadControlmendukung beberapa pemain. - Menghapus 
Buffer.isDecodeOnly()danC.BUFFER_FLAG_DECODE_ONLY. Tidak perlu menyetel tanda ini karena perender dan dekoder akan memutuskan untuk melewati buffer berdasarkan stempel waktu. PenerapanRendererkustom harus memeriksa apakah waktu buffer minimalBaseRenderer.getLastResetPositionUs()untuk memutuskan apakah sampel harus ditampilkan. PenerapanSimpleDecoderkustom dapat memeriksaisAtLeastOutputStartTimeUs()jika diperlukan atau menandai buffer lain denganDecoderOutputBuffer.shouldBeSkippeduntuk melewatinya. - Mengizinkan nilai null ditampilkan oleh
TargetPreloadStatusControl.getTargetPreloadStatus(T)untuk menunjukkan agar tidak memuatMediaSourcedenganrankingDatatertentu. - Menambahkan 
remove(MediaSource)keBasePreloadManager. - Tambahkan 
reset()keBasePreloadManageruntuk melepaskan semua sumber penampung sambil mempertahankan instance pengelola pramuat. - Menambahkan 
ExoPlayer.setPriority()(danBuilder.setPriority()) untuk menentukan nilai prioritas yang digunakan dalamPriorityTaskManagerdan untuk kepentingan MediaCodec dari API 35. - Memperbaiki masalah saat memperbarui waktu rebuffer terakhir yang mengakibatkan
kunci 
bs(buffer starvation) yang salah di CMCD (#1124). - Tambahkan
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)untuk menunjukkan bahwa sumber telah dimuat hingga akhir. Hal ini memungkinkan implementasiDefaultPreloadManagerdanPreloadMediaSource.PreloadControlkustom memuat sumber berikutnya terlebih dahulu atau melakukan tindakan lainnya. - Memperbaiki bug yang menyebabkan lewati jeda di akhir item dapat memicu pengecualian pemutaran.
 - Tambahkan 
clearkePreloadMediaSourceuntuk membatalkan periode pra-pemuatan. - Tambahkan kode error baru
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDyang digunakan saat resource codec diambil kembali untuk tugas dengan prioritas lebih tinggi. - Memungkinkan 
AdsMediaSourcememuat iklan preroll sebelum persiapan media konten awal selesai (#1358). - Memperbaiki bug saat pemutaran dipindahkan ke 
STATE_ENDEDsaat menyiapkan ulang live stream DASH multi-periode setelah periode asli dihapus dari manifes. - Mengganti nama 
onTimelineRefreshed()menjadionSourcePrepared()danonPrepared()menjadionTracksSelected()diPreloadMediaSource.PreloadControl. Ganti juga nama IntDef diDefaultPreloadManager.Stagedengan nama yang sesuai. - Menambahkan dukungan eksperimental untuk penjadwalan dinamis agar lebih menyelaraskan pekerjaan dengan siklus aktif CPU dan menunda pengaktifan hingga perender dapat melanjutkan.
Anda dapat mengaktifkannya menggunakan 
experimentalSetDynamicSchedulingEnabled()saat menyiapkan instance ExoPlayer. - Menambahkan 
Renderer.getDurationToProgressUs().Rendererdapat menerapkan metode ini untuk menampilkan durasi yang harus dilanjutkan pemutarannya agar perender dapat melanjutkan progresnya ke ExoPlayer. JikaExoPlayerditetapkan denganexperimentalSetDynamicSchedulingEnabled(), makaExoPlayerakan memanggil metode ini saat menghitung waktu untuk menjadwalkan tugas kerjanya. - Tambahkan 
MediaCodecAdapter#OnBufferAvailableListeneruntuk memberikan peringatan saat buffer input dan output tersedia untuk digunakan olehMediaCodecRenderer.MediaCodecRendererakan memberi sinyalExoPlayersaat menerima callback ini dan jikaExoPlayerdisetel denganexperimentalSetDynamicSchedulingEnabled(), makaExoPlayerakan menjadwalkan loop kerjanya saat perender dapat membuat progres. - Gunakan class data untuk metode 
LoadControl, bukan parameter individu. - Tambahkan 
ExoPlayer.isReleased()untuk memeriksa apakahExoplayer.release()telah dipanggil. - Tambahkan 
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()untuk mengonfigurasi posisi maksimum yang dicariseekToPrevious()ke item sebelumnya (#1425). - Memperbaiki beberapa inkonsistensi fokus audio, misalnya, tidak melaporkan kehilangan fokus penuh atau sementara saat pemutar dijeda (#1436).
 - Memperbaiki potensi 
IndexOutOfBoundsExceptionyang disebabkan oleh ekstraktor yang melaporkan trek tambahan setelah langkah persiapan awal (#1476). EffectsdiExoPlayer.setVideoEffect()akan menerima stempel waktu dengan offset perender dihapus (#1098).- Memperbaiki potensi 
IllegalArgumentExceptionsaat menangani error pemutar yang terjadi saat membaca item playlist lain (#1483). 
 - Tambahkan 
 - Transformator:
- Tambahkan 
audioConversionProcessdanvideoConversionProcesskeExportResultyang menunjukkan cara pembuatan masing-masing trek dalam file output. - Melonggarkan pemeriksaan level H.264 pengoptimalan pemangkasan.
 - Menambahkan dukungan untuk beralih antara media input SDR dan HDR dalam urutan.
 - Menambahkan dukungan untuk efek audio tingkat komposisi.
 - Menambahkan dukungan untuk mentranskode gambar Ultra HDR menjadi video HDR.
 - Memperbaiki masalah saat 
DefaultAudioMixertidak menghasilkan jumlah byte yang benar setelah direset dan digunakan kembali. - Mengatasi bug decoder yang membatasi jumlah saluran audio pada stereo saat menangani input PCM.
 - Saat memilih trek di 
ExoPlayerAssetLoader, abaikan batasan jumlah saluran audio karena hanya berlaku untuk pemutaran. - Ganti antarmuka 
androidx.media3.transformer.Muxerdenganandroidx.media3.muxer.Muxerdan hapusandroidx.media3.transformer.Muxer. - Memperbaiki pemuatan gambar HEIC dari skema URI konten. (#1373).
 - Sesuaikan durasi trek audio di 
AudioGraphInputuntuk meningkatkan sinkronisasi AV. - Hapus kolom 
ExportResult.processedInputs. Jika Anda menggunakan kolom ini untuk detail codec, gunakanDefaultDecoderFactory.listenersebagai gantinya. Jika terjadi pengecualian codec, detail codec akan tersedia diExportException.codecInfo. 
 - Tambahkan 
 - Ekstraktor:
- MPEG-TS: Lakukan perubahan ke depan dengan memastikan frame terakhir dirender dengan meneruskan unit akses terakhir dari streaming ke antrean sampel (#7909). Menggabungkan perbaikan untuk mengatasi masalah yang muncul di streaming HLS khusus frame I(#1150) dan streaming HLS H.262 (#1126).
 - MP3: Lebih memilih ukuran data dari frame 
Infodaripada ukuran yang dilaporkan oleh streaming yang mendasarinya (misalnya, ukuran file, atau headerContent-LengthHTTP). Hal ini membantu mengecualikan data cuplikan yang tidak dapat diputar (misalnya, gambar album) dari penghitungan pencarian bitrate konstan, sehingga pencarian menjadi lebih akurat (#1376). - MP3: Gunakan jumlah frame dan data lainnya dalam frame 
Info(jika ada) untuk menghitung bitrate rata-rata untuk pencarian bitrate konstan, bukan mengekstrapolasi dari bitrate frame setelah frameInfo, yang mungkin sangat kecil, misalnya framePCUT(#1376). - Memperbaiki ekstraksi format audio PCM dalam penampung AVI.
 
 - Audio:
- Memperbaiki atribut encoding DTS:X Profile 2 untuk pemutaran passthrough (#1299).
 - Untuk pemutaran yang di-offload, reset kolom pelacakan untuk penyelesaian streaming
di 
DefaultAudioSinksebelum memanggilAudioTrack.stop()agarAudioTrack.StreamEventCallback#onPresentationEndeddengan benar mengidentifikasi kapan semua data yang tertunda telah diputar. - Memperbaiki bug di 
SilenceSkippingAudioProcessorsaat transisi antara format audio yang berbeda (misalnya, stereo ke mono) dapat menyebabkan prosesor memunculkan pengecualian (#1352). - Terapkan 
MediaCodecAudioRenderer.getDurationToProgressUs()sehingga ExoPlayer akan menjadwalkan loop kerja utamanya secara dinamis saat MediaCodecAudioRenderer dapat berjalan. 
 - Video:
- Memperbaiki masalah saat 
Listener.onRenderedFirstFrame()tiba terlalu awal saat beralih platform di tengah pemutaran. - Memperbaiki logika penggantian dekoder untuk Dolby Vision agar dapat menggunakan dekoder AV1 yang kompatibel jika diperlukan (#1389).
 - Memperbaiki pengecualian codec yang mungkin disebabkan oleh pengaktifan perender video di tengah pemutaran.
 
 - Memperbaiki masalah saat 
 - Teks:
- Memperbaiki masalah saat subtitel yang dimulai sebelum posisi pencarian dilewati. Masalah ini hanya diperkenalkan di Media3 1.4.0-alpha01.
 - Mengubah perilaku parsing subtitel default sehingga terjadi selama ekstraksi, bukan selama rendering (lihat Diagram arsitektur ExoPlayer untuk mengetahui perbedaan antara ekstraksi dan rendering).
- Perubahan ini dapat diganti dengan memanggil 
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)danTextRenderer.experimentalSetLegacyDecodingEnabled(true). Lihat dokumen tentang penyesuaian untuk mengetahui cara menggabungkan komponen ini ke dalam instanceExoPlayer. Metode ini (dan semua dukungan untuk decoding subtitel lama) akan dihapus dalam rilis mendatang. - Aplikasi dengan implementasi 
SubtitleDecoderkustom perlu memperbaruinya untuk menerapkanSubtitleParser(danSubtitleParser.Factory, bukanSubtitleDecoderFactory). 
 - Perubahan ini dapat diganti dengan memanggil 
 - PGS: Memperbaiki decoding run-length untuk menyelesaikan 
0sebagai indeks warna, bukan nilai warna literal (#1367). - CEA-708: Abaikan nilai 
rowLock. Spesifikasi CEA-708-E S-2023 menyatakan bahwarowLockdancolumnLockharus diasumsikan benar, terlepas dari nilai yang ada dalam aliran (dukungancolumnLocktidak diimplementasikan, sehingga secara efektif diasumsikan selalu salah).- Perubahan ini awalnya disertakan dalam catatan rilis 
1.3.0-alpha01, tetapi perubahan tersebut secara tidak sengaja dikembalikan sebelum rilis1.3.0-rc01. Sekarang masalah ini telah diperbaiki, sehingga perubahan tersebut muncul kembali. 
 - Perubahan ini awalnya disertakan dalam catatan rilis 
 - CEA-708: Hindari penambahan baris baru duplikat oleh penanganan sederhana ExoPlayer terhadap perintah 'set pen location' (#1315).
 - Memperbaiki 
IllegalArgumentExceptiondariLegacySubtitleUtilsaat contoh subtitel WebVTT tidak berisi tanda, misalnya sebagai bagian dari streaming DASH (#1516). 
 - Metadata:
- Memperbaiki pemetaan MP4 ke tag pengurutan ID3. Sebelumnya, tag MP4 'pengurutan album'
(
soal), 'pengurutan artis' (soar), dan 'pengurutan artis album' (soaa) dipetakan secara keliru ke tag ID3TSO2,TSOA, danTSOP(#1302). - Memperbaiki pembacaan tag numerik 
gnre(genre) dantmpo(tempo) MP4 (/iTunes) saat nilainya lebih dari satu byte. - Sebarkan frame ID3 
TCONkeMediaMetadata.genre(#1305). 
 - Memperbaiki pemetaan MP4 ke tag pengurutan ID3. Sebelumnya, tag MP4 'pengurutan album'
(
 - Gambar:
- Menambahkan dukungan untuk petak thumbnail DASH non-persegi (#1300).
 - Menambahkan dukungan untuk AVIF untuk API 34+.
 - Mengizinkan 
nullsebagai parameter untukExoPlayer.setImageOutput()guna menghapusImageOutputyang ditetapkan sebelumnya. 
 - DataSource:
- Menerapkan dukungan untuk URI resource mentah 
android.resource://package/iddenganpackageyang berbeda dengan paket aplikasi saat ini. Sebelumnya, cara ini tidak didokumentasikan agar berfungsi, tetapi merupakan cara yang lebih efisien untuk mengakses resource dalam paket lain daripada berdasarkan nama. - Periksa dengan cermat apakah 
urlbukan null di konstruktorDataSpec. Parameter ini sudah diberi anotasi agar tidak null. - Izinkan 
ByteArrayDataSourceuntuk menyelesaikan URI ke array byte selamaopen(), bukan dikodekan secara permanen saat konstruksi (#1405). 
 - Menerapkan dukungan untuk URI resource mentah 
 - DRM:
- Mengizinkan penyetelan 
LoadErrorHandlingPolicypadaDefaultDrmSessionManagerProvider(#1271). 
 - Mengizinkan penyetelan 
 - Efek:
- Mendukung beberapa perubahan kecepatan dalam 
EditedMediaItematauCompositionyang sama diSpeedChangeEffect. - Dukungan untuk output HLG dan PQ dari input bitmap HDR ultra.
 - Menambahkan dukungan untuk EGL_GL_COLORSPACE_BT2020_HLG_EXT, yang meningkatkan output permukaan HLG di ExoPlayer.setVideoEffect dan Debug SurfaceView Transformer.
 - Perbarui implementasi matriks Overlay agar konsisten dengan dokumentasi dengan membalikkan nilai x dan y yang diterapkan di 
setOverlayFrameAnchor(). Jika menggunakanOverlaySettings.Builder.setOverlayFrameAnchor(), balikkan nilai x dan y-nya dengan mengalikannya dengan-1. - Memperbaiki bug yang menyebabkan 
TimestampWrappermengalami error saat digunakan denganExoPlayer#setVideoEffects(#821). - Mengubah ruang kerja warna SDR default dari warna linear ke video SDR BT 709 listrik. Juga menyediakan opsi ketiga untuk mempertahankan ruang warna asli.
 - Mengizinkan penentuan urutan z yang tidak ditentukan dari EditedMediaItemSequences (#1055).
 - Mempertahankan rentang luminans yang konsisten di berbagai bagian konten HDR (menggunakan rentang HLG).
 - Menambahkan dukungan untuk overlay Ultra HDR (bitmap) pada konten HDR.
 - Mengizinkan penggunaan efek 
SeparableConvolutionsebelum API 26. - Hapus 
OverlaySettings.useHdryang tidak digunakan karena rentang dinamis overlay dan frame harus cocok. - Menambahkan dukungan HDR untuk 
TextOverlay. Luminositas overlay teks dapat disesuaikan denganOverlaySettings.Builder.setHdrLuminanceMultiplier(). 
 - Mendukung beberapa perubahan kecepatan dalam 
 - Ekstensi IMA:
- Mempromosikan API yang diperlukan agar aplikasi dapat memutar streaming iklan DAI ke versi stabil.
 - Menambahkan 
replaceAdTagParameters(Map <String, String>)keImaServerSideAdInsertionMediaSource.AdLoaderyang memungkinkan penggantian parameter tag iklan saat runtime. - Memperbaiki bug saat 
VideoAdPlayer.VideoAdPlayerCallback.onError()tidak dipanggil saat terjadi error pemutar selama pemutaran iklan (#1334). - Menambahkan nomor versi IMA SDK menjadi 3.33.0 untuk memperbaiki 
NullPointerExceptionsaat menggunakan URI tag iklandata://(#700). 
 - Sesi:
- Ubah default 
CommandButton.enabledmenjaditruedan pastikan nilai dapat tetap salah untuk pengontrol meskipun perintah terkait tersedia. - Menambahkan konstanta ikon untuk 
CommandButtonyang harus digunakan, bukan resource ikon kustom. - Menambahkan 
MediaSessionService.isPlaybackOngoing()untuk mengizinkan aplikasi mengkueri apakah layanan perlu dihentikan dionTaskRemoved()(#1219). - Tambahkan 
MediaSessionService.pauseAllPlayersAndStopSelf()yang dengan mudah memungkinkan untuk menjeda pemutaran semua sesi dan memanggilstopSelf()untuk menghentikan siklus prosesMediaSessionService. - Ganti 
MediaSessionService.onTaskRemoved(Intent)untuk memberikan penerapan default yang aman yang membuat layanan tetap berjalan di latar depan jika pemutaran sedang berlangsung atau menghentikan layanan jika tidak. - Menyembunyikan seekbar di notifikasi media untuk live stream dengan tidak menyetel durasi ke metadata sesi platform (#1256).
 - Menyelaraskan konversi 
MediaMetadatakeMediaDescriptionCompat, untuk menggunakan urutan dan logika pilihan yang sama saat memilih properti metadata seperti pada media1. - Menambahkan 
MediaSession.sendError()yang memungkinkan pengiriman error non-fatal ke pengontrol Media3. Saat menggunakan pengontrol notifikasi (lihatMediaSession.getMediaNotificationControllerInfo()), error kustom digunakan untuk memperbaruiPlaybackStatesesi platform ke status error dengan informasi error yang diberikan (#543). - Tambahkan 
MediaSession.Callback.onPlayerInteractionFinished()untuk memberi tahu sesi saat serangkaian interaksi pemain dari pengontrol tertentu selesai. - Tambahkan 
SessionErrordan gunakan diSessionResultdanLibraryResultalih-alih kode error untuk memberikan informasi lebih lanjut tentang error dan cara mengatasi error jika memungkinkan. - Publikasikan kode untuk aplikasi pengujian pengontrol media3 yang dapat digunakan untuk menguji interaksi dengan aplikasi yang memublikasikan sesi media.
 - Menyebarkan tambahan yang diteruskan ke
MediaSession[Builder].setSessionExtras()media3 kePlaybackStateCompat.getExtras()pengontrol media1. - Memetakan error fatal dan non-fatal ke dan dari sesi platform. 
PlaybackExceptiondipetakan ke status error fatal dariPlaybackStateCompat.SessionErroryang dikirim ke pengontrol notifikasi media denganMediaSession.sendError(ControllerInfo, SessionError)dipetakan ke error non-fatal diPlaybackStateCompat, yang berarti kode dan pesan error ditetapkan, tetapi status sesi platform tetap berbeda denganSTATE_ERROR. - Mengizinkan aktivitas sesi ditetapkan per pengontrol untuk menggantikan
aktivitas sesi global. Aktivitas sesi dapat ditentukan untuk
pengontrol pada waktu koneksi dengan membuat 
ConnectionResultdenganAcceptedResultBuilder.setSessionActivivty(PendingIntent). Setelah terhubung, aktivitas sesi dapat diperbarui denganMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Meningkatkan replikasi error panggilan ke 
MediaLibrarySession.Callback. Replikasi error kini dapat dikonfigurasi menggunakanMediaLibrarySession.Builder.setLibraryErrorReplicationMode()untuk memilih jenis error atau menonaktifkan replikasi error yang aktif secara default. 
 - Ubah default 
 - UI:
- Menambahkan dukungan tampilan gambar ke 
PlayerViewsaat terhubung keExoPlayer(#1144). - Menambahkan penyesuaian berbagai ikon di 
PlayerControlViewmelalui atribut xml untuk memungkinkan drawable yang berbeda per instancePlayerView, bukan penggantian global (#1200). - Mengatasi bug platform yang menyebabkan video direntangkan/dipangkas saat menggunakan
SurfaceViewdi dalamAndroidViewCompose pada API 34 (#1237). 
 - Menambahkan dukungan tampilan gambar ke 
 - Download:
- Pastikan 
DownloadHelpertidak membocorkan instanceRendereryang belum dirilis, yang pada akhirnya dapat menyebabkan aplikasi error denganIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224). 
 - Pastikan 
 - Ekstensi Cronet:
- Memperbaiki 
SocketTimeoutExceptiondiCronetDataSource. Di beberapa versi Cronet, permintaan yang diberikan oleh callback tidak selalu sama. Hal ini menyebabkan callback tidak selesai dan permintaan kehabisan waktu (https://issuetracker.google.com/328442628). 
 - Memperbaiki 
 - Ekstensi HLS:
- Memperbaiki bug saat sampel EMSG tertunda yang menunggu diskontinuitas didelegasikan di 
HlsSampleStreamWrapperdengan offset yang salah sehingga menyebabkanIndexOutOfBoundsExceptionatauIllegalArgumentException(#1002). - Memperbaiki bug yang menyebabkan playlist non-utama terus dimuat ulang untuk streaming LL-HLS (#1240).
 - Memperbaiki bug saat mengaktifkan CMCD untuk HLS dengan segmen inisialisasi menghasilkan 
Source ErrordanIllegalArgumentException. - Memperbaiki bug yang menyebabkan playlist pemutaran non-primer tidak di-refresh selama pemutaran live (#1240).
 - Memperbaiki bug saat mengaktifkan CMCD untuk live stream HLS menyebabkan
ArrayIndexOutOfBoundsException(#1395). 
 - Memperbaiki bug saat sampel EMSG tertunda yang menunggu diskontinuitas didelegasikan di 
 - Ekstensi DASH:
 - Ekstensi Cast:
- Memperbaiki bug yang mengonversi judul album 
MediaQueueItemmenjadi artis di item media Media3 (#1255). 
 - Memperbaiki bug yang mengonversi judul album 
 - Utilitas Pengujian:
- Terapkan 
onInit()danonRelease()diFakeRenderer. - Ubah metode 
TestPlayerRunHelper.runUntil()/playUntil()agar gagal saat terjadi error non-fatal (misalnya, yang dilaporkan keAnalyticsListener.onVideoCodecError()). Gunakan rangkaian metodeTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()baru untuk menonaktifkan perilaku ini. 
 - Terapkan 
 - Aplikasi demo:
- Gunakan 
DefaultPreloadManagerdi aplikasi demo video berdurasi singkat. - Mengizinkan setelan mode pengulangan dengan argumen 
Intentdari command line (#1266). - Gunakan 
HttpEngineDataSourcesebagaiHttpDataSourcejika didukung oleh perangkat. 
 - Gunakan 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus 
CronetDataSourceFactory. Sebagai gantinya, gunakanCronetDataSource.Factory. - Menghapus beberapa konstruktor 
DataSpec. Sebagai gantinya, gunakanDataSpec.Builder. - Menghapus metode 
setContentTypePredicate(Predicate)dariDefaultHttpDataSource,OkHttpDataSource, danCronetDataSource. Gunakan metode yang setara pada setiapXXXDataSource.Factory. - Menghapus konstruktor 
OkHttpDataSourcedanOkHttpDataSourceFactory. GunakanOkHttpDataSource.Factorysebagai gantinya. - Menghapus 
PlayerMessage.setHandler(Handler). Sebagai gantinya, gunakansetLooper(Looper). - Hapus kolom 
Timeline.Window.isLive. Gunakan metodeisLive()sebagai gantinya. - Menghapus konstruktor 
DefaultHttpDataSource. Sebagai gantinya, gunakanDefaultHttpDataSource.Factory. - Menghapus 
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. MenggunakanDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSsebagai gantinya. - Menghapus 
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Sebagai gantinya, gunakanMediaCodecInfo.canReuseCodec(Format, Format). - Menghapus metode 
DrmSessionManager.DUMMYdangetDummyDrmSessionManager(). GunakanDrmSessionManager.DRM_UNSUPPORTEDsebagai gantinya. - Hapus 
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Gunakan overload yang menggunakanDecoderReuseEvaluationsebagai gantinya. - Menghapus IntDef 
RendererSupport.FormatSupportdan konstantaFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPE. Gunakan IntDef dan konstanta yang setara diandroidx.media3.common.Csebagai gantinya (misalnya,C.FORMAT_HANDLED). - Menghapus antarmuka 
Bundleable. Hal ini mencakup penghapusan semua kolom konstantaBundleable.Creator<Foo> CREATOR. Pemanggil harus menggunakan metodeBundle toBundle()danstatic Foo fromBundle(Bundle)pada setiap jenis. 
 - Menghapus 
 
Versi 1.4.0-rc01
10 Juli 2024
Gunakan versi stabil 1.4.0.
Versi 1.4.0-beta01
26 Juni 2024
Gunakan versi stabil 1.4.0.
Versi 1.4.0-alpha02
7 Juni 2024
Gunakan versi stabil 1.4.0.
Versi 1.4.0-alpha01
17 April 2024
Gunakan versi stabil 1.4.0.
Versi 1.3.0
Versi 1.3.1
11 April 2024
androidx.media3:media3-*:1.3.1 dirilis.
Versi 1.3.1 berisi commit ini.
- Common Library:
- Tambahkan 
Format.labelsuntuk mengizinkan label alternatif yang dilokalkan atau lainnya. 
 - Tambahkan 
 - ExoPlayer:
- Memperbaiki masalah saat 
PreloadMediaPeriodtidak dapat mempertahankan aliran saat dimuat ulang. - Terapkan 
TrackSelectionResultyang sesuai dan benar ke periode pemutaran dalam pemilihan ulang trek. - Mulai perender yang diaktifkan lebih awal hanya setelah memajukan periode pemutaran saat melakukan transisi antar-item media (#1017).
 - Menambahkan jenis nilai yang ditampilkan yang tidak ada ke aturan proguard 
-keepclasseswithmembersuntukDefaultVideoFrameProcessor.Factory.Builder.build()(#1187). 
 - Memperbaiki masalah saat 
 - Transformator:
- Menambahkan solusi untuk pengecualian yang ditampilkan karena 
MediaMuxertidak mendukung stempel waktu presentasi negatif sebelum API 30. 
 - Menambahkan solusi untuk pengecualian yang ditampilkan karena 
 - Pemilihan Trek:
DefaultTrackSelector: Lebih memilih trek video dengan frame rate 'wajar' (>=10 fps) daripada yang memiliki frame rate lebih rendah atau tidak ditetapkan. Hal ini memastikan pemutar memilih trek video 'asli' dalam MP4 yang diekstrak dari foto gerak yang dapat berisi dua trek HEVC dengan salah satunya memiliki resolusi lebih tinggi, tetapi jumlah frame yang sangat kecil (#1051).
 - Ekstraktor:
- Memperbaiki masalah saat padding tidak dilewati saat membaca chunk berukuran ganjil dari file WAV (#1117).
 - MP3: Isi 
Format.averageBitratedari frame metadata sepertiXINGdanVBRI. - MPEG-TS: Mengembalikan perubahan yang bertujuan untuk memastikan frame terakhir dirender dengan meneruskan unit akses terakhir dari streaming ke antrean sampel (#7909). Hal ini disebabkan oleh perubahan yang menyebabkan masalah baru pada streaming HLS khusus frame I (#1150) dan streaming HLS H.262 (#1126).
 
 - Audio:
- Mengizinkan pemulihan perender dengan menonaktifkan offload jika trek audio gagal diinisialisasi dalam mode offload.
 
 - Video:
- Menambahkan solusi untuk masalah perangkat di Galaxy Tab S7 FE, Chromecast dengan Google TV, dan Lenovo M10 FHD Plus yang menyebabkan streaming H265 60 fps ditandai sebagai tidak didukung
 - Menambahkan solusi yang memastikan frame pertama selalu dirender saat tunneling meskipun perangkat tidak melakukannya secara otomatis seperti yang diperlukan oleh API (#1169). (#966).
 - Memperbaiki masalah saat penanganan info warna HDR menyebabkan perilaku codec yang tidak semestinya dan mencegah peralihan format adaptif untuk trek video SDR (#1158).
 
 - Teks:
- WebVTT: Mencegah isyarat yang berurutan secara langsung membuat instance 
CuesWithTimingtambahan yang tidak benar dariWebvttParser.parse(#1177). 
 - WebVTT: Mencegah isyarat yang berurutan secara langsung membuat instance 
 - DRM:
- Mengatasi 
NoSuchMethodErroryang dapat ditampilkan oleh frameworkMediaDrmdan bukanResourceBusyExceptionatauNotProvisionedExceptiondi beberapa perangkat Android 14 (#1145). 
 - Mengatasi 
 - Efek:
- Pemetaan nada PQ ke SDR yang ditingkatkan dengan mengonversi ruang warna.
 
 - Sesi:
 - UI:
- Melakukan penggantian untuk menyertakan nama bahasa trek audio jika 
Localetidak dapat mengidentifikasi nama tampilan (#988). 
 - Melakukan penggantian untuk menyertakan nama bahasa trek audio jika 
 - Ekstensi DASH:
- Isi semua elemen 
Labeldari manifes ke dalamFormat.labels(#1054). 
 - Isi semua elemen 
 - Ekstensi RTSP:
- Lewati nilai informasi sesi (tag i) yang kosong dalam penguraian SDP (#1087).
 
 - Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Nonaktifkan ekstensi MIDI sebagai dependensi lokal secara default karena memerlukan repositori Maven tambahan untuk dikonfigurasi. Pengguna yang memerlukan modul ini dari dependensi lokal dapat mengaktifkannya kembali.
 
 
Versi 1.3.0
6 Maret 2024
androidx.media3:media3-*:1.3.0 dirilis.
Versi 1.3.0 berisi commit ini.
- Common Library:
- Menerapkan dukungan untuk URI resource mentah 
android.resource://package/[type/]namedenganpackageyang berbeda dengan paket aplikasi saat ini. Hal ini selalu didokumentasikan agar berfungsi, tetapi belum diterapkan dengan benar hingga saat ini. - Menormalisasi jenis MIME yang ditetapkan oleh kode aplikasi atau dibaca dari media agar sepenuhnya menggunakan huruf kecil.
 - Tentukan iklan dengan 
MediaItemlengkap, bukanUritunggal diAdPlaybackState. - Tingkatkan 
minSdkmenjadi 19 (Android KitKat). Hal ini selaras dengan semua library AndroidX lainnya, dan diperlukan agar kami dapat mengupgrade ke versi terbaru dependensi AndroidX. - Isi 
artworkUridanartworkDatadiMediaMetadata.Builder.populate(MediaMetadata)jika setidaknya salah satu di antaranya tidak null (#964). 
 - Menerapkan dukungan untuk URI resource mentah 
 - ExoPlayer:
- Menambahkan 
PreloadMediaSourcedanPreloadMediaPeriodyang memungkinkan aplikasi memuat sumber media konten di posisi awal tertentu sebelum pemutaran.PreloadMediaSourcebertanggung jawab untuk menyiapkan sumber media konten guna menerimaTimeline, menyiapkan dan meng-cache periode pada posisi awal yang diberikan, memilih trek, dan memuat data media untuk periode tersebut. Aplikasi mengontrol progres pramuat dengan menerapkanPreloadMediaSource.PreloadControldan menetapkan sumber yang dimuat sebelumnya ke pemutar untuk pemutaran. - Menambahkan 
ExoPlayer.setImageOutputyang memungkinkan aplikasi menyetelImageRenderer.ImageOutput. DefaultRenderersFactorykini menyediakanImageRendererke pemutar secara default denganImageOutputdanImageDecoder.Factory.DEFAULTnull.- Memancarkan peristiwa 
Player.Listener.onPositionDiscontinuitysaat jeda dilewati (#765). - Menambahkan dukungan eksperimental untuk mengurai subtitel selama ekstraksi. Anda
dapat mengaktifkannya menggunakan
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Mendukung sumber media adaptif dengan 
PreloadMediaSource. - Terapkan 
HttpEngineDataSource,HttpDataSourcemenggunakan HttpEngine API. - Mencegah pembuatan subclass 
CompositeSequenceableLoader. Komponen ini sebelumnya dibuat dapat diekstensi tetapi tidak pernah dibuat subclass dalam library. Penyesuaian dapat dilakukan dengan membungkus instance menggunakan pola dekorator dan menerapkanCompositeSequenceableLoaderFactorykustom. - Memperbaiki masalah saat mengulangi waktu yang sama menyebabkan metadata dari item ini dihapus (#1007).
 - Mengganti nama metode 
experimentalSetSubtitleParserFactorydiBundledChunkExtractor.FactorydanDefaultHlsExtractorFactorymenjadisetSubtitleParserFactorydan melarang penerusannull. Gunakan metodeexperimentalParseSubtitlesDuringExtraction(boolean)baru untuk mengontrol perilaku parsing. - Menambahkan dukungan untuk menyesuaikan 
SubtitleParser.Factoryyang digunakan selama ekstraksi. Hal ini dapat dilakukan denganMediaSource.Factory.setSubtitleParserFactory(). - Menambahkan awalan sumber ke semua kolom 
Format.idyang dihasilkan dariMergingMediaSource. Hal ini membantu mengidentifikasi sumber yang menghasilkanFormat(#883). - Memperbaiki regex yang digunakan untuk memvalidasi nama kunci Common Media Client Data (CMCD) kustom dengan mengubahnya agar hanya memeriksa tanda hubung (#1028).
 - Menghentikan encoding ganda parameter kueri CMCD (#1075).
 
 - Menambahkan 
 - Transformator:
- Menambahkan dukungan untuk meratakan video gerak lambat SEF H.265/HEVC.
 - Meningkatkan kecepatan transmuxing, terutama untuk pengeditan 'hapus video'.
 - Menambahkan API untuk memastikan file output dimulai pada frame video. Hal ini dapat membuat output operasi pemangkasan lebih kompatibel dengan penerapan pemutar yang tidak menampilkan frame video pertama hingga stempel waktu presentasinya (#829).
 - Menambahkan dukungan untuk mengoptimalkan operasi pemangkasan MP4 aset tunggal.
 - Menambahkan dukungan untuk memastikan frame video memiliki stempel waktu pertama dalam file output. Memperbaiki file output yang diawali dengan frame hitam di pemutar berbasis iOS (#829).
 
 - Pemilihan Trek:
- Menambahkan 
DefaultTrackSelector.selectImageTrackuntuk mengaktifkan pemilihan jalur gambar. - Tambahkan 
TrackSelectionParameters.isPrioritizeImageOverVideoEnableduntuk menentukan apakah akan memilih trek gambar jika trek gambar dan trek video tersedia. Nilai defaultnya adalahfalseyang berarti pemilihan trek video diprioritaskan. 
 - Menambahkan 
 - Ekstraktor:
- Menambahkan parsing AV1C tambahan ke ekstraktor MP4 untuk mengambil nilai
ColorInfo.colorSpace,ColorInfo.colorTransfer, danColorInfo.colorRange(#692). - MP3: Gunakan pencarian kecepatan bit konstan (CBR) untuk file dengan header 
Info(setara dengan headerXingCBR). Sebelumnya, kita menggunakan tabel pencarian dari headerInfo, tetapi hal ini menghasilkan pencarian yang kurang presisi dibandingkan jika kita mengabaikannya dan mengasumsikan file tersebut adalah CBR. - MPEG2-TS: Menambahkan dukungan DTS, DTS-LBR, dan DTS:X Profile2 (#275).
 - Mengekstrak jenis audio dari deskriptor TS dan memetakannya ke flag peran, sehingga pengguna dapat membuat pilihan trek audio yang lebih tepat (#973).
 
 - Menambahkan parsing AV1C tambahan ke ekstraktor MP4 untuk mengambil nilai
 - Audio:
 - Video:
- Ubah konstruktor 
MediaCodecVideoRendereryang menggunakan argumenVideoFrameProcessor.Factorydan ganti dengan konstruktor yang menggunakan argumenVideoSinkProvider. Aplikasi yang ingin menyuntikkanVideoFrameProcessor.Factorykustom dapat membuat instanceCompositingVideoSinkProvideryang menggunakanVideoFrameProcessor.Factorykustom dan meneruskan penyedia sink video keMediaCodecVideoRenderer. 
 - Ubah konstruktor 
 - Teks:
- Memperbaiki serialisasi isyarat bitmap untuk mengatasi error 
Tried to marshall a Parcel that contained Binder objectssaat menggunakanDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: Abaikan nilai 
rowLock. Spesifikasi CEA-708-E S-2023 menyatakan bahwarowLockdancolumnLockharus diasumsikan benar, terlepas dari nilai yang ada dalam aliran (dukungancolumnLocktidak diimplementasikan, sehingga secara efektif diasumsikan selalu salah). 
 - Memperbaiki serialisasi isyarat bitmap untuk mengatasi error 
 - Gambar:
- Menambahkan dukungan untuk thumbnail DASH. Gambar petak dipangkas dan masing-masing thumbnail disediakan mendekati waktu presentasinya.
ImageOutput 
 - Menambahkan dukungan untuk thumbnail DASH. Gambar petak dipangkas dan masing-masing thumbnail disediakan mendekati waktu presentasinya.
 - DRM:
- Memutar sampel 'clear lead' yang tidak dienkripsi dalam konten DRM secara langsung secara
default, meskipun kunci untuk sampel terenkripsi berikutnya belum siap. Hal ini dapat menyebabkan jeda di tengah pemutaran jika kunci masih belum siap
saat posisi pemutaran mencapai sampel terenkripsi (tetapi sebelumnya
pemutaran tidak akan dimulai sama sekali pada saat ini). Perilaku ini dapat
dinonaktifkan dengan
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyatauDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys. 
 - Memutar sampel 'clear lead' yang tidak dienkripsi dalam konten DRM secara langsung secara
default, meskipun kunci untuk sampel terenkripsi berikutnya belum siap. Hal ini dapat menyebabkan jeda di tengah pemutaran jika kunci masih belum siap
saat posisi pemutaran mencapai sampel terenkripsi (tetapi sebelumnya
pemutaran tidak akan dimulai sama sekali pada saat ini). Perilaku ini dapat
dinonaktifkan dengan
 - Ekstensi IMA:
- Memperbaiki masalah saat iklan DASH dan HLS tanpa ekstensi file yang sesuai tidak dapat diputar.
 
 - Sesi:
- Menonaktifkan deteksi klik dua kali untuk aplikasi TV (#962).
 - Memperbaiki masalah saat 
MediaItem.RequestMetadatadengan ekstra non-null saja tidak ditransmisikan antara pengontrol media dan sesi. - Tambahkan konstruktor ke 
MediaLibrarySession.Builderyang hanya menggunakanContext, bukanMediaLibraryService. 
 - Ekstensi HLS:
- Kurangi visibilitas 
HlsMediaPeriodmenjadi paket pribadi. Jenis ini tidak boleh bergantung langsung dari luar paket HLS. - Menyelesaikan pencarian ke awal segmen secara lebih efisien (#1031).
 
 - Kurangi visibilitas 
 - Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Decoder MIDI: Mengabaikan pesan peristiwa SysEx (#710).
 
 - Utilitas Pengujian:
- Jangan menjeda pemutaran di 
TestPlayerRunHelper.playUntilPosition. Pengujian mempertahankan pemutaran dalam status pemutaran, tetapi menangguhkan progres hingga pengujian dapat menambahkan pernyataan dan tindakan lebih lanjut. 
 - Jangan menjeda pemutaran di 
 - Aplikasi demo:
- Tambahkan modul demo shortform untuk mendemonstrasikan penggunaan 
PreloadMediaSourcedengan kasus penggunaan konten shortform. 
 - Tambahkan modul demo shortform untuk mendemonstrasikan penggunaan 
 
Versi 1.3.0-rc01
22 Februari 2024
Gunakan versi stabil 1.3.0.
Versi 1.3.0-beta01
7 Februari 2024
Gunakan versi stabil 1.3.0.
Versi 1.3.0-alpha01
15 Januari 2024
Gunakan versi stabil 1.3.0.
Versi 1.2.0
Versi 1.2.1
9 Januari 2024
- ExoPlayer:
- Memperbaiki masalah saat pencarian manual di luar rentang
LiveConfiguration.min/maxOffsetterus menyesuaikan kembali offset kemin/maxOffset. - Memperbaiki masalah tata letak saluran OPUS dan VORBIS yang salah untuk 3, 5, 6, 7, dan 8 saluran (#8396).
 - Memperbaiki masalah saat pemilihan trek setelah mencari ke nol dalam live stream secara keliru membuat streaming dimulai pada posisi defaultnya (#9347).
 - Memperbaiki masalah saat instance baru 
CmcdData.Factorymenerima nilai negatif untukbufferedDurationUsdari sumber chunk, sehingga menghasilkanIllegalArgumentException(#888). 
 - Memperbaiki masalah saat pencarian manual di luar rentang
 - Transformator:
- Mengatasi masalah saat encoder akan mengalami pengecualian pada waktu konfigurasi karena menetapkan kecepatan operasi yang tinggi.
 
 - Ekstraktor:
- Tandai trek HEVC sekunder (tidak dapat diputar) dalam foto bergerak JPEG sebagai
ROLE_FLAG_ALTERNATEuntuk mencegahnya dipilih secara otomatis untuk pemutaran karena resolusinya yang lebih tinggi. - Memperbaiki deteksi frame utama yang salah untuk streaming TS H264 (#864).
 - Memperbaiki estimasi durasi streaming TS yang lebih lama dari 47.721 detik (#855).
 
 - Tandai trek HEVC sekunder (tidak dapat diputar) dalam foto bergerak JPEG sebagai
 - Audio:
- Memperbaiki penanganan EOS untuk 
SilenceSkippingAudioProcessorsaat dipanggil beberapa kali (#712). 
 - Memperbaiki penanganan EOS untuk 
 - Video:
- Menambahkan solusi untuk masalah perangkat di Galaxy Tab S7 FE, Chromecast dengan Google TV, dan Lenovo M10 FHD Plus yang menyebabkan streaming AVC 60 fps ditandai sebagai tidak didukung (#693).
 
 - Metadata:
- Memperbaiki bug yang membuat 
MediaMetadatahanya diisi dari komentar Vorbis dengan kunci huruf besar (#876). - Catch 
OutOfMemoryErrorsaat mengurai frame ID3 yang sangat besar, yang berarti pemutaran dapat dilanjutkan tanpa info tag, bukan gagal sepenuhnya. 
 - Memperbaiki bug yang membuat 
 - DRM:
- Memperluas solusi untuk URL lisensi 
https://default.urlClearKey palsu ke API 33+ (sebelumnya solusi hanya diterapkan pada API 33) (#837). - Memperbaiki 
ERROR_DRM_SESSION_NOT_OPENEDsaat beralih dari konten terenkripsi ke konten yang jelas tanpa permukaan yang terpasang ke pemutar. Error terjadi karena penggunaan dekoder aman yang salah untuk memutar konten yang tidak dienkripsi. 
 - Memperluas solusi untuk URL lisensi 
 - Sesi:
- Masukkan kunci dan nilai kustom di 
MediaMetadataCompatkeMediaMetadata.extrasdanMediaMetadata.extraskeMediaMetadataCompat(#756, #802). - Memperbaiki penyiaran 
notifyChildrenChangeduntuk pengontrol lama (#644). - Memperbaiki bug saat menyetel waktu negatif untuk timer 
setWhenyang dinonaktifkan pada notifikasi menyebabkan error di beberapa perangkat (#903). - Memperbaiki 
IllegalStateExceptionsaat pengontrol notifikasi media belum selesai terhubung saat pembaruan notifikasi pertama diminta (#917). 
 - Masukkan kunci dan nilai kustom di 
 - UI:
 - Ekstensi DASH:
- Mengurai "f800" sebagai jumlah saluran 5 untuk Dolby dalam manifes DASH (#688).
 
 - Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
 - Ekstensi Cast:
- Membersihkan pembuatan 
Timelineagar tidak menyebabkan aplikasi error saat pemuatan media gagal di perangkat transmisi (#708). 
 - Membersihkan pembuatan 
 
Versi 1.2.0
15 November 2023
- Common Library:
- Tambahkan parameter 
@Nullable Throwableke metode dalam antarmukaLog.Logger. Parametermessageuntuk metode ini tidak lagi berisi informasi apa pun tentangThrowableyang diteruskan ke metodeLog.{d,i,w,e}(), sehingga implementasi harus menambahkan informasi ini secara manual jika diinginkan (mungkin menggunakanLogger.appendThrowableString(String, Throwable)). - Memperbaiki masalah kompatibilitas Kotlin yang menyebabkan parameter jenis generik nullable dan jenis elemen array nullable tidak terdeteksi sebagai nullable. Contohnya
adalah parameter metode 
TrackSelectorResultdanSimpleDecoder(#6792). - Ubah perilaku UI dan notifikasi default di
Util.shouldShowPlayButtonuntuk menampilkan tombol "putar" saat pemutaran ditangguhkan sementara (misalnya, karena kehilangan fokus audio sementara). Perilaku lama dapat dipertahankan dengan menggunakanPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)atauMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Upgrade 
androidx.annotation:annotation-experimentalke1.3.1untuk memperbaiki https://issuetracker.google.com/251172715. - Pindahkan 
ExoPlayer.setAudioAttributeske antarmukaPlayer. 
 - Tambahkan parameter 
 - ExoPlayer:
- Memperbaiki masalah pencarian di aliran AC4 yang disebabkan oleh tidak mengidentifikasi contoh khusus dekode dengan benar (#11000).
 - Menambahkan penekanan pemutaran pada perangkat output audio yang tidak sesuai (misalnya, speaker bawaan di perangkat Wear OS) saat fitur ini diaktifkan melalui 
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Alasan penekanan pemutaran akan diperbarui sebagaiPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTjika pemutaran dicoba saat tidak ada output audio yang sesuai, atau jika semua output yang sesuai terputus selama pemutaran. Alasan penekanan akan dihapus saat output yang sesuai terhubung. - Tambahkan 
MediaSource.canUpdateMediaItemdanMediaSource.updateMediaItemuntuk menerima updateMediaItemsetelah pembuatan melaluiPlayer.replaceMediaItem(s). - Mengizinkan update 
MediaItemuntuk semua classMediaSourceyang disediakan oleh library melaluiPlayer.replaceMediaItem(s)(#33, #9978). - Mengganti nama 
MimeTypes.TEXT_EXOPLAYER_CUESmenjadiMimeTypes.APPLICATION_MEDIA3_CUES. - Tambahkan 
PngExtractoryang mengirim dan membaca seluruh file PNG ke dalamTrackOutputsebagai satu sampel. - Tingkatkan metode 
SequenceableLoader.continueLoading(long)di antarmukaSequenceableLoadermenjadiSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfoberisi parameter tambahan, termasukplaybackSpeeddanlastRebufferRealtimeMsselainplaybackPositionUsyang ada. - Tingkatkan metode 
ChunkSource.getNextChunk(long, long, List, ChunkHolder)di antarmukaChunkSourcemenjadiChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Menambahkan kolom tambahan ke logging Common Media Client Data (CMCD): kekurangan buffer (
bs), batas waktu (dl), kecepatan pemutaran (pr), dan mulai (su) (#8699). - Menambahkan bitdepth luma dan chroma ke 
ColorInfo(#491). - Menambahkan kolom tambahan ke logging Common Media Client Data (CMCD): permintaan objek berikutnya (
nor) dan permintaan rentang berikutnya (nrr) (#8699). - Menambahkan fungsi untuk mengirimkan data Common Media Client Data (CMCD) menggunakan parameter kueri (#553).
 - Memperbaiki 
ConcurrentModificationExceptiondiExperimentalBandwidthMeter(#612). - Menambahkan parameter 
MediaPeriodIdkeCompositeMediaSource.getMediaTimeForChildMediaTime. - Mendukung 
ClippingMediaSource(dan sumber lain dengan offset waktu periode/jendela) diConcatenatingMediaSource2(#11226). - Ubah 
BaseRenderer.onStreamChanged()agar juga menerima argumenMediaPeriodId. 
 - Transformator:
- Mengurai data rotasi EXIF untuk input gambar.
 - Menghapus jenis anotasi 
TransformationRequest.HdrModedan konstanta terkaitnya. Sebagai gantinya, gunakanComposition.HdrModedan konstanta terkaitnya. - Sederhanakan 
OverlaySettingsuntuk memperbaiki masalah rotasi. - Mengubah parameter 
frameRatedandurationUsdariSampleConsumer.queueInputBitmapmenjadiTimestampIterator. 
 - Pemilihan Trek:
- Tambahkan 
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessuntuk mengizinkan atau tidak mengizinkan adaptasi yang tidak lancar secara eksplisit. Default tetap pada perilakutruesaat ini. 
 - Tambahkan 
 - Ekstraktor:
- MPEG-TS: Pastikan frame terakhir dirender dengan meneruskan unit akses terakhir dari streaming ke antrean sampel (#7909).
 - Memperbaiki kesalahan ketik saat menentukan 
rotationDegrees.projectionPosePitchdiubah menjadiprojectionPoseRoll(#461). - Menghapus asumsi bahwa instance 
Extractordapat diperiksa secara langsung denganinstanceof. Jika Anda menginginkan akses runtime ke detail implementasiExtractor, Anda harus memanggilExtractor.getUnderlyingInstanceterlebih dahulu. - Menambahkan 
BmpExtractor. - Menambahkan 
WebpExtractor. - Menambahkan 
HeifExtractor. - Menambahkan dukungan
QuickTime klasik
ke 
Mp4Extractor. 
 - Audio:
- Menambahkan dukungan untuk PCM big-endian 24/32-bit di MP4 dan Matroska, serta mengurai
encoding PCM untuk 
lpcmdi MP4. - Menambahkan dukungan untuk mengekstrak audio Vorbis dalam MP4.
 - Menambahkan 
AudioSink.getFormatOffloadSupport(Format)yang mengambil tingkat dukungan pelepasan yang dapat diberikan sink untuk format melaluiDefaultAudioOffloadSupportProvider. Metode ini menampilkanAudioOffloadSupportbaru yang berisiisFormatSupported,isGaplessSupported, danisSpeedChangeSupported. - Tambahkan 
AudioSink.setOffloadMode()yang digunakan untuk mengonfigurasi konfigurasi pelepasan di sink audio. Default-nya adalahAudioSink.OFFLOAD_MODE_DISABLED. - Penurunan beban dapat diaktifkan melalui 
setAudioOffloadPreferencediTrackSelectionParameters. Jika preferensi yang ditetapkan adalah mengaktifkan, perangkat mendukung pelepasan untuk format, dan pemilihan trek adalah trek audio tunggal, maka pelepasan audio akan diaktifkan. - Jika 
audioOffloadModePreferencedisetel keAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, makaDefaultTrackSelectorhanya akan memilih trek audio dan hanya jika format trek tersebut didukung dalam offload. Jika tidak ada trek audio yang didukung dalam pelepasan, tidak ada trek yang akan dipilih. - Menonaktifkan dukungan tanpa jeda untuk offload saat sebelum level API 33 karena masalah posisi pemutaran setelah transisi trek.
 - Menghapus parameter 
enableOffloaddari tanda tangan metodeDefaultRenderersFactory.buildAudioSink. - Menghapus metode 
DefaultAudioSink.Builder.setOffloadMode. - Menghapus nilai intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Menambahkan dukungan untuk metadata tanpa jeda Opus selama pemutaran pelepasan.
 - Mengizinkan pemulihan perender dengan menonaktifkan pelepasan jika gagal pada penulisan pertama (#627).
 - Aktifkan Penjadwalan Offload secara default untuk pemutaran yang di-offload khusus audio.
 - Hapus 
ExoPlayer.experimentalSetOffloadSchedulingEnableddanAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - Mengganti nama 
onExperimentalSleepingForOffloadChangedmenjadionSleepingForOffloadChanged, danonExperimentalOffloadedPlaybackmenjadionOffloadedPlayback. - Pindahkan antarmuka dan definisi 
TrackSelectionParametersterkait mode offload audio ke classAudioOffloadPreferencesinternal. - Tambahkan callback 
onAudioTrackInitializeddanonAudioTrackReleasedkeAnalyticsListener,AudioRendererEventListener, danAudioSink.Listener. - Memperbaiki masalah kurangnya buffer audio DTS Express (#650).
 - Memperbaiki bug saat pemeriksaan kemampuan untuk E-AC3-JOC memunculkan
IllegalArgumentException(#677). 
 - Menambahkan dukungan untuk PCM big-endian 24/32-bit di MP4 dan Matroska, serta mengurai
encoding PCM untuk 
 - Video:
- Mengizinkan 
MediaCodecVideoRenderermenggunakanVideoFrameProcessor.Factorykustom. - Memperbaiki bug yang menyebabkan frame pertama tidak dapat dirender jika aliran audio dimulai dengan stempel waktu negatif (#291).
 
 - Mengizinkan 
 - Teks:
- Menghapus 
ExoplayerCuesDecoder. Trek teks dengansampleMimeType = application/x-media3-cueskini ditangani langsung olehTextRenderertanpa memerlukan instanceSubtitleDecoder. 
 - Menghapus 
 - Metadata:
MetadataDecoder.decodetidak akan lagi dipanggil untuk sampel "khusus dekode" karena penerapan harus menampilkan null.
 - Efek:
- Menambahkan input bitmap antrean 
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)berdasarkan stempel waktu. - Ubah 
VideoFrameProcessor.registerInputStream()menjadi tidak memblokir. Aplikasi harus menerapkanVideoFrameProcessor.Listener#onInputStreamRegistered(). - Mengubah parameter 
frameRatedandurationUsdariVideoFrameProcessor.queueInputBitmapmenjadiTimestampIterator. 
 - Menambahkan input bitmap antrean 
 - Ekstensi IMA:
- Memperbaiki bug saat live stream DASH multi-periode yang bukan item pertama dalam playlist dapat memunculkan pengecualian (#571).
 - Lepaskan StreamManager sebelum memanggil 
AdsLoader.destroy() - Menambahkan nomor versi IMA SDK menjadi 3.31.0.
 
 - Sesi:
- Menetapkan perilaku layanan latar depan notifikasi ke
FOREGROUND_SERVICE_IMMEDIATEdiDefaultMediaNotificationProvider(#167). - Gunakan hanya
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()di atas API 31 untuk menghindari masalah dengan API yang tidak digunakan lagi di perangkat Samsung (#167). - Gunakan pengontrol notifikasi media sebagai proxy untuk menetapkan perintah yang tersedia dan tata letak kustom yang digunakan untuk mengisi notifikasi dan sesi platform.
 - Mengonversi peristiwa tombol media yang diterima oleh
MediaSessionService.onStartCommand()dalam Media3, bukan merutekannya ke sesi platform dan kembali ke Media3. Dengan demikian, pengontrol pemanggil selalu menjadi pengontrol notifikasi media dan aplikasi dapat dengan mudah mengenali panggilan yang berasal dari notifikasi dengan cara yang sama di semua level API yang didukung. - Memperbaiki bug saat 
MediaController.getCurrentPosition()tidak maju saat terhubung keMediaSessionCompatlama. - Tambahkan 
MediaLibrarySession.getSubscribedControllers(mediaId)untuk kemudahan. - Ganti 
MediaLibrarySession.Callback.onSubscribe()untuk menegaskan ketersediaan ID induk yang menjadi tujuan langganan pengontrol. Jika berhasil, langganan akan diterima dannotifyChildrenChanged()akan segera dipanggil untuk memberi tahu browser (#561). - Menambahkan modul demo sesi untuk Automotive OS dan mengaktifkan demo sesi untuk Android Auto.
 - Jangan tetapkan antrean sesi framework saat
COMMAND_GET_TIMELINEtidak tersedia untuk pengontrol notifikasi media. Dengan Android Auto sebagai pengontrol klien yang membaca dari sesi framework, tombolqueuedi UI Android Auto tidak ditampilkan (#339). - Gunakan 
DataSourceBitmapLoadersecara default, bukanSimpleBitmapLoader(#271, #327). - Menambahkan 
MediaSession.Callback.onMediaButtonEvent(Intent)yang memungkinkan aplikasi mengganti penanganan peristiwa tombol media default. 
 - Menetapkan perilaku layanan latar depan notifikasi ke
 - UI:
- Tambahkan implementasi 
Player.Listeneruntuk perangkat Wear OS yang menangani penghentian pemutaran karenaPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTdengan meluncurkan dialog sistem untuk memungkinkan pengguna menghubungkan output audio yang sesuai (misalnya, headphone bluetooth). Pemroses akan otomatis melanjutkan pemutaran jika perangkat yang sesuai terhubung dalam waktu tunggu yang dapat dikonfigurasi (defaultnya adalah 5 menit). 
 - Tambahkan implementasi 
 - Download:
- Nyatakan jenis layanan latar depan "sinkronisasi data" untuk 
DownloadServiceagar kompatibel dengan Android 14. Saat menggunakan layanan ini, aplikasi juga perlu menambahkandataSyncsebagaiforegroundServiceTypedalam manifes dan menambahkan izinFOREGROUND_SERVICE_DATA_SYNC(#11239). 
 - Nyatakan jenis layanan latar depan "sinkronisasi data" untuk 
 - Ekstensi HLS:
- Memuat ulang playlist live HLS dengan interval yang dihitung dari waktu mulai pemuatan terakhir, bukan waktu selesai pemuatan terakhir (#663).
 
 - Ekstensi DASH:
- Mengizinkan beberapa ID DASH yang sama dalam URL template segmen.
 - Menambahkan dukungan eksperimental untuk mengurai subtitel selama ekstraksi. Hal ini
memiliki dukungan yang lebih baik untuk menggabungkan subtitle yang tumpang-tindih, termasuk
menyelesaikan masalah kedipan saat bertransisi antar-segmen subtitle. Anda
dapat mengaktifkannya menggunakan
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288). 
 - Ekstensi RTSP:
- Memperbaiki kondisi race yang dapat menyebabkan 
IndexOutOfBoundsExceptionsaat melakukan penggantian ke TCP, atau pemutaran terhenti dalam beberapa situasi. - Periksa status dalam penyiapan RTSP saat menampilkan status pemuatan
RtspMediaPeriod(#577). - Mengabaikan metode permintaan Rtsp kustom di header publik respons Options (#613).
 - Menggunakan nilai waktu tunggu Respons Penyiapan RTSP dalam interval waktu pengiriman permintaan Opsi RTSP keep-alive (#662).
 
 - Memperbaiki kondisi race yang dapat menyebabkan 
 - Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Merilis modul dekoder MIDI, yang memberikan dukungan untuk pemutaran file MIDI standar menggunakan library Jsyn untuk menyintesis audio.
 - Tambahkan 
DecoderOutputBuffer.shouldBeSkippeduntuk menandai buffer output secara langsung yang tidak perlu ditampilkan. Cara ini lebih disukai daripadaC.BUFFER_FLAG_DECODE_ONLYyang tidak akan digunakan lagi. - Tambahkan 
Decoder.setOutputStartTimeUsdanSimpleDecoder.isAtLeastOutputStartTimeUsuntuk mengizinkan dekoder menghilangkan sampel khusus dekode sebelum waktu mulai. Metode ini harus lebih diutamakan daripadaBuffer.isDecodeOnlyyang tidak akan digunakan lagi. - Memperbaiki bug saat memublikasikan artefak dekoder MIDI ke repositori Maven. Artefak
diganti namanya menjadi 
media3-exoplayer-midi(#734). 
 - Ekstensi Leanback:
- Memperbaiki bug saat menonaktifkan platform dapat menyebabkan 
ArithmeticExceptiondalam kode Leanback (#617). 
 - Memperbaiki bug saat menonaktifkan platform dapat menyebabkan 
 - Utilitas Pengujian:
- Buat 
TestExoPlayerBuilderdanFakeClockkompatibel dengan pengujian UI Espresso dan pengujian UI Compose. Hal ini memperbaiki bug saat pemutaran maju secara non-deterministik selama interaksi tampilan Espresso atau Compose. 
 - Buat 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)danTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). GunakanComposition.Builder.setHdrMode(int)dan teruskanCompositionkeTransformer.start(Composition, String)sebagai gantinya. - Menghapus metode 
DownloadNotificationHelper.buildProgressNotificationyang tidak digunakan lagi, sebagai gantinya gunakan metode yang tidak digunakan lagi yang mengambil parameternotMetRequirements. 
 - Menghapus
 
Versi 1.2.0-rc01
1 November 2023
Gunakan versi stabil 1.2.0.
Versi 1.2.0-beta01
19 Oktober 2023
Gunakan versi stabil 1.2.0.
Versi 1.2.0-alpha02
29 September 2023
Gunakan versi stabil 1.2.0.
Versi 1.2.0-alpha01
17 Agustus 2023
Gunakan versi stabil 1.2.0.
Versi 1.1.0
Versi 1.1.1
16 Agustus 2023
- Common Library:
- Menghapus dependensi 
multidexyang tidak sengaja ditambahkan dari semua modul (#499). 
 - Menghapus dependensi 
 - ExoPlayer:
- Memperbaiki masalah di 
PlaybackStatsListenersaatPlaybackStatspalsu dibuat setelah playlist dihapus. - Menambahkan kolom tambahan ke logging Data Klien Media Umum (CMCD): format streaming (sf), jenis streaming (st), versi (v), bitrate atas (tb), durasi objek (d), throughput terukur (mtp), dan jenis objek (ot) (#8699).
 
 - Memperbaiki masalah di 
 - Audio:
- Memperbaiki bug yang menyebabkan 
Player.getState()tidak pernah bertransisi keSTATE_ENDEDsaat memutar file yang sangat pendek (#538). 
 - Memperbaiki bug yang menyebabkan 
 - Offload Audio:
- Tambahkan Halaman Header ID Ogg dan Header Komentar ke bitstream untuk pemutaran Opus yang di-offload sesuai dengan RFC 7845.
 
 - Video:
- H.265/HEVC: Memperbaiki penguraian info gambar referensi jangka pendek dan panjang SPS.
 
 - Teks:
- CEA-608: Mengubah logika pemotongan isyarat agar hanya mempertimbangkan teks yang terlihat. Sebelumnya, indentasi dan offset tab disertakan saat membatasi panjang isyarat hingga 32 karakter (yang secara teknis benar menurut spesifikasi) (#11019).
 
 - Ekstensi IMA:
- Menambahkan nomor versi IMA SDK menjadi 3.30.3.
 
 - Sesi:
- Tambahkan tata letak kustom ke status pengontrol dan berikan pengambil untuk
mengaksesnya. Saat tata letak kustom berubah, 
MediaController.Listener.onCustomLayoutChangeddipanggil. Aplikasi yang ingin mengirim tata letak kustom yang berbeda ke pengontrol Media3 yang berbeda dapat melakukannya diMediaSession.Callback.onConnectdengan menggunakanAcceptedResultBuilderuntuk memastikan tata letak kustom tersedia untuk pengontrol saat koneksi selesai. - Memperbaiki kasus saat 
MediaLibraryServiceLegacyStubmengirim error keResultyang tidak mendukungnya sehingga menghasilkanUnsupportedOperationException(#78). - Memperbaiki cara 
PlayerWrappermembuatVolumeProviderCompatdengan menentukanvolumeControlTypemelalui perintah lama (COMMAND_ADJUST_DEVICE_VOLUMEdanCOMMAND_SET_DEVICE_VOLUME) dan perintah baru (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSdanCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554). 
 - Tambahkan tata letak kustom ke status pengontrol dan berikan pengambil untuk
mengaksesnya. Saat tata letak kustom berubah, 
 
Versi 1.1.0
5 Juli 2023
- Common Library:
- Menambahkan alasan penekanan untuk rute audio yang tidak sesuai dan diputar saat siap mengubah alasan penekanan terlalu lama. (#15).
 - Tambahkan perintah ke Pemutar:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
 - Menambahkan metode yang kelebihan beban ke Player yang memungkinkan pengguna menentukan flag volume:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
 - Menambahkan 
BuilderuntukDeviceInfodan menghentikan penggunaan konstruktor yang ada. - Tambahkan 
DeviceInfo.routingControllerIduntuk menentukan ID pengontrol pemilihan rute untuk pemutaran jarak jauh. - Menambahkan 
Player.replaceMediaItem(s)sebagai pintasan untuk menambahkan dan menghapus item pada posisi yang sama (#8046). 
 - ExoPlayer:
- Izinkan ExoPlayer mengontrol metode volume perangkat hanya jika pengguna secara eksplisit memilih untuk mengaktifkannya. Gunakan
ExoPlayer.Builder.setDeviceVolumeControlEnableduntuk mendapatkan akses ke:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)dansetDeviceVolume(int, int)increaseDeviceVolume(int)danincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)dandecreaseDeviceVolume(int, int)
 - Menambahkan 
FilteringMediaSourceyang memungkinkan untuk memfilter jenis jalur yang tersedia dariMediaSource. - Menambahkan dukungan untuk menyertakan Common Media Client Data (CMCD) dalam
permintaan keluar dari format streaming adaptif DASH, HLS, dan
SmoothStreaming. Kolom berikut, 
br,bl,cid,rtp, dansid, telah digabungkan (#8699). Struktur API dan metode API:- Logging CMCD dinonaktifkan secara default, gunakan
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)untuk mengaktifkannya. - Semua kunci diaktifkan secara default, ganti
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)untuk memfilter kunci mana yang dicatat ke dalam log. - Ganti 
CmcdConfiguration.RequestConfig.getCustomData()untuk mengaktifkan logging kunci kustom. 
 - Logging CMCD dinonaktifkan secara default, gunakan
 - Menambahkan tindakan tambahan ke manifes demo utama untuk mempermudah
memulai aplikasi demo dengan file 
*.exolist.jsonkustom (#439). - Menambahkan 
ExoPlayer.setVideoEffects()untuk menggunakanEffectselama pemutaran video. - Update 
SampleQueueuntuk menyimpansourceIdsebagailong, bukanint. Hal ini mengubah tanda tangan metode publikSampleQueue.sourceIddanSampleQueue.peekSourceId. - Tambahkan parameter ke metode 
LoadControlshouldStartPlaybackdanonTracksSelectedyang memungkinkan pengaitan metode ini denganMediaPeriodyang relevan. - Ubah tanda tangan
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)dengan menambahkan parameter linimasa yang berisi periode dengan UID yang digunakan sebagai kunci dalam peta. Hal ini diperlukan untuk menghindari masalah serentak dengan live stream multi-periode. - Menghentikan penggunaan 
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)danBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). Varian metode tanpamediaTimeOffsetUsdapat dipanggil sebagai gantinya. Perhatikan bahwa bahkan untuk varian yang tidak digunakan lagi, offset tidak lagi ditambahkan kestartTimeUsdanendTimeUsobjekMediaLoadDatayang dikirim oleh dispatcher. - Mengganti nama 
ExoTrackSelection.blacklistmenjadiexcludeTrackdanisBlacklistedmenjadiisTrackExcluded. - Memperbaiki perilaku yang tidak konsisten antara 
ExoPlayer.setMediaItem(s)danaddMediaItem(s)saat dipanggil pada playlist kosong. 
 - Izinkan ExoPlayer mengontrol metode volume perangkat hanya jika pengguna secara eksplisit memilih untuk mengaktifkannya. Gunakan
 - Transformator:
- Menghapus 
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Sebagai gantinya, gunakanExoPlayerAssetLoader.Factory(MediaSource.Factory)danTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Menghapus 
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Memperbaiki bug yang menyebabkan transformasi dapat terhenti (sehingga menyebabkan waktu tunggu muxer habis) jika akhir streaming video disinyalkan pada saat frame input menunggu pemrosesan.
 - Kueri codec melalui 
MediaCodecList, bukan menggunakan utilitasfindDecoder/EncoderForFormat, untuk memperluas dukungan. - Menghapus konfigurasi frame B di 
DefaultEncoderFactorykarena tidak berfungsi di beberapa perangkat. 
 - Menghapus 
 - Pemilihan trek:
- Menambahkan
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeyang dinonaktifkan secara default. Jika diaktifkan,DefaultTrackSelectorakan memicu pemilihan trek baru saat kemampuan perender berubah. 
 - Menambahkan
 - Ekstraktor:
 - Audio:
- Memperbaiki bug yang menyebabkan beberapa pemutaran gagal saat tunneling diaktifkan dan
AudioProcessorsaktif, misalnya untuk pemangkasan tanpa jeda (#10847). - Mengenkapsulasi frame Opus dalam paket Ogg dalam pemutaran langsung (offload).
 - Mengekstrapolasi posisi saat ini selama mode tidur dengan penjadwalan pelepasan.
 - Tambahkan 
Renderer.release()danAudioSink.release()untuk melepaskan resource di akhir siklus proses pemain. - Memproses perubahan kemampuan audio di 
DefaultAudioSink. Tambahkan parameter wajibcontextdi konstruktorDefaultAudioSink, yang akan digunakanDefaultAudioSinkuntuk mendaftar sebagai pemroses keAudioCapabilitiesReceiverdan memperbarui propertiaudioCapabilities-nya saat diberi tahu tentang perubahan kemampuan. - Sebarkan perubahan kemampuan audio melalui peristiwa baru
onAudioCapabilitiesChangeddi antarmukaAudioSink.Listener, dan antarmuka baruRendererCapabilities.Listeneryang memicu peristiwaonRendererCapabilitiesChanged. - Menambahkan 
ChannelMixingAudioProcessoruntuk menerapkan penskalaan/pencampuran ke saluran audio. - Menambahkan nilai int baru 
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEkeDecoderDiscardReasonsuntuk membuang decoder audio jika mode bypass mungkin dilakukan setelah kemampuan audio berubah. - Menambahkan dukungan pemutaran langsung untuk DTS Express dan DTS:X (#335).
 
 - Memperbaiki bug yang menyebabkan beberapa pemutaran gagal saat tunneling diaktifkan dan
 - Video:
- Buat 
MediaCodecVideoRenderermelaporkanVideoSizedengan lebar dan tinggi 0 saat perender dinonaktifkan.Player.Listener.onVideoSizeChangeddipanggil sesuai dengan perubahanPlayer.getVideoSize(). Dengan perubahan ini, ukuran video ExoPlayer denganMediaCodecVideoRenderermemiliki lebar dan tinggi 0 saatPlayer.getCurrentTrackstidak mendukung video, atau ukuran trek video yang didukung belum ditentukan. 
 - Buat 
 - DRM:
- Mengurangi visibilitas beberapa metode khusus internal di
DefaultDrmSessionyang tidak diharapkan dipanggil dari luar paket DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
 
 - Mengurangi visibilitas beberapa metode khusus internal di
 - Muxer:
- Menambahkan library muxer baru yang dapat digunakan untuk membuat file penampung MP4.
 
 - Ekstensi IMA:
- Aktifkan live stream DASH multi-periode untuk DAI. Perhatikan bahwa penerapan saat ini belum mendukung pencarian di live stream (#10912).
 - Memperbaiki bug saat grup iklan baru disisipkan dalam live stream karena posisi konten yang dihitung dalam linimasa berurutan sedikit berbeda.
 
 - Sesi:
- Tambahkan metode helper 
MediaSession.getControllerForCurrentRequestuntuk mendapatkan informasi tentang pengontrol yang saat ini memanggil metodePlayer. - Tambahkan 
androidx.media3.session.MediaButtonReceiveruntuk memungkinkan aplikasi menerapkan kelanjutan pemutaran dengan peristiwa tombol media yang dikirim oleh, misalnya, headset Bluetooth (#167). - Menambahkan implementasi default ke 
MediaSession.Callback.onAddMediaItemsuntuk memungkinkanMediaItemsyang diminta diteruskan kePlayerjika memilikiLocalConfiguration(misalnya, URI) (#282). - Menambahkan tombol perintah "cari ke sebelumnya" dan "cari ke berikutnya" pada tampilan notifikasi media ringkas secara default untuk Android 12 dan yang lebih lama (#410).
 - Menambahkan implementasi default ke 
MediaSession.Callback.onAddMediaItemsuntuk memungkinkanMediaItemsyang diminta diteruskan kePlayerjika memilikiLocalConfiguration(misalnya, URI) (#282). - Menambahkan tombol perintah "cari ke sebelumnya" dan "cari ke berikutnya" pada tampilan notifikasi media ringkas secara default untuk Android 12 dan yang lebih lama (#410).
 
 - Tambahkan metode helper 
 - UI:
- Tambahkan metode Util 
shouldShowPlayButtondanhandlePlayPauseButtonActionuntuk menulis elemen UI kustom dengan tombol putar/jeda. 
 - Tambahkan metode Util 
 - Ekstensi RTSP:
 - Ekstensi DASH:
- Hapus offset waktu media dari 
MediaLoadData.startTimeMsdanMediaLoadData.endTimeMsuntuk streaming DASH multi-periode. - Memperbaiki bug saat menyiapkan ulang sumber media Dash live multi-periode
menghasilkan 
IndexOutOfBoundsException(#10838). 
 - Hapus offset waktu media dari 
 - Ekstensi HLS:
- Tambahkan
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)untuk menetapkan waktu tunggu bagi thread pemuatan untuk menungguTimestampAdjusterdiinisialisasi. Jika inisialisasi tidak selesai sebelum waktu tunggu habis,PlaybackExceptionakan ditampilkan untuk menghindari pemutaran yang terus-menerus terhenti. Waktu tunggu ditetapkan ke nol secara default (#323). 
 - Tambahkan
 - Utilitas Pengujian:
- Periksa ketidakpekaan huruf besar/kecil skema URI di 
DataSourceContractTest. 
 - Periksa ketidakpekaan huruf besar/kecil skema URI di 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus konstruktor 
DefaultAudioSinkdan menggunakanDefaultAudioSink.Buildersebagai gantinya. - Hapus 
HlsMasterPlaylist, gunakanHlsMultivariantPlaylistsebagai gantinya. - Menghapus 
Player.stop(boolean). Sebagai gantinya, gunakanPlayer.stop()danPlayer.clearMediaItems()(jikaresetadalahtrue). - Menghapus dua konstruktor 
SimpleCacheyang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menggunakanDatabaseProvidersebagai gantinya untuk performa yang lebih baik. - Menghapus konstruktor 
DefaultBandwidthMeter, gunakanDefaultBandwidthMeter.Buildersebagai gantinya. - Menghapus konstruktor 
DefaultDrmSessionManagerdan menggunakanDefaultDrmSessionManager.Buildersebagai gantinya. - Menghapus dua konstruktor 
HttpDataSource.InvalidResponseCodeExceptionyang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menerima kolom tambahan(cause,responseBody) untuk meningkatkan logging error. - Hapus 
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDash, danDownloadHelper.forSmoothStreaming, gunakanDownloadHelper.forMediaItemsebagai gantinya. - Hapus konstruktor 
DownloadServiceyang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menyertakan opsi untuk memberikan parameterchannelDescriptionResourceId. - Menghapus konstanta String yang tidak digunakan lagi untuk Charset (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAME, danUTF16LE_NAME), gunakan Charset Kotlin dari paketkotlin.text,java.nio.charset.StandardCharsets, ataucom.google.common.base.Charsets. - Hapus konstruktor 
WorkManagerScheduleryang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menyertakan opsi untuk memberikan parameterContextsebagai gantinya. - Menghapus metode yang tidak digunakan lagi, yaitu 
createVideoSampleFormat,createAudioSampleFormat,createContainerFormat, dancreateSampleFormat, yang digunakan untuk membuat instance classFormat. Sebagai gantinya, gunakanFormat.Builderuntuk membuat instanceFormat. - Menghapus metode yang tidak digunakan lagi, yaitu 
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrate, dancopyWithVideoSize. Sebagai gantinya, gunakan metodeFormat.buildUpon()dan setter. - Menghapus 
ExoPlayer.retry()yang tidak digunakan lagi, sebagai gantinya gunakanprepare(). - Menghapus konstruktor 
DefaultTrackSelectorargumen nol yang tidak digunakan lagi, gunakanDefaultTrackSelector(Context)sebagai gantinya. - Menghapus konstruktor 
OfflineLicenseHelperyang tidak digunakan lagi, sebagai gantinya gunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Menghapus konstruktor 
DownloadManageryang tidak digunakan lagi, gunakan konstruktor yang menggunakanExecutorsebagai gantinya. - Menghapus konstruktor 
Cueyang tidak digunakan lagi, sebagai gantinya gunakanCue.Builder. - Menghapus konstruktor 
OfflineLicenseHelperyang tidak digunakan lagi, sebagai gantinya gunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Menghapus empat metode 
AnalyticsListeneryang tidak digunakan lagi:onDecoderEnabled, gunakanonAudioEnableddan/atauonVideoEnabledsebagai gantinya.onDecoderInitialized, gunakanonAudioDecoderInitializeddan/atauonVideoDecoderInitialized.onDecoderInputFormatChanged, gunakanonAudioInputFormatChangeddan/atauonVideoInputFormatChangedsebagai gantinya.onDecoderDisabled, gunakanonAudioDisableddan/atauonVideoDisabledsebagai gantinya.
 - Hapus 
Player.Listener.onSeekProcesseddanAnalyticsListener.onSeekProcessedyang tidak digunakan lagi, sebagai gantinya gunakanonPositionDiscontinuitydenganDISCONTINUITY_REASON_SEEK. - Hapus 
ExoPlayer.setHandleWakeLock(boolean), gunakansetWakeMode(int)sebagai gantinya. - Menghapus 
DefaultLoadControl.Builder.createDefaultLoadControl()yang tidak digunakan lagi, sebagai gantinya gunakanbuild(). - Menghapus 
MediaItem.PlaybackPropertiesyang tidak digunakan lagi, sebagai gantinya gunakanMediaItem.LocalConfiguration. Kolom yang tidak digunakan lagiMediaItem.playbackPropertieskini berjenisMediaItem.LocalConfiguration. 
 - Menghapus konstruktor 
 
Versi 1.1.0-rc01
21 Juni 2023
Gunakan versi stabil 1.1.0.
Versi 1.1.0-beta01
7 Juni 2023
Gunakan versi stabil 1.1.0.
Versi 1.1.0-alpha01
10 Mei 2023
Gunakan versi stabil 1.1.0.
Versi 1.0.0
Versi 1.0.2
18 Mei 2023
androidx.media3:media3-*:1.0.2 dirilis.
Versi 1.0.2 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.7.
Rilis ini berisi perubahan berikut sejak rilis 1.0.1:
- Library Core:
- Tambahkan 
Buffer.isLastSample()yang menunjukkan apakahBufferberisi flagC.BUFFER_FLAG_LAST_SAMPLE. - Memperbaiki masalah saat frame terakhir mungkin tidak dirender jika sampel terakhir dengan frame dikeluarkan dari antrean tanpa membaca sampel 'akhir streaming'. (#11079).
 
 - Tambahkan 
 - Ekstraktor:
- Memperbaiki penguraian SPS H.265 dalam file MPEG-TS dengan menggunakan kembali logika penguraian yang sudah digunakan oleh ekstraktor RTSP dan MP4 (#303).
 
 - Teks:
- SSA: Menambahkan dukungan untuk file UTF-16 jika dimulai dengan tanda urutan byte (#319).
 
 - Sesi:
- Memperbaiki masalah saat 
MediaControllertidak mengupdate perintah yang tersedia saat terhubung keMediaSessionCompatlama yang mengupdate tindakannya. - Memperbaiki bug yang mencegah 
MediaLibraryServicemenampilkan null untuk panggilan dari UI Sistem keCallback.onGetLibraryRootdenganparams.isRecent == truedi API 30 (#355). - Memperbaiki kebocoran memori 
MediaSessionServiceatauMediaLibraryService(#346). - Memperbaiki bug saat pembaruan 
Timelinedan posisi gabungan dalamMediaSessiondapat menyebabkanMediaControllermemunculkanIllegalStateException. 
 - Memperbaiki masalah saat 
 
Versi 1.0.1
18 April 2023
androidx.media3:media3-*:1.0.1 dirilis.
Versi 1.0.1 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.6.
- Library Core:
- Mereset penggantian live stream target saat mencari ke posisi default (#11051).
 - Memperbaiki bug saat streaming sampel kosong di media dapat menyebabkan pemutaran macet.
 
 - Sesi:
- Memperbaiki bug saat beberapa item antrean identik yang dipublikasikan oleh
MediaSessionCompatlama menyebabkan pengecualian diMediaController(#290). - Menambahkan penerusan 
MediaSession.broadcastCustomCommandyang tidak ada keMediaControllerCompat.Callback.onSessionEventlama (#293). - Memperbaiki bug saat memanggil 
MediaSession.setPlayertidak mengupdate perintah yang tersedia. - Memperbaiki masalah saat instance 
TrackSelectionOverrideyang dikirim dariMediaControllerdiabaikan jika merujuk ke grup denganFormat.metadata(#296). - Memperbaiki masalah saat 
Player.COMMAND_GET_CURRENT_MEDIA_ITEMharus tersedia untuk mengakses metadata melaluiMediaSessionCompatlama. - Memperbaiki masalah saat instance 
MediaSessiondi thread latar belakang menyebabkan error saat digunakan diMediaSessionService(#318). - Memperbaiki masalah saat penerima tombol media dideklarasikan oleh library tanpa dimaksudkan oleh aplikasi (#314).
 
 - Memperbaiki bug saat beberapa item antrean identik yang dipublikasikan oleh
 - DASH:
- Memperbaiki penanganan linimasa segmen kosong (#11014).
 
 - RTSP:
- Coba lagi dengan TCP jika Penyiapan RTSP dengan UDP gagal dengan Error RTSP 461 UnsupportedTransport (#11069).
 
 
Versi 1.0.0
22 Maret 2023
androidx.media3:media3-*:1.0.0 dirilis.
Versi 1.0.0 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.5.
Tidak ada perubahan sejak 1.0.0-rc02.
Versi 1.0.0-rc02
2 Maret 2023
androidx.media3:media3-*:1.0.0-rc02 dirilis.
Versi 1.0.0-rc02 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.4.
- Library Core:
 - Download:
- Buat perbedaan maksimum waktu mulai dua segmen yang akan digabungkan dapat dikonfigurasi di 
SegmentDownloaderdan subkelas (#248). 
 - Buat perbedaan maksimum waktu mulai dua segmen yang akan digabungkan dapat dikonfigurasi di 
 - Audio:
 - Video:
- Memetakan format HEVC HDR10 ke 
HEVCProfileMain10HDR10, bukanHEVCProfileMain10. - Menambahkan solusi untuk masalah perangkat di Chromecast dengan Google TV dan Lenovo M10 FHD Plus yang menyebabkan streaming AVC 60 fps ditandai sebagai tidak didukung (#10898).
 - Memperbaiki masalah performa pelepasan frame saat memutar media dengan kecepatan frame yang jauh lebih tinggi daripada kecepatan refresh layar.
 
 - Memetakan format HEVC HDR10 ke 
 - Cast:
- Memperbaiki 
STATE_IDLEtransien saat bertransisi antar-item media (#245). 
 - Memperbaiki 
 - RTSP:
- Menangkap IllegalArgumentException yang ditampilkan saat menguraikan RTSP Describe response messages yang tidak valid (#10971).
 
 - Sesi:
- Memperbaiki bug saat tombol putar/jeda notifikasi tidak diperbarui dengan status pemutar (#192).
 
 - Ekstensi IMA:
- Memperbaiki bug yang mencegah streaming DAI tanpa iklan apa pun dimulai
karena peristiwa 
LOADEDpertama (dan dalam kasus tanpa iklan, satu-satunya peristiwa) tidak diterima. 
 - Memperbaiki bug yang mencegah streaming DAI tanpa iklan apa pun dimulai
karena peristiwa 
 
Versi 1.0.0-rc01
16 Februari 2023
androidx.media3:media3-*:1.0.0-rc01 dirilis.
Versi 1.0.0-rc01 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.3.
- Library Core:
- Menyesuaikan logika pengurutan dekoder perender untuk mempertahankan
preferensi 
MediaCodecSelector, meskipun dekoder melaporkan bahwa dekoder mungkin tidak dapat memutar media secara optimal. Misalnya, dengan pemilih default, dekoder hardware dengan hanya dukungan fungsi akan lebih diutamakan daripada dekoder software yang sepenuhnya mendukung format (#10604). - Menambahkan 
ExoPlayer.Builder.setPlaybackLooperyang menetapkan thread pemutaran yang sudah ada sebelumnya untuk instance ExoPlayer baru. - Mengizinkan helper pengelola download dihapus (#10776).
 - Menambahkan parameter ke 
BasePlayer.seekTountuk menunjukkan perintah yang digunakan untuk melakukan pencarian. - Menggunakan tema saat memuat drawable pada API 21+ (#220).
 - Menambahkan 
ConcatenatingMediaSource2yang memungkinkan penggabungan beberapa item media menjadi satu jendela (#247). 
 - Menyesuaikan logika pengurutan dekoder perender untuk mempertahankan
preferensi 
 - Ekstraktor:
- Menampilkan 
ParserException, bukanNullPointerExceptionjika tabel contoh (stbl) tidak memiliki deskripsi contoh yang diperlukan (stsd) saat mengurai atom trek. - Melewati contoh dengan benar saat melakukan pencarian langsung ke frame sinkronisasi di fMP4 (#10941).
 
 - Menampilkan 
 - Audio:
- Menggunakan kecepatan bit format audio terkompresi untuk menghitung ukuran buffer minimum
untuk 
AudioTrackdalam pemutaran langsung (passthrough). 
 - Menggunakan kecepatan bit format audio terkompresi untuk menghitung ukuran buffer minimum
untuk 
 - Teks:
- Memperbaiki 
TextRendereryang meneruskan indeks tidak valid (negatif) keSubtitle.getEventTimejika file subtitel tidak berisi tanda. - SubRip: Menambahkan dukungan untuk file UTF-16 jika dimulai dengan tanda urutan byte.
 
 - Memperbaiki 
 - Metadata:
- Mengurai beberapa nilai yang dipisahkan null dari frame ID3, seperti yang diizinkan oleh ID3 v2.4.
 - Menambahkan 
MediaMetadata.mediaTypeuntuk menunjukkan jenis konten atau jenis folder yang dijelaskan oleh metadata. - Menambahkan 
MediaMetadata.isBrowsablesebagai penggantiMediaMetadata.folderType. Jenis folder tidak akan digunakan lagi dalam rilis berikutnya. 
 - DASH:
- Menambahkan penguraian lengkap untuk kumpulan adaptasi gambar, termasuk jumlah kartu (#3752).
 
 - UI:
- Memperbaiki 
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)yang tidak digunakan lagi untuk memastikan perubahan visibilitas diteruskan ke pemroses yang terdaftar (#229). - Memperbaiki urutan kontrol pemutar tengah di 
PlayerViewsaat menggunakan tata letak kanan ke kiri (RTL) (#227). 
 - Memperbaiki 
 - Sesi:
- Menambahkan 
SimpleBasePlayerabstrak untuk membantu menerapkan antarmukaPlayeruntuk pemutar kustom. - Menambahkan metode helper untuk mengonversi token sesi platform ke Media3
SessionToken(#171). - Menggunakan 
onMediaMetadataChangeduntuk memicu update sesi media platform (#219). - Menambahkan sesi media sebagai argumen 
getMediaButtons()dariDefaultMediaNotificationProviderdan menggunakan daftar yang tidak dapat diubah untuk kejelasan (#216). - Menambahkan pemroses callback 
onSetMediaItemsuntuk memberikan cara mengubah/menetapkan daftarMediaItem, indeks awal, dan posisi berdasarkan sesi sebelum menyetel ke Pemutar (#156). - Menghindari deteksi ketuk dua kali untuk peristiwa tombol media non-Bluetooth (#233).
 - Membuat 
QueueTimelinemenjadi lebih andal jika status sesi lama mencurigakan (#241). 
 - Menambahkan 
 - Metadata:
- Mengurai beberapa nilai yang dipisahkan null dari frame ID3, seperti yang diizinkan oleh ID3 v2.4.
 - Menambahkan 
MediaMetadata.mediaTypeuntuk menunjukkan jenis konten atau jenis folder yang dijelaskan oleh metadata. - Menambahkan 
MediaMetadata.isBrowsablesebagai penggantiMediaMetadata.folderType. Jenis folder tidak akan digunakan lagi dalam rilis berikutnya. 
 - Ektensi Cast:
- Menambahkan nomor versi Cast SDK menjadi 21.2.0.
 
 - Ekstensi IMA:
- Menghapus pemroses pemutar 
ImaServerSideAdInsertionMediaSourcedi thread aplikasi untuk menghindari masalah threading. - Menambahkan properti 
focusSkipButtonWhenAvailablekeImaServerSideAdInsertionMediaSource.AdsLoader.Builderuntuk meminta tombol lewati difokuskan pada perangkat TV dan menyetelnya ke benar (true) secara default. - Menambahkan metode 
focusSkipButton()keImaServerSideAdInsertionMediaSource.AdsLoaderuntuk secara terprogram meminta tombol lewati difokuskan. - Menambahkan nomor vers IMA SDK menjadi 3.29.0.
 
 - Menghapus pemroses pemutar 
 - Aplikasi demo:
- Meminta izin notifikasi untuk notifikasi download saat runtime (#10884).
 
 
Versi 1.0.0-beta03
22 November 2022
androidx.media3:media3-*:1.0.0-beta03 dirilis.
Versi 1.0.0-beta03 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.2.
- Library Core:
- Menambahkan 
ExoPlayer.isTunnelingEnableduntuk memeriksa apakah tunnel diaktifkan untuk jalur yang saat ini dipilih (#2518). - Menambahkan 
WrappingMediaSourceuntuk menyederhanakan penggabungan satuMediaSource(#7279). - Menghapus buffer kembali sebelum pemutaran macet karena memori yang tersedia tidak mencukupi.
 - Menutup blok Pelacakan "doSomeWork" saat offload diaktifkan.
 - Memperbaiki masalah pelacakan sesi dengan pencarian cepat di 
PlaybackStatsListener(#180). - Mengirim callback 
onMediaItemTransitionyang hilang saat memanggilseekToNextatauseekToPreviousdalam playlist item tunggal (#10667). - Menambahkan 
Player.getSurfaceSizeyang menampilkan ukuran platform tempat video dirender. - Memperbaiki bug saat menghapus pemroses selama rilis pemutar dapat menyebabkan
IllegalStateException(#10758). 
 - Menambahkan 
 - Build:
- Menerapkan 
compileSdkVersionminimum untuk menghindari error kompilasi (#10684). - Menghindari pemblokiran publikasi jika disertakan dalam build gradle lain.
 
 - Menerapkan 
 - Pemilihan trek:
- Memilih trek lain ke Dolby Vision jika layar tidak mendukungnya. (#8944).
 
 - Download:
- Memperbaiki potensi loop tanpa batas di 
ProgressiveDownloaderyang disebabkan oleh download dan pemutaran serentak denganPriorityTaskManageryang sama (#10570). - Membuat notifikasi download segera muncul (#183).
 - Membatasi penghapusan download paralel menjadi 1 untuk menghindari pembuatan thread yang berlebihan (#10458).
 
 - Memperbaiki potensi loop tanpa batas di 
 - Video:
- Mencoba dekoder alternatif untuk Dolby Vision jika layar tidak mendukungnya. (#9794).
 
 - Audio:
- Menggunakan 
SingleThreadExecutoruntuk merilis instanceAudioTrackguna menghindari error OutOfMemory saat merilis beberapa pemutar secara bersamaan (#10057). - Menambahkan 
AudioOffloadListener.onExperimentalOffloadedPlaybackuntuk status offload AudioTrack. (#134). - Menjadikan 
AudioTrackBufferSizeProvidersebagai antarmuka publik. - Menambahkan 
ExoPlayer.setPreferredAudioDeviceuntuk menyetel perangkat output audio yang diinginkan (#135). - Mengganti nama 
androidx.media3.exoplayer.audio.AudioProcessormenjadiandroidx.media3.common.audio.AudioProcessor. - Memetakan audio 8-channel dan 12-channel ke mask saluran 7.1 dan 7.1.4 di semua versi Android (#10701).
 
 - Menggunakan 
 - Metadata:
MetadataRenderersekarang dapat dikonfigurasi untuk merender metadata segera setelah tersedia. Membuat instance denganMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)untuk menentukan apakah perender akan menampilkan metadata lebih awal atau menyinkronkan dengan posisi pemutar.
 - DRM:
- Memperbaiki bug dalam implementasi ClearKey Android 13 yang menampilkan URL lisensi yang tidak kosong tetapi tidak valid.
 - Memperbaiki error 
setMediaDrmSession failed: session not openedsaat beralih antara skema DRM dalam playlist (misalnya, Widevine ke ClearKey). 
 - Teks:
- CEA-608: Memastikan perintah tombol layanan pada kolom 2 ditangani dengan benar (#10666).
 
 - DASH:
- Menguraikan 
EventStream.presentationTimeOffsetdari manifes (#10460). 
 - Menguraikan 
 - UI:
- Menggunakan penggantian pemutar saat ini sebagai preset di
TrackSelectionDialogBuilder(#10429). 
 - Menggunakan penggantian pemutar saat ini sebagai preset di
 - Sesi:
- Memastikan perintah selalu dijalankan dalam urutan yang benar meskipun beberapa perintah memerlukan resolusi asinkron (#85).
 - Menambahkan 
DefaultMediaNotificationProvider.Builderuntuk mem-build instanceDefaultMediaNotificationProvider. Builder dapat mengonfigurasi ID notifikasi, ID saluran notifikasi, dan nama saluran notifikasi yang digunakan oleh penyedia. Selain itu, tambahkan metodeDefaultMediaNotificationProvider.setSmallIcon(int)untuk menyetel ikon kecil notifikasi. (#104). - Memastikan perintah yang dikirim sebelum 
MediaController.release()tidak dihapus (#99). SimpleBitmapLoaderdapat memuat bitmap dari URIfile://(#108).- Memperbaiki pernyataan yang mencegah 
MediaControllermencari iklan dalam periode (#122). - Saat pemutaran berakhir, 
MediaSessionServiceakan dihentikan dari latar depan dan notifikasi akan ditampilkan untuk memulai ulang pemutaran item media yang terakhir diputar (#112). - Jangan memulai layanan latar depan dengan intent tertunda untuk dijeda (#167).
 - Sembunyikan 'badge' secara manual yang terkait dengan notifikasi yang dibuat oleh
DefaultNotificationProviderpada API 26 dan API 27 (badge secara otomatis disembunyikan di API 28+) (#131 ). - Memperbaiki bug saat koneksi pengikat kedua dari MediaSession lama ke Media3 MediaController menyebabkan IllegalStateExceptions (#49).
 
 - RTSP:
 - IMA:
- Menambahkan waktu tunggu untuk memuat informasi iklan guna menangani kasus saat IMA SDK berhenti memuat iklan (#10510).
 - Mencegah iklan mid-roll dilewati saat melakukan pencarian di akhir konten (#10685).
 - Menghitung durasi periode dengan benar untuk live stream dengan iklan yang disisipkan sisi server, misalnya IMA DAI (#10764).
 
 - Ekstensi FFmpeg:
- Menambahkan flag yang baru diperlukan untuk menautkan library FFmpeg dengan NDK 23.1.7779620 dan yang lebih baru (#9933).
 
 - Ekstensi AV1:
- Mengupdate versi CMake untuk menghindari ketidaksesuaian dengan rilis Android Studio terbaru (#9933).
 
 - Ektensi Cast:
- Mengimplementasikan 
getDeviceInfo()agar dapat mengidentifikasiCastPlayersaat mengontrol pemutaran denganMediaController(#142). 
 - Mengimplementasikan 
 - Transformator:
- Menambahkan timer watchdog muxer untuk mendeteksi kapan pembuatan sampel output terlalu lambat.
 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus 
Transformer.Builder.setOutputMimeType(String). Fitur ini telah dihapus. Jenis MIME akan selalu berupa MP4 saat muxer default digunakan. 
 - Menghapus 
 
Versi 1.0.0-beta02
21 Juli 2022
androidx.media3:media3-*:1.0.0-beta02 dirilis.
Versi 1.0.0-beta02 berisi commit ini.
Rilis ini sesuai dengan rilis ExoPlayer 2.18.1.
- Library Core:
- Memastikan bahwa mengubah 
ShuffleOrderdenganExoPlayer.setShuffleOrderakan menghasilkan panggilan kePlayer.Listener#onTimelineChangeddenganreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889). - Untuk media progresif, hanya sertakan lagu yang dipilih dalam posisi buffering (#10361).
 - Mengizinkan logger kustom untuk semua output log ExoPlayer (#9752).
 - Memperbaiki implementasi 
setDataSourceFactorydiDefaultMediaSourceFactory, yang dalam kasus tertentu tidak berfungsi (#116). 
 - Memastikan bahwa mengubah 
 - Ekstraktor:
 - DASH:
- Menguraikan URL lisensi ClearKey dari manifes (#10246).
 
 - UI:
- Memastikan TalkBack mengumumkan opsi kecepatan yang saat ini aktif di menu kontrol pemutaran (#10298).
 
 - RTSP:
- Menambahkan penanganan paket terpisah-pisah VP8 (#110).
 
 - Ekstensi Leanback:
- Memproses perubahan 
playWhenReadydiLeanbackAdapter(10420). 
 - Memproses perubahan 
 - Cast:
 
Versi 1.0.0-beta01
16 Juni 2022
androidx.media3:media3-*:1.0.0-beta01 dirilis.
Versi 1.0.0-beta01 berisi commit ini.
Ini sama dengan rilis ExoPlayer 2.18.0.
- Library Core:
- Mengaktifkan dukungan untuk diagnostik platform Android melalui
MediaMetricsManager. ExoPlayer akan meneruskan peristiwa pemutaran dan data performa ke platform, yang membantu memberikan informasi performa dan proses debug sistem di perangkat. Data ini juga dapat dikumpulkan oleh Google jika berbagi data penggunaan dan diagnostik diaktifkan oleh pengguna perangkat. Aplikasi dapat memilih untuk tidak berkontribusi pada diagnostik platform untuk ExoPlayer denganExoPlayer.Builder.setUsePlatformDiagnostics(false). - Memperbaiki bug yang menyebabkan trek terlalu sering direset saat menggunakan 
MergingMediaSource, misalnya saat melakukan sideload subtitel dan mengubah subtitel yang dipilih di tengah pemutaran (#10248). - Menghentikan deteksi jenis jaringan 5G-NSA di API 29 dan 30. Pemutaran ini akan menggunakan jaringan 4G.
 - Tidak mengizinkan penerusan 
nullkeMediaSource.Factory.setDrmSessionManagerProviderdanMediaSource.Factory.setLoadErrorHandlingPolicy. InstanceDefaultDrmSessionManagerProviderdanDefaultLoadErrorHandlingPolicydapat diteruskan secara eksplisit jika diperlukan. - Menambahkan 
MediaItem.RequestMetadatauntuk merepresentasikan metadata yang diperlukan untuk memutar media saatLocalConfigurationyang tepat tidak diketahui. Juga menghapusMediaMetadata.mediaUrlkarena kini telah disertakan dalamRequestMetadata. - Menambahkan 
Player.Command.COMMAND_SET_MEDIA_ITEMagar pemutar dapat mengizinkan penyetelan satu item. 
 - Mengaktifkan dukungan untuk diagnostik platform Android melalui
 - Pemilihan trek:
- Menggabungkan class 
TrackSelectionOverrideske dalamTrackSelectionParameters, dan mempromosikanTrackSelectionOverrideke class level atas. - Mengganti nama 
TracksInfomenjadiTracksdanTracksInfo.TrackGroupInfomenjadiTracks.Group.Player.getCurrentTracksInfodanPlayer.Listener.onTracksInfoChangedjuga diganti namanya menjadiPlayer.getCurrentTracksdanPlayer.Listener.onTracksChanged. Ini termasuk 'un-deprecating' (membatalkan penghentian penggunaan) nama metodePlayer.Listener.onTracksChanged, tetapi dengan jenis parameter yang berbeda. - Mengubah 
DefaultTrackSelector.buildUponParametersdanDefaultTrackSelector.Parameters.buildUponuntuk menampilkanDefaultTrackSelector.Parameters.Builder, bukanDefaultTrackSelector.ParametersBuilderyang tidak digunakan lagi. - Menambahkan
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesyang diaktifkan secara default. Jika diaktifkan,DefaultTrackSelectorakan memilih trek audio yang jumlah salurannya tidak melebihi kemampuan output perangkat. Pada perangkat genggam,DefaultTrackSelectorakan lebih memilih stereo/mono dibandingkan format audio multisaluran, kecuali jika format multisaluran dapat Dispasialisasi (Android 12L+) atau berupa format suara surround Dolby. Selain itu, pada perangkat yang mendukung spasialisasi audio,DefaultTrackSelectorakan memantau perubahan di properti Spatializer dan memicu pemilihan trek baru berdasarkan perubahan tersebut. Perangkat dengan mode UItelevisiondikecualikan dari batasan ini dan format dengan jumlah saluran tertinggi akan diutamakan. Untuk mengaktifkan fitur ini, instanceDefaultTrackSelectorharus dibuat denganContext. 
 - Menggabungkan class 
 - Video:
- Mengganti nama 
DummySurfacemenjadiPlaceholderSurface. - Menambahkan dukungan AV1 ke 
MediaCodecVideoRenderer.getCodecMaxInputSize. 
 - Mengganti nama 
 - Audio:
- Menggunakan dekoder audio LG AC3 yang mengiklankan jenis MIME non-standar.
 - Mengubah jenis nilai yang ditampilkan 
AudioAttributes.getAudioAttributesV21()dariandroid.media.AudioAttributeske class wrapperAudioAttributesV21baru, untuk mencegah verifikasi ART yang lambat di API <21. - Melakukan kueri platform (API 29+) atau mengasumsikan jumlah saluran encoding audio untuk passthrough audio saat jumlah saluran audio format tidak ditetapkan, yang terjadi dengan persiapan tanpa potongan HLS (10204).
 - Mengonfigurasi 
AudioTrackdengan mask saluranAudioFormat.CHANNEL_OUT_7POINT1POINT4jika decoder menghasilkan 12 saluran audio PCM (#10322. 
 - DRM
- Memastikan sesi DRM selalu diperbarui dengan benar saat melakukan pencarian segera setelah perubahan format (10274).
 
 - Teks:
- Mengubah 
Player.getCurrentCues()agar menampilkanCueGroup, bukanList<Cue>. - SSA: Mendukung setelan gaya 
OutlineColoursaatBorderStyle == 3(yaituOutlineColourmenetapkan latar belakang tanda) (#8435). - CEA-708: Mengurai data menjadi beberapa blok layanan dan mengabaikan blok yang tidak terkait dengan nomor layanan yang saat ini dipilih.
 - Menghapus 
RawCcExtractor, yang hanya digunakan untuk menangani format subtitel internal Google. 
 - Mengubah 
 - Ekstraktor:
 - UI:
- Memperbaiki pengiriman peristiwa ke 
OnClickListeneryang ditetapkan padaPlayerViewjikauseController=false(#9605). Juga memperbaiki pengiriman peristiwa keOnLongClickListeneruntuk semua konfigurasi tampilan. - Memperbaiki salah perlakuan pada urutan peristiwa sentuh yang keluar dari batas
PlayerViewsebelumACTION_UPsebagai sebuah klik (#9861). - Memperbaiki masalah aksesibilitas 
PlayerViewsaat mengetuk dapat mengalihkan pemutaran, bukan menyembunyikan kontrol (#8627). - Menulis ulang 
TrackSelectionViewdanTrackSelectionDialogBuilderagar berfungsi dengan antarmukaPlayer, bukanExoPlayer. Dengan begitu, tampilan dapat digunakan dengan implementasiPlayerlainnya, dan menghapus dependensi dari modul UI ke modul ExoPlayer. Perubahan ini dapat menyebabkan gangguan. - Tidak menampilkan trek teks paksa dalam pemilih trek 
PlayerView, dan mempertahankan trek teks paksa yang sesuai tetap dipilih jika "None" (Tidak ada) dipilih (#9432). 
 - Memperbaiki pengiriman peristiwa ke 
 - DASH:
- Mengurai jumlah saluran dari elemen 
AudioChannelConfigurationDTS. Tindakan ini akan mengaktifkan kembali passthrough audio untuk streaming DTS (#10159). - Tidak mengizinkan penerusan 
nullkeDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. InstanceDefaultCompositeSequenceableLoaderFactorydapat diteruskan secara eksplisit jika diperlukan. 
 - Mengurai jumlah saluran dari elemen 
 - HLS:
- Kembali ke persiapan dengan potongan jika atribut CODECS playlist tidak berisi codec audio (#10065).
 - Tidak mengizinkan penerusan 
nullkeHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactory, danHlsMediaSource.Factory.setPlaylistTrackerFactory. InstanceDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactory, atau referensi keDefaultHlsPlaylistTracker.FACTORYdapat diteruskan secara eksplisit jika diperlukan. 
 - Streaming Lancar:
- Tidak mengizinkan penerusan 
nullkeSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. InstanceDefaultCompositeSequenceableLoaderFactorydapat diteruskan secara eksplisit jika diperlukan. 
 - Tidak mengizinkan penerusan 
 - RTSP:
- Menambahkan pembaca RTP untuk H263 (#63).
 - Menambahkan pembaca RTP untuk MPEG4 (#35).
 - Menambahkan pembaca RTP untuk HEVC (#36).
 - Menambahkan pembaca RTP untuk AMR. Saat ini hanya mendukung streaming AMR saluran mono yang tidak berselang-seling. Payload RTP AMR gabungan tidak didukung. (#46)
 - Menambahkan pembaca RTP untuk VP8 (#47).
 - Menambahkan pembaca RTP untuk WAV (#56).
 - Memperbaiki header otorisasi dasar RTSP. (#9544).
 - Menghentikan pemeriksaan kolom SDP wajib karena ExoPlayer tidak memerlukannya (#10049).
 - Menampilkan pengecualian yang dicentang saat menguraikan waktu RTSP (#10165).
 - Menambahkan pembaca RTP untuk VP9 (#47).
 - Menambahkan pembaca RTP untuk OPUS (#53).
 
 - Sumber data:
- Mengganti nama 
DummyDataSourcemenjadiPlaceholderDataSource. - Mengatasi penanganan gangguan OkHttp.
 
 - Mengganti nama 
 - Sesi:
- Mengganti 
MediaSession.MediaItemFillerdenganMediaSession.Callback.onAddMediaItemsuntuk memungkinkan penyelesaian permintaan asinkron. - Mendukung metode 
setMediaItems(s)saatMediaControllerterhubung ke sesi media lama. - Menghapus 
MediaController.setMediaUridanMediaSession.Callback.onSetMediaUri. Fungsi yang sama dapat dicapai dengan menggunakanMediaController.setMediaItemdanMediaSession.Callback.onAddMediaItems. - Meneruskan panggilan 
MediaControllerlama untuk memutar media keMediaSession.Callback.onAddMediaItems, bukanonSetMediaUri. - Menambahkan 
MediaNotification.ProviderdanDefaultMediaNotificationProvideruntuk memberikan penyesuaian notifikasi. - Menambahkan 
BitmapLoaderdanSimpleBitmapLoaderuntuk mendownload gambar karya seni. - Menambahkan 
MediaSession.setCustomLayout()untuk memberikan kompatibilitas mundur dengan sesi lama. - Menambahkan 
MediaSession.setSessionExtras()untuk memberikan kesamaan fitur dengan sesi lama. - Mengganti nama 
MediaSession.MediaSessionCallbackmenjadiMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackmenjadiMediaLibrarySession.Callback, danMediaSession.Builder.setSessionCallbackmenjadisetCallback. - Memperbaiki NPE di 
MediaControllerImplLegacy(#59). - Memperbarui info posisi sesi tentang perubahan linimasa (#51).
 - Memperbaiki NPE di 
MediaControllerImplBasesetelah merilis pengontrol (#74). 
 - Mengganti 
 - Pemutaran iklan/IMA:
- Menurunkan kecepatan polling iklan dari setiap 100 md menjadi setiap 200 md, untuk menyesuaikan dengan rekomendasi Media Rating Council (MRC).
 
 - Ekstensi FFmpeg:
- Mengupdate versi CMake ke 
3.21.0+untuk menghindari bug CMake yang menyebabkan sinkronisasi gradle AndroidStudio gagal (#9933). 
 - Mengupdate versi CMake ke 
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus 
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Sebagai gantinya, gunakanPlayer.Listener.onTracksChanged(Tracks). - Menghapus 
Player.getCurrentTrackGroupsdanPlayer.getCurrentTrackSelections. Sebagai gantinya, gunakanPlayer.getCurrentTracks. Anda juga dapat terus menggunakanExoPlayer.getCurrentTrackGroupsdanExoPlayer.getCurrentTrackSelections, meskipun metode ini tetap tidak digunakan lagi. - Menghapus konstanta
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTdanDEFAULT_TRACK_SELECTOR_PARAMETERSDownloadHelper. GunakangetDefaultTrackSelectorParameters(Context)jika memungkinkan, danDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTjika sebaliknya. - Menghapus konstruktor 
DefaultTrackSelector(ExoTrackSelection.Factory). Sebagai gantinya, gunakanDefaultTrackSelector(Context, ExoTrackSelection.Factory). - Menghapus 
Transformer.Builder.setContext. Sebagai gantinya,Contextharus diteruskan ke konstruktorTransformer.Builder. 
 - Menghapus 
 
Versi 1.0.0-alpha03
14 Maret 2022
androidx.media3:media3-*:1.0.0-alpha03 dirilis.
Versi 1.0.0-alpha03 berisi commit ini.
Ini sama dengan rilis ExoPlayer 2.17.1.
- Audio:
- Memperbaiki error saat memeriksa kemampuan audio untuk Dolby Atmos (E-AC3-JOC) di HLS.
 
 - Ekstraktor:
- FMP4: Memperbaiki masalah ketika metadata contoh emsg dapat dihasilkan dalam urutan yang salah untuk streaming yang berisi atom emsg v0 dan v1 (#9996).
 
 - Teks:
- Memperbaiki interaksi 
SingleSampleMediaSource.Factory.setTrackIddanMediaItem.SubtitleConfiguration.Builder.setIduntuk memprioritaskan kolomSubtitleConfigurationdan kembali ke nilaiFactoryjika belum ditetapkan (#10016). 
 - Memperbaiki interaksi 
 - Pemutaran iklan:
- Memperbaiki underrun audio di antara periode iklan dalam streaming SSAI HLS live.
 
 
Versi 1.0.0-alpha02
2 Maret 2022
androidx.media3:media3-*:1.0.0-alpha02 dirilis.
Versi 1.0.0-alpha02 berisi commit ini.
Ini sama dengan rilis ExoPlayer 2.17.0.
- Library Core:
- Menambahkan metode 
DefaultRenderersFactory.getCodecAdapterFactory()yang dilindungi sehingga subclassDefaultRenderersFactoryyang menggantibuildVideoRenderers()ataubuildAudioRenderers()dapat mengakses factory adaptor codec dan meneruskannya ke instanceMediaCodecRendereryang mereka buat. - Memperluas kolom header ICY 
namedangenremasing-masing keMediaMetadata.stationdanMediaMetadata.genreagar mencapai aplikasi melaluiPlayer.Listener.onMediaMetadataChanged()(#9677). - Menghapus kunci null dari 
DefaultHttpDataSource#getResponseHeaders. - Melakukan sleep dan mencoba lagi saat gagal membuat instance 
MediaCodec. Ini mengatasi masalah yang terjadi di beberapa perangkat saat beralih platform dari codec aman ke codec lain (#8696). - Menambahkan 
MediaCodecAdapter.getMetrics()untuk memungkinkan pengguna mendapatkan data metrik dariMediaCodec. (#9766). - Memperbaiki resolusi dependensi Maven (#8353).
 - Menonaktifkan penyesuaian kecepatan otomatis untuk live stream yang tidak memiliki fitur latensi rendah atau permintaan pengguna yang menyetel kecepatan (#9329).
 - Mengganti nama 
DecoderCounters#inputBufferCountmenjadiqueuedInputBufferCount. - Menjadikan 
SimpleExoPlayer.rendererspribadi. Perender dapat diakses melaluiExoPlayer.getRenderer. - Memperbarui beberapa nilai konstanta 
AnalyticsListener.EventFlagsagar cocok dengan nilai diPlayer.EventFlags. - Membagi 
AnalyticsCollectormenjadi antarmuka dan implementasi default untuk memungkinkannya dihilangkan oleh R8 jika aplikasi tidak memerlukannya. 
 - Menambahkan metode 
 - Pemilihan trek:
- Mendukung flag peran video pilihan dalam pemilihan trek (#9402).
 - Mengupdate logika pemilihan trek video untuk mempertimbangkan jenis MIME dan flag peran yang diinginkan saat memilih beberapa trek video untuk adaptasi (#9519).
 - Mengupdate logika pemilihan trek video dan audio agar hanya memilih format untuk pilihan adaptif yang memiliki tingkat dukungan dekoder dan hardware yang sama (#9565).
 - Mengupdate logika pemilihan trek video untuk memilih codec yang lebih efisien jika beberapa codec didukung oleh dekoder utama dengan akselerasi hardware (#4835).
 - Memilih preferensi konten audio (misalnya, trek audio "default" atau trek yang cocok dengan bahasa lokalitas sistem) daripada batasan pemilihan trek teknis (misalnya, jenis MIME yang disukai, atau jumlah channel maksimum).
 - Memperbaiki masalah pemilihan trek saat penggantian satu grup trek tidak menonaktifkan grup trek lain dengan jenis yang sama (#9675).
 - Memperbaiki masalah pemilihan trek saat campuran penggantian trek yang kosong dan tidak kosong tidak diterapkan dengan benar (#9649).
 - Melarang 
TrackGroupduplikat diTrackGroupArray.TrackGroupdapat selalu dibedakan dengan menetapkaniddalam konstruktorTrackGroup. Tindakan ini akan memperbaiki error saat melanjutkan pemutaran setelah memindahkan aplikasi ke latar belakang dengan penggantian trek aktif (#9718). - Mengubah logika di 
AdaptiveTrackSelectionuntuk memungkinkan peningkatan kualitas pada bandwidth jaringan yang memadai meskipun pemutaran sangat dekat dengan edge live (#9784). 
 - Video:
- Memperbaiki logika penggantian dekoder untuk Dolby Vision agar dapat menggunakan dekoder H264/H265 yang kompatibel jika diperlukan.
 
 - Audio:
- Memperbaiki logika penggantian dekoder untuk Dolby Atmos (E-AC3-JOC) agar dapat menggunakan dekoder E-AC3 yang kompatibel jika diperlukan.
 - Mengubah 
AudioCapabilitiesAPI untuk mewajibkan penerusanAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESsecara eksplisit, bukannull. - Mengizinkan penyesuaian penghitungan ukuran buffer 
AudioTrackdengan memasukkanAudioTrackBufferSizeProviderkeDefaultAudioSink. (#8891). - Mencoba lagi pembuatan 
AudioTrackjika ukuran buffer yang diminta > 1 MB. (#9712). 
 - Ekstraktor:
 - Teks:
- Menambahkan kolom 
MediaItem.SubtitleConfiguration.idyang diperluas ke kolomFormat.idpada trek subtitel yang dibuat dari konfigurasi (#9673). - Menambahkan dukungan dasar untuk subtitel WebVTT di penampung Matroska (#9886).
 - Mencegah 
Cea708Decodermembaca lebih dari ukuran blok layanan yang dideklarasikan. 
 - Menambahkan kolom 
 - DRM:
- Menghapus 
playbackLooperdariDrmSessionManager.(pre)acquireSession. SaatDrmSessionManagerdigunakan oleh aplikasi diMediaSourcekustom,playbackLooperharus diteruskan keDrmSessionManager.setPlayer. 
 - Menghapus 
 - Pemutaran iklan/IMA:
- Menambahkan dukungan untuk Penyisipan Iklan Dinamis (DAI) IMA (#8213).
 - Menambahkan metode ke 
AdPlaybackStateuntuk mengizinkan reset grup iklan agar dapat diputar lagi (#9615). - Menerapkan kecepatan pemutaran 1,0 selama pemutaran iklan (#9018).
 - Memperbaiki masalah saat grup iklan yang gagal dimuat menyebabkan reset pemutaran langsung (#9929).
 
 - UI:
 - DASH:
- Menambahkan properti penting dan tambahan yang diuraikan ke 
Representation(#9579). - Mendukung peran trek 
forced-subtitle(#9727). - Berhenti menafsirkan peran trek 
mainsebagaiC.SELECTION_FLAG_DEFAULT. - Memperbaiki logika pengecualian URL dasar untuk manifes yang tidak mendeklarasikan namespace DVB (#9856).
 - Mendukung URL 
MPD.Locationrelatif (#9939). 
 - Menambahkan properti penting dan tambahan yang diuraikan ke 
 - HLS:
- Mengisi 
Format.labeldengan benar untuk streaming HLS khusus audio (#9608). - Menggunakan persiapan tanpa potongan secara default untuk meningkatkan waktu mulai. Jika
tampilan Anda berisi trek teks tertutup yang digabungkan secara multipleks dan tidak dideklarasikan
di playlist utama, Anda harus menambahkannya ke playlist utama
agar dapat diputar, atau menonaktifkan persiapan tanpa potongan dengan
HlsMediaSource.Factory.setAllowChunklessPreparation(false). - Mendukung pencarian akurat frame utama di HLS (#2882).
 
 - Mengisi 
 - RTSP:
- Menyediakan API klien untuk mengganti 
SocketFactoryyang digunakan untuk semua koneksi server (#9606). - Memilih metode autentikasi DIGEST daripada BASIC jika keduanya ada (#9800).
 - Menangani saat pengaturan waktu trek RTSP tidak tersedia (#9775).
 - Mengabaikan nilai header RTP-Info yang tidak valid (#9619).
 
 - Menyediakan API klien untuk mengganti 
 - Transformator:
- Meningkatkan versi API minimum yang diperlukan ke versi 21.
 TransformationExceptionkini digunakan untuk mendeskripsikan error yang terjadi selama transformasi.- Menambahkan 
TransformationRequestuntuk menentukan opsi transformasi. - Mengizinkan beberapa pemroses untuk didaftarkan.
 - Memperbaiki Transformator yang macet saat output codec dibaca sebagian.
 - Memperbaiki NPE potensial di 
Transformer.getProgresssaat merilis muxer throw. - Menambahkan aplikasi demo untuk menerapkan transformasi.
 
 - Ekstensi MediaSession:
- Secara default, 
MediaSessionConnectorkini menghapus playlist saat berhenti. Aplikasi yang ingin mempertahankan playlist dapat memanggilsetClearMediaItemsOnStop(false)di konektor. 
 - Secara default, 
 - Ektensi transmisi:
 - Ekstensi FFmpeg:
- Membuat 
build_ffmpeg.shbergantung pada bin utils LLVM, bukan GNU (#9933). 
 - Membuat 
 - Kompatibilitas Android 12:
- Mengupgrade ekstensi Transmisi agar bergantung pada
com.google.android.gms:play-services-cast-framework:20.1.0. Versiplay-services-cast-frameworksebelumnya tidak kompatibel dengan aplikasi yang menargetkan Android 12, dan akan error denganIllegalArgumentExceptionsaat membuatPendingIntent(#9528). 
 - Mengupgrade ekstensi Transmisi agar bergantung pada
 - Menghapus simbol yang tidak digunakan lagi:
- Menghapus 
Player.EventListener. MenggunakanPlayer.Listenersebagai gantinya. - Menghapus 
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactory, danMediaSourceFactory#setDrmUserAgent. MenggunakanMediaSourceFactory#setDrmSessionManagerProvidersebagai gantinya. - Menghapus 
MediaSourceFactory#setStreamKeys. MenggunakanMediaItem.Builder#setStreamKeyssebagai gantinya. - Menghapus 
MediaSourceFactory#createMediaSource(Uri). MenggunakanMediaSourceFactory#createMediaSource(MediaItem)sebagai gantinya. - Menghapus 
setTagdariDashMediaSource,HlsMediaSourcedanSsMediaSource. MenggunakanMediaItem.Builder#setTagsebagai gantinya. - Menghapus 
DashMediaSource#setLivePresentationDelayMs(long, boolean). MenggunakanMediaItem.Builder#setLiveConfigurationdanMediaItem.LiveConfiguration.Builder#setTargetOffsetMsuntuk mengganti manifes, atauDashMediaSource#setFallbackTargetLiveOffsetMsuntuk memberikan nilai penggantian. - Menghapus 
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Anda tidak lagi dapat memilih untuk tidak menerapkan thread. - Menghapus 
ActionFiledanActionFileUpgradeUtil. Menggunakan ExoPlayer 2.16.1 atau sebelum menggunakanActionFileUpgradeUtiluntuk menggabungkan file tindakan lama keDefaultDownloadIndex. - Menghapus 
ProgressiveMediaSource#setExtractorsFactory. Menggunakan konstruktorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)sebagai gantinya. - Menghapus 
ProgressiveMediaSource.Factory#setTagdanProgressiveMediaSource.Factory#setCustomCacheKey. MenggunakanMediaItem.Builder#setTagdanMediaItem.Builder#setCustomCacheKeysebagai gantinya. - Menghapus konstruktor 
DefaultRenderersFactory(Context, @ExtensionRendererMode int)danDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Menggunakan konstruktorDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererMode, danDefaultRenderersFactory#setAllowedVideoJoiningTimeMssebagai gantinya. - Menghapus semua konstruktor 
CronetDataSourcepublik. Sebagai gantinya, gunakanCronetDataSource.Factory. 
 - Menghapus 
 - Mengubah 
IntDefsberikut menjadi@Target(TYPE_USE)saja. Hal ini dapat merusak kompilasi penggunaan di Kotlin, yang dapat diperbaiki dengan memindahkan anotasi ke anotasi jenis (Int).@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(dalam paketcom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(dalam paketcom.google.android.exoplayer2.extractor.flac)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
 
Versi 1.0.0-alpha01
27 Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01 dirilis.
Versi 1.0.0-alpha01 berisi commit berikut ini.
Fitur baru
Media3 adalah tempat baru untuk support library media, termasuk ExoPlayer. Alfa pertama berisi implementasi library awal yang fungsional untuk mengimplementasikan kasus penggunaan media, seperti:
- ExoPlayer, pemutar media tingkat aplikasi untuk Android yang mudah disesuaikan dan diperluas.
 - Fungsi sesi media, untuk mengekspos dan mengontrol pemutaran. Modul sesi
baru ini menggunakan antarmuka 
Playeryang sama seperti ExoPlayer. - Komponen UI untuk mem-build antarmuka pengguna pemutaran media.
 - Modul yang menggabungkan fungsi di library lain untuk digunakan dengan ExoPlayer, misalnya, penyisipan iklan melalui IMA SDK.
 
Untuk informasi selengkapnya, lihat project GitHub Media3.
ExoPlayer sebelumnya dihosting di
project GitHub ExoPlayer yang terpisah. Di Media3,
nama paketnya adalah androidx.media3.exoplayer. Kami berencana untuk terus mempertahankan dan
merilis project GitHub ExoPlayer untuk sementara waktu guna memberikan waktu bagi aplikasi untuk bermigrasi ke
Media3. Media3 memiliki pengganti untuk semua modul ExoPlayer, kecuali untuk
ekstensi media2 dan mediasession lama, yang diganti dengan
modul media3-session baru. Hal ini memberikan integrasi langsung antara pemutar dan
sesi media tanpa perlu menggunakan class adaptor/konektor.