Media3
| Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
|---|---|---|---|---|
| 26 Oktober 2026 | 1.11.1 | - | - | 1.12.0-alpha02 |
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.11.1" // 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 Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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.11.1" // 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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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.12.0
Versi 1.12.0-alpha02
26 Oktober 2026
Versi 1.12.0-alpha02 berisi commit berikut.
- Layanan Play Efek:
- Memperkenalkan modul
media3-effect-play-servicesbaru yang menyediakan efek media layanan Google Play, termasukEnhancementSessionDecoratoruntuk peningkatan kualitas video danStudioSoundAudioProcessoruntuk pemisahan sumber audio.
- Memperkenalkan modul
Versi 1.12.0-alpha01
21 Oktober 2022
Versi 1.12.0-alpha01 berisi commit berikut.
- Library Umum:
- Menambahkan
C.COLOR_SPACE_DISPLAY_P3dan mendukung ruang warna Display P3 dalam pemetaan warna ISOMediaFormatUtildanColorInfo. - Menambahkan registry
Flagspusat untuk mengelola tombol fitur eksperimental dan peluncuran bertahap (Flags.setCanaryModeEnabled). Memigrasikan banyak metode@ExperimentalApiyang ada untuk menggunakan API tombol baru. - Tambahkan
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categories, danMediaMetadata.Builder.setCategories(List<String>). - Ganti
androidx.media3.common.util.NonNullApidenganorg.jspecify.annotations.NullMarkedJSpecify.
- Menambahkan
- ExoPlayer:
- Memperbaiki masalah saat pemutaran multi-periode DASH macet saat bagian pertama periode berikutnya gagal dimuat (#3396).
- Laporkan
wasCanceled = truediAnalyticsListener.onLoadErrordanMediaSourceEventListener.onLoadErrorsaat percobaan ulang pemuatan habis. - Mendukung pendaftaran beberapa instance
VideoFrameMetadataListenermenggunakanExoPlayer.addVideoFrameMetadataListenerdanExoPlayer.removeVideoFrameMetadataListener, menghentikan penggunaanExoPlayer.setVideoFrameMetadataListenerdanExoPlayer.clearVideoFrameMetadataListener. - Tambahkan dukungan untuk iklan dalam konten multi-periode (misalnya, DASH) dengan memisahkan
dan mengimbangi
AdPlaybackStateuntuk setiap periode. - Memperbaiki kondisi race di
PreCacheHelper, yaitu pembatalan permintaan persiapan yang sedang berlangsung masih dapat memulai download di latar belakang. - Batasi
setLoadOnlySelectedTracks(true)diProgressiveMediaSourcedanDefaultMediaSourceFactoryagar hanya memfilter trek video dan gambar yang tidak dipilih. Trek audio dan teks selalu dimuat untuk memungkinkan peralihan trek yang lancar tanpa buffering ulang. - Aktifkan
setLoadOnlySelectedTracks(true)secara default diProgressiveMediaSourcedanDefaultMediaSourceFactory. Hal ini menghemat memori dan memungkinkan penghitungan alokasi bufferDefaultLoadControlberfungsi lebih akurat saat tidak semua trek dipilih. Perhatikan bahwa hal ini dapat menyebabkan buffering tambahan jika trek video atau gambar yang tidak dipilih baru diaktifkan di tengah pemutaran. - Memperbaiki masalah saat
Player.getCurrentPosition()dapat menampilkan nilai lama (hanya diupdate beberapa kali per detik) saat penjadwalan dinamis diaktifkan (#3286). - Memperbaiki masalah saat penurunan atau reset yang tidak terduga pada posisi
head pemutaran
AudioTrackdapat salah dianggap sebagai overflow bilangan bulat, sehingga menyebabkan pemutaran terhenti dalam buffering (#3407). - Hapus eksperimental
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - Menghindari pengaktifan ulang perender yang tidak perlu dan gangguan saat kembali dari interstisial atau iklan ke konten yang dipotong di akhir (#3371).
- Memperbaiki masalah saat error perender pada item playlist mendatang dapat
mengganggu pemutaran saat ini sebelum waktunya saat
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONdiaktifkan. - Memperbaiki
NullPointerExceptionyang dapat terjadi jikaExoPlayermentransisikan perender ke periode media yang tidak siap saatFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONdiaktifkan. - Memperbaiki masalah saat frame video dapat dilewati atau dihapus secara tidak terduga
selama penjadwalan dinamis saat
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSdiaktifkan. - Memperbaiki
ArrayIndexOutOfBoundsExceptiondi pemroses analisis saat menghentikan pemutaran selama iklan di livestream (#3423). - Memperbaiki masalah saat
PreloadMediaSourcedapat secara tidak terduga memposting peristiwa pramuat saatpreload()tidak pernah dipanggil (#3408). - Memperbaiki masalah saat
Format.subsampleOffsetUsdiabaikan untuk trek metadata, sehingga menyebabkan stempel waktu pemutaran yang salah dalam perintah penyambungan SCTE-35 yang didekode (#3413). - Memperbaiki kebocoran memori di
PreloadMediaSourcedanDefaultPreloadManagersaatpreload()dipanggil beberapa kali pada sumber yang sama (#3445). - Memperbaiki
NullPointerExceptionsaat merilisAdsMediaSourcesaat refresh linimasa konten tertunda (#3442). - Memperbaiki masalah saat pemutaran media progresif dapat melompat ke posisi yang salah saat pemuatan setelah pencarian (atau saat memulai pemutaran di posisi bukan nol) gagal dan dicoba lagi (#3440).
- Menambahkan solusi untuk decoder H.264 Xiaomi TV Stick 4K (MiTV-AYFR0) yang berhenti berfungsi saat perubahan resolusi yang lancar (#3457).
- Memperbaiki
NullPointerExceptiondiSteeringManifestTrackersaat pelacak dihentikan sebelum callback penyelesaian pemuatan atau error yang diposting dieksekusi (#3443). - Mendukung pemutaran metadata berjangka waktu HAGC (ST 2094-50) dari trek metadata dalam kotak
mebxdi file MP4. - Memperbaiki masalah saat periode media yang lambat disiapkan dalam playlist dapat dilewati.
- CompositionPlayer:
- Mendukung konfigurasi kecepatan frame agregasi frame video menggunakan
Composition.Builder.setVideoFrameAggregationParametersuntuk alur kerja pemutaran. - Memperbaiki penurunan frame dalam komposisi multi-urutan yang disebabkan oleh ketidakcocokan kuantisasi atau pembulatan stempel waktu, dengan memilih frame yang memiliki stempel waktu terdekat selama agregasi frame. Hal ini hanya diaktifkan dari API 29, karena memerlukan satu frame tambahan dalam penerbangan per urutan video.
- Mendukung konfigurasi kecepatan frame agregasi frame video menggunakan
- Transformator:
- Mendukung konfigurasi kecepatan frame agregasi frame video menggunakan
Composition.Builder.setVideoFrameAggregationParametersuntuk alur kerja ekspor. - Memperbaiki penurunan frame dalam komposisi multi-urutan yang disebabkan oleh ketidakcocokan kuantisasi atau pembulatan stempel waktu, dengan memilih frame yang memiliki stempel waktu terdekat selama agregasi frame. Hal ini hanya diaktifkan dari API 29, karena memerlukan satu frame tambahan dalam penerbangan per urutan video.
- Mematuhi
Transformer#setAudioMimeType(AUDIO_RAW)saatAudioProcessorsdigunakan. Sebelum perbaikan ini, memintaMimeTypes.AUDIO_RAWdan menerapkanAudioProcessorakan menghasilkan output yang dikompresi.
- Mendukung konfigurasi kecepatan frame agregasi frame video menggunakan
- Pemilihan Trek:
- Memperbaiki masalah saat trek SDR salah dipilih daripada trek Dolby Vision yang didukung di beberapa perangkat (#3135).
- Ekstraktor:
- Mp4Extractor: Memperbaiki penguraian kotak
dOpsuntuk Opus di MP4, tempatPreSkip,InputSampleRate, danOutputGaintidak dikonversi dari big-endian ke little-endian, sehingga audio sekitar 299 md pertama dihapus saat tidak ada daftar edit (#3431). - Hapus
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES, danFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265karena penguraian dependensi sampel dalam GOP untuk H.264 dan H.265 diaktifkan secara default. - Mp4Extractor: Memperbaiki penguraian metadata lokasi dari kotak
xyzyang berisi koordinat ketinggian untuk mengisiMp4LocationData. - Menambahkan
ExtractorUtil.getFramesPerEncodedSampleuntuk menghitung jumlah frame audio per sampel untuk format audio yang dienkode (#3367). - Menambahkan
FLAG_READ_XMP_METADATAkeMp4Extractoruntuk mengekstrak metadata XMP dari kotak UUID level teratas. - Memperbaiki audio AC-3, DTS, dan LPCM yang rusak saat memutar konten MPEG-PS
gaya DVD, dengan menghapus header sub-stream
private_stream_1dari setiap paket PES diPsExtractorsebelum payload diteruskan ke pembaca audio (#3327). - Memperbaiki kegagalan di
FragmentedMp4Extractorsaat kotaktfdtversi 1 mengenkodebaseMediaDecodeTimenegatif (#3412). - MPEG-TS: Mendukung penguraian pesan SEI pengaturan pengemasan frame H.264 dan H.265 untuk mengisi
Format.stereoMode(#3419). - Mengurai data konfigurasi Dolby Vision Profile 20 dan menolak profil Dolby Vision yang tidak didukung, bukan memutarnya sebagai HEVC standar dengan warna yang salah (#3427).
- MP3: Mengembalikan penyesuaian metadata padding & penundaan encoder LAME/Xing
karena tidak kompatibel dengan banyak dekoder MP3
MediaCodec(#3425). - Matroska: Memperbaiki
NullPointerExceptionsaat mengurai elemenChapterAtombertingkat (#3438). - Ogg: Memperbaiki bug saat paket yang ukurannya kelipatan 255 byte dan berakhir di batas halaman digabungkan dengan paket berikutnya.
- MP4: Mengurai trek metadata berjangka waktu dalam kotak
mebxdiMp4ExtractordanFragmentedMp4Extractor. Trek yang membawa kunciit35diekspos sebagaiMimeTypes.APPLICATION_ITUT_T35(mengaktifkan pemutaran HAGC). Trekmebxlainnya akan diabaikan kecuali jikaFLAG_EMIT_RAW_MEBX_DATAditetapkan, yang dalam hal ini semua trekmebxakan ditampilkan sebagaiMimeTypes.APPLICATION_MEBXmentah. - Ogg: Mendukung ekstraksi padding akhir Opus untuk pemutaran tanpa jeda (#2576), dan memperbaiki stempel waktu sampel setelah mencari halaman yang dimulai dengan paket lanjutan.
- Ogg: Memperbaiki error dekode dan lompatan stempel waktu ~1 dtk dalam streaming Ogg Opus berantai dengan mengabaikan paket header komentar dan ID Opus di tengah streaming.
- Mp4Extractor: Memperbaiki penguraian kotak
- Inspektur:
- Mendukung pengambilan metadata XMP dari file MP4 menggunakan
MetadataRetriever. - Mendukung ekstraksi trek metadata berjangka waktu dalam kotak
mebxdiMediaExtractorCompatsebagaiMimeTypes.APPLICATION_MEBX.
- Mendukung pengambilan metadata XMP dari file MP4 menggunakan
- Frame Inspector:
- Memperbaiki pemangkasan warna BT.2020 gamut lebar dalam gambar dasar SDR saat
mengekstrak frame Ultra HDR dengan
FrameExtractor. Warna di luar gamut kini dikompresi secara halus ke dalam gamut sRGB, bukan dipotong.
- Memperbaiki pemangkasan warna BT.2020 gamut lebar dalam gambar dasar SDR saat
mengekstrak frame Ultra HDR dengan
- Audio:
- Menambahkan solusi untuk perangkat yang memanggil
android.media.AudioDeviceCallbackdi thread yang salah (#3386). - Memperbaiki potensi pemutaran macet setelah transisi trek dengan offload terkompresi.
- Mengatasi masalah pada Amazon Fire TV stick saat audio AC-3 dapat terhenti selama transisi periode (#3448).
- Mendukung pemangkasan padding encoder akhir streaming untuk pemutaran tanpa jeda Ogg dan WebM/Matroska Opus (#2576).
- Memperbaiki update padding dan penundaan gapless offload dinamis selama transisi trek sehingga diterapkan ke trek yang masuk, bukan trek yang sedang diputar.
- Pangkas padding akhir encoder pada streaming tunggal dan streaming akhir dalam playlist, selain transisi tanpa jeda di tengah playlist (#2576).
- Menghindari salinan buffer audio yang tidak perlu di
TrimmingAudioProcessorsetelah pemangkasan penundaan encoder awal streaming selesai dan tidak ada padding akhir streaming yang perlu dipangkas.
- Menambahkan solusi untuk perangkat yang memanggil
- Video:
- Memperbaiki pelaporan frame video yang terlambat dengan stempel waktu rilis yang identik sehingga dilaporkan sebagai dihapus, bukan dilewati.
- Teks:
- Tambahkan
MediaItem.SubtitleConfiguration.timeOffsetUsuntuk menggeser stempel waktu subtitel yang di-sideload relatif terhadap media. Offset dapat diubah selama pemutaran denganPlayer.replaceMediaItem(int, MediaItem)tanpa mengganggu pemutaran (#1976). - SubRip: Menambahkan dukungan untuk memasukkan
CharsetDetectorke dalamDefaultSubtitleParserFactoryuntuk mendeteksi encoding karakter subtitel SubRip mandiri tanpa tanda urutan byte (#2247).
- Tambahkan
- Efek:
- Terapkan
SoundSeparationAudioProcessoruntuk pemisahan sumber audio menggunakan modul GMSCore StudioSound.
- Terapkan
- Muxer:
- Memperbaiki penulisan kotak
dOpsuntuk Opus diMp4MuxerdanFragmentedMp4MuxertempatPreSkip,InputSampleRate, danOutputGainditulis dalam little-endian, bukan big-endian (#3431). - Mendukung penulisan ketinggian GPS di
Mp4LocationDatamenggunakanMp4Muxer. - Tambahkan
Muxer.Factory.create(ParcelFileDescriptor)untuk mengizinkan muxing langsung keParcelFileDescriptor. - Tulis kotak
tfdt(Track Fragment Base Media Decode Time) secara default di kotaktraffile MP4 yang terfragmentasi untuk memberikan stempel waktu dekode media. - Mendukung penulisan kotak penampung
dec3E-AC-3 dan E-AC-3 JOC (Dolby Atmos) diMp4Muxer. - Menambahkan dukungan format WebM ke
MediaMuxerCompat. - Tulis kotak
mfra(Movie Fragment Random Access) di akhir file MP4 yang terfragmentasi untuk memungkinkan pencarian diFragmentedMp4ExtractormenggunakanFLAG_READ_MFRA_FOR_SEEK_MAP. - Memperbaiki error di
Mp4WriterdanFragmentedMp4Writersaat menulis sampel EOS sebelum sampel lainnya ditulis. - Memperbaiki kepatuhan container saat melakukan muxing konten Dolby ke file MP4 atau
MP4 Terfragmentasi dengan mengiklankan merek yang kompatibel dengan
dby1di header container (#3369). - Mendukung trek audio PCM float 32-bit di
Mp4MuxerdanFragmentedMp4Muxer(#3389). - Menolak profil Dolby Vision yang tidak didukung di
Mp4MuxerdanFragmentedMp4Muxersaat menambahkan trek. - Mendukung trek audio PCM bilangan bulat 24-bit dan 32-bit di
Mp4MuxerdanFragmentedMp4Muxer.
- Memperbaiki penulisan kotak
- Ekstensi IMA:
- Teruskan peristiwa jeda dan lanjutkan pemutar ke IMA SDK di
ImaServerSideAdInsertionMediaSource.
- Teruskan peristiwa jeda dan lanjutkan pemutar ke IMA SDK di
- Sesi:
- Tambahkan
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI, danMediaConstants.EXTRAS_KEY_CATEGORIESuntuk mengisi metadata playlist dan item dari metadata dan deskripsi lama, sertaMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEdanMediaConstants.EXTRAS_KEY_TTL_SECONDSuntuk saranLibraryParams.extras. - Memperbaiki error
SecurityExceptionsaat membuat atau merilisMediaSessiondi perangkat yang menerapkan batasPendingIntentyang ketat. - Memperbaiki masalah saat
MediaSession.getControllerForCurrentRequest()menampilkannullselama permintaan pemutaran di Android 12 (API 31 dan 32) saatMediaSessionServicebelum berada di latar depan. - Memperbaiki error
IllegalArgumentExceptionsaatMediaControllerterhubung ke sesi lama yang melaporkan volume maksimum negatif. - Memperbaiki masalah saat memanggil
MediaController.setMediaItematausetMediaItemsyang diikuti denganplay()padaMediaSessionCompatlama yang dijeda dapat mengirimkan callbackonPrepareFrom*yang tidak didukung, bukanonPlayFrom*, atau mengirimkanonPlay()tanpa melakukan inisialisasi ulang item media yang diminta. - Memperbaiki
NullPointerExceptiondiMediaBrowserlama saat menerima respons perintah kustom (#3432). - Memperbaiki error
IllegalArgumentExceptionsaat menerima metadata lama dengan kunci duplikat diBundleyang mendasarinya. - Menggabungkan panggilan
MediaControllerCompat.TransportControlskeluar yang dilakukan dalam iterasiLooperyang sama saat mengontrolMediaSessionCompatlama (misalnya, memanggilsetMediaItem,prepare, danplaybersama-sama kini mengirimkan satu callbackonPlayFrom*).
- Tambahkan
- UI:
- Memperbaiki posisi tanda baca subtitel RTL dan mempertahankan rentang span saat pengemasan teks dua arah diaktifkan (#3454, #3455).
- Tambahkan class
TrackSelectionStatedanTrackSelectionParametersStateserta fungsi remember status Composable yang sesuai ke modulmedia3-ui-compose. - Memperkenalkan
PresentationState.videoAspectRatiodan membuatModifier.resizeWithContentScalemengambilaspectRatio: Float?, bukansourceSizeDp: Size?. - Tambahkan class
CuesStatedan ComposablerememberCuesStateke modulmedia3-ui-composeuntuk memproses isyarat pemutar saat ini. - Tambahkan dukungan mode scrubbing ke
ProgressSliderjika didasarkan padaExoPlayeratauCompositionPlayer. - Menambahkan dukungan
showArtworkkePresentationStatedan menggunakannya untuk mengatur waktu rendering Composableartworkopsional yang disediakan diContentFramedanPlayer. Tambahkan ComposableArtworkuntuk digunakan sebagai nilai default untuk slotartwork. - Tambahkan kolom baru ke
PlayPauseButtonState(showBuffering,showRetry,showReplay) dan gunakan diPlayPauseButtonuntuk merender lebih banyak ikon dan indikator buffering. - Menambahkan class
PlaybackStateuntuk memungkinkan pengamatan status pemutaran kustom, dan memperkenalkanBufferingIndicatorsebagai komponen independen tombol. - Memperbaiki masalah saat
PlayerViewdanPlayerControlViewmenampilkan penanda iklan di batas periode untuk placeholder post-roll live di livestream multi-periode. - Slot composable
Player,ContentFrame,PlayerDefaults, danMiniControllertidak lagi menerima visibilitas pemutar atau kontrol sebagai parameter. Sebagai gantinya, ambil dari cakupan panggilan (misalnya,topControlssekarang menjadi@Composable BoxScope.() -> Unit). Ini adalah perubahan yang dapat menyebabkan gangguan pada API yang tidak stabil. - Tambahkan parameter
alignmentkeContentFrame,Player, danModifier.resizeWithContentScaleuntuk memosisikan konten yang diskalakan dalam penampungnya, dan pangkas kontenContentFrameke batasnya, sehingga video yang diskalakan denganContentScale.Croptidak lagi digambar di luar batasnya. - Menambahkan dukungan UI livestream ke
ProgressSlider,ProgressStateWithTickCount, danProgressStateWithTickIntervaldengan mengeksposisLivedanliveOffsetMs. Menambahkan ComposableLiveButtonkemedia3-ui-compose-material3(#2213).
- Ekstensi Ktor:
- Memperbaiki masalah saat
KtorDataSourcedapat memperlakukan kegagalan koneksi di tengah streaming sebagai akhir input, bukan menampilkanHttpDataSourceException(#3460).
- Memperbaiki masalah saat
- Ekstensi HLS:
- Mengurai
VIDEO-RANGE(PQdanHLG) diEXT-X-STREAM-INFdanEXT-X-I-FRAME-STREAM-INFmenjadiFormat.colorInfo(#3441). - Memperbaiki
NullPointerExceptionsaat mengurai segmen inisialisasiEXT-X-MAPMPEG-TS yang berisi sampel media PES (#3456). - Memperbaiki regresi saat
Format.iddanFormat.metadataadalahnulluntuk trek HLS yang terekspos (#3402). - Potong iklan daftar aset menjadi
X-PLAYOUT-LIMITdan lewati iklan yang sepenuhnya melewati batas, dan tetapkan offset melanjutkan konten secara default ke 0 jika interstisial menghilangkanX-RESUME-OFFSETdan durasinya tidak diketahui meskipunX-PLAYOUT-LIMITditetapkan. - Memperbaiki masalah saat penyelesaian interstisial
X-ASSET-LISTmenimpa kontribusi offset kelanjutan konten dari interstisial lain dalam grup iklan yang sama.
- Mengurai
- Ekstensi DASH:
- Mendukung penguraian peristiwa Penyisipan MPD Alternatif
(
urn:mpeg:dash:event:alternativeMPD:insert:2025) dan Penggantian (urn:mpeg:dash:event:alternativeMPD:replace:2025) diDashManifestParserdan mengeksposnya sebagai instanceAlternativeMpdEventdiPeriod.alternativeMpdEvents. Ini adalah perubahan yang dapat menyebabkan gangguan untuk aplikasi yang membuat subclassDashManifestParser:DashManifestParser.buildPeriodkini mengambil parameterList<AlternativeMpdEvent>tambahan dan overload sebelumnya telah dihapus. Aplikasi yang menggantiDashManifestParser.parseEventStream(XmlPullParser)harus menggantiDashManifestParser.parseEventStream(XmlPullParser, String), karena yang pertama tidak digunakan lagi dan akan dijadikan pribadi dalam rilis mendatang. - Menguraikan informasi warna CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficients, danVideoFullRangeFlag) dari deskriptorEssentialPropertydanSupplementalPropertyke dalamFormat.colorInfo(#3426). - Mendukung daftar nilai
@idyang dipisahkan spasi kosong dalam atribut@valuedeskripsi mode trik (http://dashif.org/guidelines/trickmode) (#3315). - Mendukung penguraian
<ProducerReferenceTime>diDashManifestParser, mengeksposnya diAdaptationSet.producerReferenceTimes, dan menggunakannya untuk mengisiTimeline.Window.presentationStartTimeMsdanTimeline.Window.windowStartTimeMsuntuk streaming VOD. - Menambahkan dukungan untuk Pengarahan Konten DASH (#1689).
- Memperbaiki
NullPointerExceptionyang dapat terjadi saat mengurai manifes DASH dengan atribut yang tidak ada dalam elemen<UTCTiming>(#3436).
- Mendukung penguraian peristiwa Penyisipan MPD Alternatif
(
- Ekstensi RTSP:
- Memperbaiki error
IllegalStateExceptionyang terjadi saat memproses respons jaringan yang tertunda setelah klien RTSP ditutup. - Memperbaiki masalah saat scrubbing cepat dapat memicu mekanisme penggantian protokol TCP secara tidak benar.
- Memperbaiki error
IllegalStateExceptionyang dapat terjadi saat memproses respons jaringan yang tertunda setelah klien RTSP mereset status selama pemilihan ulang trek, penghentian sesi, atau pengalihan URI. - Memperbaiki masalah saat pencarian lagi sebelum pemutaran dimulai ulang dapat menyebabkan
error
IllegalStateException. - Memperbaiki masalah saat melakukan pencarian mundur saat pencarian sudah tertunda dapat menyebabkan audio terputus dan pemutaran video terhenti.
- Memperbaiki masalah saat unit akses keyframe H.264 dan H.265 yang diakhiri dengan paket agregasi atau non-IDR tidak ditandai sebagai keyframe, sehingga pemutaran tetap macet dalam buffering (#3434).
- Memperbaiki error
- Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Ekstensi Opus: Memperbaiki error JNI saat mendekode data Opus yang tidak valid.
- Ekstensi Opus: Memperbaiki padding penghapusan yang diabaikan saat pra-lewati dan padding penghapusan berada pada paket yang sama (#2576).
- Ektensi Cast:
- Memperkenalkan
SessionAvailabilityListener.SessionUnavailableReasonuntuk mewakili alasan ketidaktersediaan sesi, dan menyediakan metode overload untukSessionAvailabilityListener.onCastSessionUnavailableguna mengeksposnya. - Memperbaiki masalah saat pemutaran dilanjutkan secara lokal secara tidak terduga setelah menghentikan sesi Transmisi.
- Mencatat error ke dalam log saat operasi
RemoteMediaClient(seperti putar, jeda, perubahan kecepatan, mode ulang, volume, bisukan, atau pemilihan trek) gagal diRemoteCastPlayer(#3373). - Memperbaiki
ArrayIndexOutOfBoundsExceptiondiRemoteCastPlayersaat antrean penerima Cast berubah atau menyusut saat operasi pencarian tertunda (#3372). - Memperbaiki masalah pada penerima Cast default saat linimasa hanya mengisi item media yang langsung mengelilingi item aktif, bukan seluruh playlist (#3129).
- Segera perbarui linimasa dan posisi pemutaran saat mengubah
playlist (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) atau melakukan pencarian diRemoteCastPlayer, dan mengantrekan operasi playlist berturut-turut sehingga dijalankan dengan andal secara berurutan (#2639, #3272). - Memperbaiki masalah saat memanggil
addMediaItemspada antrean kosong diRemoteCastPlayergagal memuat item media di penerima Cast (#2402). - Memperbaiki masalah di
RemoteCastPlayersaat mencapai akhir antrean penerima Cast menghapus linimasa, bukan mempertahankan playlist. - Memperbaiki masalah saat
playWhenReady,repeatMode, danplaybackParameterstidak ditransfer atau diterapkan saat ditetapkan diRemoteCastPlayersebelum memuat item media (misalnya, selama transfer pemutaran lokal ke jarak jauh diCastPlayer) (#889).
- Memperkenalkan
- Aplikasi demo:
- Menambahkan dukungan untuk item media yang dilindungi DRM dan streaming sampel HLS tambahan ke katalog aplikasi demo sesi.
- Konfigurasikan
RemoteCastPlayerdenganCastTrackSelectordi aplikasi demo sesi untuk mengaktifkan pemilihan subtitel dan trek audio saat melakukan transmisi.
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus
DashUtil.buildDataSpec(Representation, RangedUri, int)danDashUtil.buildDataSpec(Representation, String, RangedUri, int). Sebagai gantinya, gunakanDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Menghapus
- Build:
- Tingkatkan
minSdkGradle menjadi 24.
- Tingkatkan
Versi 1.11.0
1.11.1
10 September 2026
- ExoPlayer:
- Pindahkan flag untuk mengaktifkan/menonaktifkan metadata HAGC untuk media progresif dari
MediaSource.FactorykeExtractorsFactory. MetodesetExperimentalEnableHagcPlaybacksebelumnya dihapus dan diganti denganExtractorsFactory.setParseHagcMetadata. Tindakan ini juga menyelesaikan masalah saat penonaktifan tidak berfungsi untuk penampung Matroska/WebM. - Memperbaiki penghentian pemutaran yang disebabkan saat melakukan pra-pemanasan perender sekunder yang tidak bertransisi.
- Memperbaiki masalah pra-pemanasan saat
Surfaceharus ditampilkan ke perender utama saat pencarian mereset dan menonaktifkan kedua perender. - Memperbaiki
ArrayIndexOutOfBoundsExceptionsaat pemuatan ulang linimasa live memindahkan posisi default melewati iklan yang disisipkan sisi server yang saat ini sedang diputar (#3348). - Memperbaiki masalah mode scrubbing yang menyebabkan frame video usang ditampilkan sebentar saat melakukan pencarian dengan
ScrubbingModeParameters.allowSkippingMediaCodecFlushdiaktifkan.
- Pindahkan flag untuk mengaktifkan/menonaktifkan metadata HAGC untuk media progresif dari
- Ekstraktor:
- Matroska: Memperbaiki masalah saat Trek yang ditempatkan setelah cluster tidak menghasilkan linimasa yang dapat di-seek (#3377).
- Audio:
- Memperbaiki penghitungan ukuran buffer di
SilenceSkippingAudioProcessorsehingga durasi senyap minimum tidak salah diperkecil skala oleh ukuran frame (#3271). - Memperbaiki penanganan PCM 8-bit di
PcmAudioUtiluntuk memperlakukan sampel sebagai unsigned seperti yang ditentukan oleh Android (#3271). - Memperbaiki masalah offload saat pemutaran dapat terhenti selama transisi pre-roll atau gapless karena ukuran buffer hardware yang terbatas.
- Memperbaiki bug di
DefaultAudioSinkyang menyebabkan jumlah rilis tidak berkurang saat thread pemutaran tidak lagi aktif (#3338).
- Memperbaiki penghitungan ukuran buffer di
- Sesi:
- Ekstensi HLS:
- Ekstensi DASH:
- Memperbaiki penghitungan stempel waktu sampel yang salah untuk trek gambar dengan
presentationTimeOffset(#3334).
- Memperbaiki penghitungan stempel waktu sampel yang salah untuk trek gambar dengan
- Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Opus: Memperbaiki kerusakan memori saat beberapa instance
OpusDecoderdiinisialisasi secara serentak. - MPEG-H: Memperbaiki kebocoran memori, pemotongan karakter non-ASCII, dan
potensi error native dalam kondisi memori rendah saat mengirim perintah
ke
MpeghUiManager(#3365).
- Opus: Memperbaiki kerusakan memori saat beberapa instance
Versi 1.11.0
05 Agustus 2026
- Library umum:
- Menambahkan
Format.channelMaskuntuk secara eksplisit merepresentasikan mask saluran audio, dan overloadUtil.getAudioTrackChannelConfig(Format)baru untuk menyelesaikannya dengan aman. - Mengupgrade Kotlin dari 2.0.20 ke 2.2.0.
- Menambahkan
- ExoPlayer:
- Memperbaiki bug serentak yang bergantung pada waktu yang dapat menyebabkan
IllegalStateExceptionatauIndexOutOfBoundsExceptiondi ExoPlayer. - Melonggarkan pemeriksaan jumlah grup iklan di
AdsMediaSourceuntuk memungkinkan jumlah grup iklan berkurang saat grup iklan diproses sepenuhnya (hasUnplayedAds()adalahfalse), sehingga mengakomodasi pengubahan ukuran grup iklan dinamis selama alur kerja reset. - Tambahkan
getFlags()danFLAG_STRICT_DURATIONkeSampleStreamuntuk memungkinkan aliran data melaporkan flag, dan mengupdate perender untuk memeriksa flag ini secara dinamis. - Menggunakan estimator kecepatan frame di
MediaCodecVideoRendererdan format output codec diMediaCodecAudioRendereruntuk menghitung kecepatan operasi codec saat format streaming tidak memberikan nilai yang valid, dan menghindari reset codec yang tidak perlu. - Menghapus kliping konten untuk iklan yang disisipkan di sisi klien di pemutar
inti. Sebagai gantinya,
AdsMediaSourceakan menangani logika pemangkasan. Sumber iklan kustom yang disisipkan di sisi klien perlu diperbarui untuk menerapkan kliping konten secara internal. - Tandai trek dengan profil atau level codec yang terbentuk dengan baik, tetapi tidak dikenali
sebagai
supported=NO_EXCEEDS_CAPABILITIES, bukansupported=YES(yang merupakan cara trek dengan info profil atau level yang tidak ada atau salah format ditandai). Hal ini memastikan trek ini (yang kemungkinan tidak didukung oleh perangkat) tidak dipilih jika ada alternatif yang lebih didukung. - Tambahkan
DefaultPreloadManager.SimpleRankingDataComparator, yang merupakanRankingDataComparatoryang membandingkan peringkat item media berdasarkan jaraknya dengan indeks item media yang sedang diputar. Aplikasi dapat mengganti metodecompare(Integer, Integer)-nya jika diperlukan logika perbandingan yang lebih disesuaikan.SimpleRankingDataComparatorkustom dapat diinjeksikan melalui konstruktor baruDefaultPreloadManager.Builder. - Mengurangi risiko OOM
DefaultLoadControl.prioritizeTimeOverSizeThresholdsdengan beralih ke batas ukuran byte buffer jika memori heap yang tersedia tampak terbatas. - Menyelaraskan penanganan gambar diam saat
MediaItem.imageDurationUstidak ditetapkan: Gambar diam JPEG dan HEIC kini 'diputar' dengan durasi default yang sangat singkat (sama seperti perilaku PNG dan gambar lainnya sebelumnya). - Tambahkan
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)untuk menghubungkanBandwidthMeterkeMediaSource. Metode yang tidak digunakan lagi dengan penerapan kustom akan tetap dipanggil secara default, tetapi sebaiknya terapkan metode baru dan gunakanBandwidthMeter.getTransferListener()untuk mendapatkan paritas dengan metode lama. - Di
DefaultBandwidthMeter, tambahkan dukungan untukInitialBitrateSupplierkustom. Hal ini memungkinkan aplikasi menyediakan logikanya sendiri untuk menentukan estimasi kecepatan bit awal, yang akan digunakan saat pembuatanDefaultBandwidthMeterdan saat perubahan jenis jaringan. Pemasok dapat ditetapkan melaluiDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Aktifkan penjadwalan dinamis secara default. Loop kerja pemutaran
ExoPlayerakan berjalan secara dinamis, bukan pada interval statis. - Menghapus reset yang tidak perlu yang dapat terjadi saat menggabungkan trek dengan sampel pre-roll ke pemutaran aktif.
- Di
DefaultBandwidthMeter, optimalkangetInitialBitrateCountryGroupAssignmentuntuk menampilkan penetapan grup negara yang dikemas ke dalam bilangan bulat 32-bit, bukan array, sehingga mengurangi ukuran kode dan menghindari alokasi. - Memperbaiki kegagalan inisialisasi
AudioTrackdi beberapa perangkat dengan memastikan logika percobaan ulang selalu mencoba ukuran buffer minimum 1 detik jika percobaan ulang lainnya (dengan mengurangi separuh ukuran buffer) tidak berhasil (#3207). - Memperbaiki masalah codec di beberapa perangkat yang menyebabkan codec menelan semua sampel jika sebelumnya di-flush sebelum menerima buffering input.
- Menambahkan
ExoPlayer.Builder.enablePerStreamMediaProgression()eksperimental untuk memungkinkan pemrosesan media lanjutan per streaming. Hal ini mengurangi latensi startup antara item playlist dan mencegah pemutaran menjadi "macet" dengan konten yang sangat singkat (#3122). - Memperbaiki kondisi race terkait penggunaan ID sesi audio, yaitu ID sesi audio awal yang dibuat otomatis oleh
ExoPlayerakan digunakan, bukan nilai yang ditetapkan olehsetAudioSessionId(#3241). - Menambahkan dukungan pemutaran metadata berjangka waktu HAGC (ST 2094-50) eksperimental untuk
media progresif (misalnya, MP4, Matroska). Pemutar akan otomatis menggabungkan
trek metadata HAGC dengan trek video terkait dan mengirimkan
metadata out-of-band ke dekoder di perangkat API 37+. Perilaku ini
dapat dinonaktifkan melalui
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Menambahkan
Format.selectionPriorityyang mewakili preferensi relatifFormatdalam pemilihan trek (#3236). - Memperbaiki potensi masalah mode scrubbing, yaitu scrubbing dapat terhenti saat mencari 'akhir streaming'.
- Memperbaiki bug serentak yang bergantung pada waktu yang dapat menyebabkan
- CompositionPlayer:
- Memperbaiki masalah saat instance
TrackSelectortidak dirilis.
- Memperbaiki masalah saat instance
- Transformator:
- Memperbaiki masalah yang menyebabkan
ExportResult.fileSizeBytesdilaporkan secara berlebihan.
- Memperbaiki masalah yang menyebabkan
- Pemilihan trek:
- Mengekspos
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORdan menambahkanAdaptiveTrackSelection.Factory.setTrackFormatComparatoruntuk memungkinkan pengurutan format kustom dan prioritas pemilihan ABR di luar pengurutan khusus kecepatan bit. - Memperbaiki masalah serentak yang bergantung pada waktu, yaitu update berurutan yang cepat pada parameter pemilihan trek dapat menyebabkan beberapa update hilang atau ditimpa.
- Mengekspos
- Ekstraktor:
- MP4, MP3, dan FLAC: Menambahkan
FLAG_DISABLE_ARTWORK_METADATAuntuk memungkinkan penghapusan gambar terlampir dan metadata gambar sampul selama penguraian penampung untuk mengurangi konsumsi memori runtime (#2077). Hal ini juga dapat diaktifkan secara terpusat melaluiDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: Menambahkan dukungan untuk mengekstrak trek metadata berjangka waktu ITU-T T.35 (
it35). - MP4: Menambahkan dukungan untuk mengekstrak metadata bab (format Nero dan QuickTime). Segmen QuickTime lebih disarankan jika keduanya ada. Informasi bab yang diekstrak ditampilkan sebagai entri
ChapterdalamMetadatatrek, sehingga memungkinkan navigasi bab native dalam file MP4, M4A, dan M4B (seperti buku audio dan podcast) (#2803). - WAV, Matroska, dan MP4: Menambahkan dukungan untuk audio PCM floating point 64-bit (#3090).
- Matroska: Menggunakan metadata bitstream codec untuk mengisi
ColorInfoyang akurat. - MP4: Menambahkan dukungan untuk pencarian dalam file MP4 yang terfragmentasi menggunakan kotak
mfrasaat kotaksidxtidak ada. Untuk mengaktifkannya, berikanFLAG_READ_MFRA_FOR_SEEK_MAPkeFragmentedMp4Extractor, yang kini dilakukan secara default diDefaultExtractorsFactory(#3088). - Mengabaikan data
av1Cdengan versi yang tidak didukung. - MP4: Menambahkan dukungan untuk PCM floating point big-endian dalam kotak
fpcm. - Matroska: Mengurai info bab ke entri
ChapterdiMetadatatrek. - MPEG-TS: Meningkatkan ekstraksi streaming DTS-HD dan DTS Express dengan menggabungkan Substream Core dan Ekstensi menjadi satu sampel, memperbaiki masalah pemutaran saat keduanya sebelumnya dihasilkan sebagai sampel terpisah (#3147).
- MP4: Mencegah loop tanpa batas dan pembacaan di luar batas saat mengurai item tag metadata
ilstkosong (#3191). - MPEG-TS: Memastikan frame terakhir dirender untuk streaming yang paket PES terakhirnya memiliki panjang yang diketahui (#3206).
- MP3: Memperbaiki pelaporan kecepatan bit untuk file dengan header Xing dan VBRI.
- Matroska: Menangani trek yang ditentukan di cluster terakhir (#3250).
- Matroska: Menambahkan dukungan untuk ALAC (#3268).
- MP4: Mengizinkan kotak
sgpddengan panjang variabel dalam file MP4 yang terfragmentasi (#3243). - AVI: Memperbaiki masalah saat memutar file tanpa tanda keyframe di trek audio
menyebabkan hilangnya audio dan
OutOfMemoryError. - MP3: Menggunakan durasi yang mendukung gapless dari header Xing/Info (#3183).
- MP3: Menyesuaikan penundaan encoder LAME/Xing dan metadata padding agar sesuai dengan pemangkasan PCM yang didekode (#3200).
- MP4, MP3, dan FLAC: Menambahkan
- Audio:
- Menambahkan masa tenggang 100 md di perender audio ExoPlayer saat beralih dari status siap ke tidak siap, untuk mendebounce underrun sementara dan menghindari status buffering yang tidak terduga selama pemutaran aktif (#3210).
- Mengubah logika ukuran buffer PCM default di
DefaultAudioTrackBufferSizeProvideruntuk menggunakan buffer 500 md tetap agar tidak terlalu bergantung pada perangkat. - Perbarui
MediaCodecAudioRendereruntuk mengekstrak channelMask spasial dari dekoder platform, sehinggaDefaultAudioSinkdapat menggunakan mask eksplisit ini, bukan menyimpulkannya dari jumlah saluran. - Konversi parameter
AudioSink.configureke class data. Penggantian kustomForwardingAudioSink.configureharus dimigrasikan ke tanda tangan metode baru. - Menambahkan dukungan untuk mempertahankan nada saat melakukan time-stretching pada streaming audio
dengan
EditedMediaItem.Builder#setSpeed(SpeedParameters). - Meningkatkan
ToFloatPcmAudioProcessoruntuk mendukung konversi PCM 8-bit, PCM big-endian 16-bit, dan PCM floating point 64-bit ke PCM floating point 32-bit (#3090). - Ubah nilai yang ditampilkan
DecoderAudioRenderer.getChannelMappingmenjadiImmutableIntArray. - Memperbaiki bug yang menyebabkan pemutaran macet saat memutar playlist audio tanpa jeda dalam mode offload terkompresi.
- Meneruskan
Timelinedan UID periode keAudioSink.configuredanAudioProcessor.StreamMetadatauntuk memberikan konteks playlist ke pemroses audio (#418). - Menetapkan
AudioProcessor.StreamMetadata.positionOffsetUsyang benar untuk memungkinkan pemrosesan audio berbasis waktu (#418). - Menambahkan dukungan untuk PCM floating point 32-bit dan 64-bit big endian.
- Menghapus jalur penggantian EAC3-JOC ke EAC3 untuk pemutaran di perangkat Google Pixel karena dekoder EAC3 standarnya tidak dapat mendekode streaming EAC3-JOC (#3257).
- Video:
- Memperbaiki logika penggabungan video untuk menghitung buffering yang dihapus selama penggabungan sebagai dilewati, bukan dihapus.
- Memperbaiki keputusan rendering langsung saat menyetel platform baru untuk menghindari penurunan frame pada perangkat yang tidak mendukung platform placeholder.
- Memperbaiki estimasi kecepatan frame di
MediaCodecVideoRendereragar lebih akurat dengan memperhitungkan frame yang dilewati atau dihapus. - Mengizinkan konfigurasi nilai minimum yang digunakan untuk menjadwalkan frame lebih awal. Nilai
defaultnya adalah 50 md, tetapi Anda dapat menyesuaikan nilai tersebut melalui
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - Memperbaiki bug di
VideoFrameReleaseHelperyang menyebabkan perubahan tampilan dapat memicu callbackChoreographeryang redundan dan pengaktifan CPU yang berlebihan di thread utama.
- Teks:
- Metadata:
- Tambahkan kolom
MediaMetadata.discSubtitledan uraikan dari data ID3v2.4TSSTdan VorbisDISCSUBTITLE. - Mengurai nomor & jumlah disk dari frame
TPOSID3.
- Tambahkan kolom
- Efek:
- Hapus status gambar ulang di
FinalShaderProgramWrappersaat melakukan flush untuk mencegah pemutar berhenti berfungsi saat melakukan pencarian.
- Hapus status gambar ulang di
- Muxer:
- Menambahkan dukungan untuk referensi trek (kotak
tref) diMp4Muxermelalui APIaddTrackReferencebaru. Hal ini memungkinkan pembuatan hubungan antar-trek, seperti menautkan trek metadata ke trek video yang dijelaskannya. - Tambahkan
OggMuxeruntuk mengizinkan muxing streaming mediaOPUSatauVORBISke dalam format fileogg. - Tambahkan
WavMuxeruntuk pembuatan file WAV (mendukung PCM bilangan bulat dan floating point). - Tambahkan
setAttemptStreamableOutputEnabledkeInAppMp4Muxer.Factoryuntuk memungkinkan penulisan file yang lebih kecil dan tidak dapat di-streaming tanpa ruang yang dicadangkan. - Menambahkan dukungan untuk audio IAMF di
Mp4MuxerdanFragmentedMp4Muxer.
- Menambahkan dukungan untuk referensi trek (kotak
- Ekstensi IMA:
- Tambahkan
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotuntuk mengizinkan penyediaan slot iklan yang akan digunakan untuk iklan saat jeda. - Memperbaiki bug saat iklan VAST yang dapat dilewati secara berturut-turut langsung menampilkan tombol lewati pada iklan kedua (#3165).
- Tambahkan
- Sesi:
- Memperbaiki potensi deadlock dan error
IllegalStateExceptiondi dalamMediaNotificationManagersaat menggunakan sesi dengan looper pemutar thread latar belakang. - Menerapkan persyaratan threading yang lebih ketat untuk metode
MediaSession. Metode void kini otomatis memposting eksekusi ke thread looper aplikasi, dan pengakses status (pengambil) secara eksplisit menampilkanIllegalStateExceptionjika dipanggil dari thread selain looper aplikasi. - Memperbaiki error penggabungan linimasa di luar batas (
IllegalStateExceptiondiMediaUtils.mergePlayerInfo) dengan melacak konsistensi status per pengontrol di sisi sesi. - Tambahkan
androidx.media3.session.MediaSessionManageruntuk memberikan dukungan untuk membuat kueri sesi media aktif dan menampilkan instanceSessionTokenMedia3. - Mengubah perilaku default
MediaSession.Callback.onConnectjika metode tidak diganti untuk hanya memberikan akses baca ke pengontrol yang tidak tepercaya. - Menambahkan dukungan untuk mengganti nama paket saat membuat
MediaSessionmelalui API baruMediaSession.Builder#setPackageNameOverride. Pemanggil harus memiliki izinandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERuntuk mengganti nama paket sesi. - Menambahkan
MediaSession.Callback.onConnectAsync(). Metode baru ini memungkinkan pemrosesan upaya koneksi pengontrol secara asinkron. Aplikasi dapat segera menampilkanFuturedenganFutures.immediateFuture(ConnectionResult)untuk mencapai perilaku sebelumnya. Sebaiknya lakukan migrasi ke metode baru karenaCallback.onConnectadalah kandidat yang tidak digunakan lagi. - Memperbaiki masalah saat penjelajahan AVRCP Bluetooth tidak mengenali
MediaLibraryServicedi API 36 dan 37. - Memperbaiki penurunan skala ganda pada poster di
MediaSessionsaat ukuran gambar mendekati batas platform, sehingga mengatasi keburaman dalam notifikasi (#3134). - Memperbaiki error
ForegroundServiceStartNotAllowedExceptiondiMediaNotificationManagersaat callback pemuatan bitmap poster asinkron mencoba memulai layanan latar depan saat aplikasi berada di latar belakang (#3270). - Memperbaiki masalah saat objek
PositionInfoyang diterima olehMediaControllertidak memiliki UIDTimelineaslinya. Sesi ini sekarang menerjemahkan dan menyebarkan UID ini dengan andal selama update status. - Memperbaiki error dengan menangkap
ForegroundServiceStartNotAllowedExceptiondiMediaSessionService.stopSelfSafely()(#3310). - Memperbaiki callback
onMediaItemTransition()yang tidak terduga diMediaControllersaat melakukan pencarian di dalam item media yang sama (#3248).
- Memperbaiki potensi deadlock dan error
- UI:
- Memperbaiki rendering frame pertama pada ukuran yang salah saat
ContentFramedirekomposisi di tengah pemutaran (#3238). - Tambahkan class
CurrentMediaItemStatedan ComposablerememberCurrentMediaItemStateyang sesuai ke modulmedia3-ui-compose. Holder status ini digunakan didemo-composeuntuk menampilkan berbagai informasi metadata tentangMediaItemyang sedang diputar. - Tambahkan class
PlaylistStatedan ComposablerememberPlaylistStateyang sesuai ke modulmedia3-ui-compose. Holder status ini digunakan didemo-composeuntuk menampilkan berbagai informasi metadata tentangMediaItemsyang ditetapkan di Pemutar. - Menambahkan API percepat/gerak lambat ke
PlaybackSpeedState. Gunakan fungsi ini didemo-composeuntuk menampilkan fitur percepat dengan menekan lama. - Tambahkan composable
MiniControllerke modulmedia3-ui-compose-material3. Fitur ini memberikan affordance yang ringkas untuk mengontrolPlayersekaligus menampilkan judul, artis, poster, dan progres item media saat ini. - Tambahkan class
ErrorStatedan ComposablerememberErrorStateyang sesuai ke modulmedia3-ui-compose. Tambahkan composableErrorTextkemedia3-ui-compose-material3dan jadikan sebagai overlay default diPlayer. - Publikasikan objek
PlayerDefaultsdengan composable untukTopControls,CenterControls,BottomControls, danErrorOverlay. - Menambahkan
FocusRequesterke ComposablePlayerdan slot kontennya. - Publikasikan
PlayerPool(common-ktx) danrememberPooledPlayer(ui-compose) untuk mendukung pramuatMediaItemsdi lingkungan UI jendela geser. Tampilkan fungsi ini didemo-composedenganShortFormPlayerScreenbaru. - Memperbaiki bug penekanan shutter di
PlayerViewdan ComposePresentationStateyang menyebabkan error pada linimasa yang tidak mendukung pencarian UID periode (#3264).
- Memperbaiki rendering frame pertama pada ukuran yang salah saat
- Download:
- Menyelesaikan variabel HLS di playlist media saat diambil untuk didownload (#3258).
- Ekstensi Ktor:
- Ekstensi HLS:
- Menambahkan dukungan untuk Pengarahan Konten HLS dan Cloning Jalur (#1689).
- Menambahkan
setWithAssetListResetkeHlsInterstitialsAdsLoaderagar aplikasi dapat mereset interstisial daftar aset yang telah diproses sepenuhnya kembali ke status tidak tersedia untuk resolusi ulang on-demand. - Mengurai atribut
SCOREdariEXT-X-STREAM-INFdanEXT-X-I-FRAME-STREAM-INF, lalu mengisinya keFormat.selectionPriority(#3236). - Memperbaiki bug saat pemuatan ulang playlist HLS terjadwal terus berlanjut meskipun playlist tidak lagi menjadi yang utama atau aktif (#3254).
- Memperbaiki penghitungan offset melanjutkan konten saat me-resolve daftar aset interstisial (#3322).
- Memperbaiki diskontinuitas stempel waktu trek audio yang tidak terduga saat melanjutkan pemutaran live latensi rendah setelah kegagalan permintaan playlist (#3311).
- Memperbaiki bug di
HlsMediaPeriod.getStreamKeys()yang menyebabkan trek ID3 dalam rendisi audio dianggap sebagai subtitel (#3333).
- Ekstensi DASH:
- Memisahkan teks tertutup CEA ke dalam
TrackGroupyang berbeda berdasarkan bahasa (#3113). - Menambahkan dukungan untuk mengurai beberapa elemen
Locationdari manifes (MPD) dan melakukan penggantian lokasi diDashMediaSourcesaat pemuatan manifes gagal. - Memperbaiki error (
IndexOutOfBoundsException) saat membuka manifes dengan elemen<SegmentTimeline/>kosong (#3326).
- Memisahkan teks tertutup CEA ke dalam
- Ekstensi RTSP:
- Memperbaiki kegagalan atau penghentian pemutaran sementara selama persiapan pemutaran RTSP yang disebabkan oleh error pengikatan port UDP.
- Ektensi Cast:
- Menambahkan class
CastParamsbaru untuk memungkinkan konfigurasi Cast dengan memanggilCast.initialize(CastParams). - Menambahkan opsi
CastParams.getShowSystemOutputSwitcherOnCastIconClick()baru, yang memicu penggunaan Pengalih Output SystemUI, bukan pemilih perangkat Cast dalam aplikasi jika tersedia. - Menambahkan
MediaRouteButtonStatedanrememberMediaRouteButtonStateuntuk mendukung pengamatan status visibilitas pemilih rute media, dan menambahkan parameterstatekeMediaRouteButton(#3172). - Memperbaiki bug yang menyebabkan
RemoteCastPlayerdapat macet secara permanen dalam status penyamaran trek setelah pemilihan trek, sehingga mengabaikan update trek berikutnya dari penerima Cast (#3237). - Memperbaiki bug saat
DefaultMediaItemConvertermenampilkanNullPointerExceptionsaat mencoba bergabung ke sesi transmisi yang dimulai dari pengirim non-Media3. - Mencegah
CastPlayermentransferMediaItemsyang tidak dapat diputar saat mengubah pemutar aktif (#3199). - Memperbaiki bug yang menyebabkan live stream yang tidak dikonfigurasi (
liveConfiguration == UNSET) diantrekan sebagaiSTREAM_TYPE_BUFFERED(#3318).
- Menambahkan class
- Utilitas pengujian:
- Perluas
DataSourceContractTestuntuk menyertakan dukungan bagi permintaanPOSTdengan header & isi, tambahkan beberapa resourcePOSTkeHttpDataSourceTestEnv, dan tambahkan pernyataan untuk metode, header & isi HTTP yang diharapkan diWebServerDispatcher. - Perketat pernyataan di
DataSourceContractTestuntuk panjang yang ditampilkan dariDataSource.open(). Resource yang dapat menghasilkanC.LENGTH_UNSETharus menunjukkan hal ini menggunakanTestResource.Builder.setMayResolveToUnknownLength(boolean). - Menambahkan
setPlaybackLooperkeTestExoPlayerBuilder.
- Perluas
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus
androidx.media3.exoplayer.MetadataRetriever. Menggunakanandroidx.media3.inspector.MetadataRetrieversebagai gantinya. - Menghapus
androidx.media3.exoplayer.MediaExtractorCompat. Menggunakanandroidx.media3.inspector.MediaExtractorCompatsebagai gantinya. - Hapus
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. GunakanHeifExtractoruntuk mengekstrak metadata foto motion dari file HEIC. - Hapus
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. Menggunakanandroidx.media3.extractor.metadata.MotionPhotoMetadatasebagai gantinya. - Menghapus
androidx.media3.extractor.DummyTrackOutput. Menggunakanandroidx.media3.extractor.DiscardingTrackOutputsebagai gantinya. - Menghapus
androidx.media3.extractor.DummyExtractorOutput. Menggunakanandroidx.media3.extractor.NoOpExtractorOutputsebagai gantinya. - Menghapus
androidx.media3.common.C.generateAudioSessionIdV21. Sebagai gantinya, gunakanandroidx.media3.common.util.Util.generateAudioSessionId.
- Menghapus
- Bangun
- Memperbarui petunjuk
README.mduntuk bergantung pada Media3 secara lokal agar menggunakan Build Komposit Gradle (includeBuild). Skripcore_settings.gradletelah dihapus, dan propertiandroidxMediaModulePrefixsertaandroidxMediaEnableMidiModuletidak lagi digunakan.
- Memperbarui petunjuk
1.11.0-rc01
Gunakan versi stabil 1.11.0.
1.11.0-beta01
7 Juli 2026
Gunakan versi stabil 1.11.0.
1.11.0-alpha01
24 Juni 2026
Gunakan versi stabil 1.11.0.
Versi 1.10.0
1.10.1
12 Mei 2026
- Library umum:
- Memperbaiki penanganan
onAudioSessionIdChangeddiSimpleBasePlayerdanForwardingSimpleBasePlayer.
- Memperbaiki penanganan
- ExoPlayer:
- Memperbaiki kondisi race terkait pembuatan ID sesi audio yang dapat
menyebabkan
IllegalStateExceptiondengan mode tunneling. (#3099). - Memperbaiki kemungkinan error aplikasi saat memulihkan dari error dekoder dengan pra-pemanasan perender.
- Memperbaiki masalah saat artefak video disebabkan oleh penyediaan data inisialisasi saat menggunakan codec Dolby Vision berbasis AV1 (#3153).
- Memperbaiki kondisi race terkait pembuatan ID sesi audio yang dapat
menyebabkan
- Pemilihan trek:
- Menyesuaikan logika pemilihan trek di
VideoTrackInfountuk menyelesaikan jenis MIME penggantian dan memindahkan preferensi skor HDR dan codec ke preferensi kualitas (#3135).
- Menyesuaikan logika pemilihan trek di
- Ekstraktor:
- MP3: Mengabaikan panjang data Xing jika lebih panjang dari panjang streaming yang diketahui (#3117).
- Memperbaiki
ArrayIndexOutOfBoundsExceptiondiMp4ExtractorsaatFLAG_OMIT_TRACK_SAMPLE_TABLEditetapkan dan trek tidak memiliki kotak sampel sinkronisasi (stss).
- Audio:
- Memperbaiki bug yang menyebabkan peristiwa audio mungkin salah dirutekan jika beberapa perender audio ditambahkan ke pemutar.
- Video:
- Menyesuaikan logika untuk penggunaan ulang codec pada perubahan kecepatan frame di API di bawah 30 untuk menghindari reset codec jika tidak bermanfaat (#3120).
- Menonaktifkan solusi sinkronisasi paksa di
queueSecureInputBufferuntuk API 31+. Solusi ini merupakan bottleneck buatan yang memaksa dekripsi berjalan secara serial, sehingga mencegah video kacau karena masalah framework yang ada sebelum API 31.
- Gambar:
- Memperbaiki masalah dalam mode scrubbing saat update gambar hanya akan diterapkan saat pengguna "berhenti melakukan scrubbing" (#2815).
- Sesi:
- Memperbaiki bug yang menyebabkan
ForegroundServiceStartNotAllowedExceptiontidak disebarkan di seluruh batas thread jika thread aplikasi bukan thread utama (#2499). - Memperbaiki bug saat
COMMAND_SEEK_TO_MEDIA_ITEMtidak tersedia diMediaControllersaat terhubung ke sesi khusus platform yang mendukung pencarian ke item lain, tetapi tidak ada modifikasi playlist. - Memperbaiki masalah saat
MediaControllertidak dapat menyetel item media di sesi media platform yang tidak mengizinkan tindakanPREPARE_FROM. - Memperbaiki bug yang menyebabkan proses sendiri tidak ditandai dengan
Controller.isTrusted()di API 27 atau yang lebih lama saat terhubung melalui pengontrol platform.
- Memperbaiki bug yang menyebabkan
- Ekstensi HLS:
- Memperbaiki bug saat
ArrayIndexOutOfBoundsExceptionditampilkan selama penggantian streaming jika pemilihan trek adalah subset dari trek yang tersedia (#3161). - Memperbaiki masalah saat segmen inisialisasi tidak diteruskan
di seluruh update playlist media jika tag
#EXT-X-MAPtidak diulang dalam update berikutnya (#3105).
- Memperbaiki bug saat
- Ekstensi DASH:
- Memperbaiki error di
SampleQueuesaat mencari ke dalam potongan yang saat ini sedang dibatalkan.
- Memperbaiki error di
1.10.0
26 Maret 2026
- Library umum:
- Mempromosikan
Player.mute()danPlayer.unmute()dariUnstableApike stabil. - Mempromosikan
Format.pcmEncodingdanC.PcmEncodingdariUnstableApike stabil. - Menambahkan
Format.primaryTrackGroupIduntuk mengidentifikasi grup utama instanceFormattersemat (#294).
- Mempromosikan
- ExoPlayer:
- Menambahkan kemampuan kliping ke
AdsMediaSource. - Menambahkan dukungan untuk penjadwalan dinamis di
MediaCodecVideoRendereragar penjadwalan pekerjaan dan siklus bangun CPU lebih selaras dengan waktu pemrosesan frame video. Anda dapat mengaktifkannya menggunakanexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()diDefaultRenderersFactory. - Mengizinkan penetapan
DataSource.Factorykustom diDefaultPreloadManager.Builder. - Mengizinkan
ExoPlayeruntuk di-mock tanpa Robolectric dengan memindahkan beberapa konstanta default keExoPlayer.Builder. Meniru antarmuka yang kompleks ini umumnya tidak dianjurkan - hanya jika penggunaannya minimal/sederhana/insidental (#2985).- Hal ini memerlukan pemindahan
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSdariExoPlayerkeExoPlayer.Builder(tanpa penghentian penggunaan).
- Hal ini memerlukan pemindahan
- Memperbaiki bug saat
ProgressiveMediaSourcemenyebarkan info linimasa yang sudah tidak berlaku ke pemutar, dan periode yang diantrekan dihapus secara tidak terduga (#3016). - Memperbaiki masalah yang menyebabkan ExoPlayer tidak meminta fokus audio yang tertunda saat pemutaran diminta selama panggilan telepon.
- Memperbaiki bug saat transisi dari konten on-demand ke konten live dapat menyebabkan buffering ulang di akhir konten on-demand (#3052).
- Menambahkan dukungan untuk Dolby Vision Profile 10 (#2830).
- Memperbaiki bug saat iklan pre-roll yang tidak diinisialisasi menghasilkan
ArrayIndexOutOfBoundsException(#3125).
- Menambahkan kemampuan kliping ke
- CompositionPlayer:
- Menambahkan dukungan untuk
EditedMediaItem.removeVideo.
- Menambahkan dukungan untuk
- Transformator:
EditedMediaItem.Builder.setFrameRate()kini dapat menetapkan kecepatan frame output maksimum untuk video, yang sangat membantu saat meningkatkan kecepatan media dengansetSpeed().
- Pemilihan trek:
- Ubah tanda tangan
DefaultTrackSelector.selectAllTracksuntuk menyertakan array output sebagai parameter, yang diisi otomatis dengan penggantian trek. - Memperbaiki masalah saat trek metadata tersemat dipilih terlepas dari apakah trek utama yang sesuai dipilih atau tidak (#294).
- Menstabilkan opsi
TrackSelectionParametersuntukpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabels, danselectTextByDefault.
- Ubah tanda tangan
- Ekstraktor:
- MP4: Mendukung file dengan kotak
uuidbesar sebelum kotak lain sepertimoov(#3046). - MP4: Menambahkan dukungan untuk trek Versatile Video Coding (VVC) dalam penampung MP4.
- MP4: Mendukung file dengan kotak
- Inspektur:
- Perubahan yang dapat menyebabkan gangguan: menghapus
FrameExtractor. Pengguna sekarang harus bergantung pada modul:media3-inspector-framebaru dan mengupdate impor keandroidx.media3.inspector.frame.FrameExtractor. - Memperkenalkan modul baru untuk mengekstrak dan memproses frame video yang didekode.
- Perubahan yang dapat menyebabkan gangguan: menghapus
- Audio:
- Mengubah library decoding yang mendasari untuk ekstensi decoder IAMF dari
libiamfmenjadiiamf_tools. - Dekode IAMF mendukung output binaural melalui dekoder (saat menggunakan ekstensi dekoder IAMF) atau melalui Android Spatializer.
- Menghapus dukungan untuk
AC4Profile22dan profil lama lainnya dengan benar saat menilai dukungan dekoder AC-4 dalam skenario Automotive (#2609). - Meningkatkan logika percobaan ulang inisialisasi
AudioOutputdiDefaultAudioSink(#2905). - Mencoba mencocokkan tata letak output speaker (atau Spatializer jika berlaku) saat mendekode IAMF, baik dengan ekstensi IAMF maupun dekoder codec media, yang didukung oleh kolom dan logika baru di AudioCapabilities dan AudioCapabilitiesReceiver.
- Memperbaiki bug yang menyebabkan pemutaran macet saat memutar playlist audio tanpa jeda dalam mode offload terkompresi.
- Mengubah library decoding yang mendasari untuk ekstensi decoder IAMF dari
- Teks:
- VobSub: Menggunakan perintah kontrol SPU
STARTdanSTOPuntuk mendapatkan durasi tanda, bukan selalu menggunakan default 5 detik (#2935).
- VobSub: Menggunakan perintah kontrol SPU
- Metadata:
- Meningkatkan jumlah default perender metadata menjadi empat untuk mencakup semua potensi trek metadata yang dipublikasikan oleh varian dan rendition HLS (#3043).
- Efek:
- Memindahkan
LottieOverlayke modul:media3-effect-lottiebaru (yang juga melibatkan penggantian nama dariandroidx.media3.effect.LottieOverlaymenjadiandroidx.media3.effect.lottie.LottieOverlay).
- Memindahkan
- Lottie Efek:
- Memperkenalkan modul
:media3-effect-lottiebaru yang menyediakan fungsi untuk menerapkan efek lottie ke frame video.
- Memperkenalkan modul
- Ekstensi IMA:
- Update versi IMA SDK ke 3.39.0 agar dapat mengakses API info media iklan terbaru.
- Memperbaiki bug saat jenis MIME iklan tidak cocok dengan jenis MIME yang diberikan dalam peristiwa IMA LOADED. Perbaikan ini sekarang memetakan jenis MIME iklan menggunakan info media iklan yang disediakan oleh IMA.
- Menambahkan
setEnableCustomTabskeImaAdsLoaderdanImaServerSideAdInsertionMediaSource, sehingga pengguna dapat mengontrol apakah URL klik-tayang iklan diluncurkan menggunakan Tab Khusus. - Tambahkan
ImaAdTagUriBuilder, class yang menawarkan cara alternatif untuk membuatadTagUri. Library ini berisisetPreferredLinearOrientationAPI. Ini adalah API dalam pengujian alfa yang akan memungkinkan Anda menetapkan orientasi pilihan untuk iklan linear. Jika Anda ingin bergabung ke grup pengujian alfa, hubungi partner akun Anda.
- Sesi:
- Memperbaiki bug yang menyebabkan array besar di
MediaMetadata.artworkDatadapat membuat aplikasi error. - Gunakan jenis int untuk argumen
@Player.Commanddi antarmukaActionFactory(#2933). - Menjadikan
MediaSessionServicedanMediaLibraryServicesebagaiLifecycleService, sehingga memungkinkan operasi berbasis siklus proses dilampirkan ke siklus proses layanan (#187). - Berhenti mendukung perintah perubahan volume perangkat dari
MediaControllerdanMediaBrowseruntuk pemutaran lokal. Aplikasi tidak boleh mengubah volume perangkat lokal, dan jika diperlukan, dapat menggunakan APIAudioManageruntuk tujuan ini. - Mendeteksi instance
Intentyang tidak berlaku yang memulai layanan sebagai layanan latar depan. Hal ini mencegahForegroundServiceDidNotStartInTimeExceptiondilempar oleh sistem. Ini adalah perubahan yang dapat menyebabkan gangguan pada API yang tidak stabil untuk aplikasi yang mengimplementasikanMediaNotification.Providerkustom karena ada metode baru yang diperlukan. - Menambahkan builder untuk instance
PendingIntentyang akan digunakan dengan widget layar utama (#2933). - Menambahkan metode statis untuk membuat instance
Intentuntuk widget layar utama berbasis Compose (#2933). - Memperbaiki bug saat transisi item media tidak dilaporkan ke pengontrol saat pemutaran beralih dari indeks item media tertentu ke indeks item media lain dengan item media yang sama untuk alasan diskontinuitas 'AUTO' dan 'SEEK' (#2997).
- Memperbaiki masalah saat solusi penempatan tombol UI sistem berdampak negatif pada platform UI lain seperti Android Auto atau produsen yang tidak memerlukan solusi (#3041).
- Memperbaiki masalah saat akses ke langganan tidak disinkronkan (#3056).
- Solusi bug SysUI di API 29 saat poster sesi media dalam ukuran tertentu dapat membuat SysUI error dan memaksa perangkat untuk memulai ulang (#3118).
- Memperbaiki penskalaan ikon poster notifikasi di Android Q (#3084).
- Memperbaiki bug yang menyebabkan array besar di
- UI:
- Tambahkan Composable
PlaybackSpeedControlkemedia3-ui-composeuntuk menampilkan dan mengubah kecepatan pemutaran. - Tambahkan Composable
PlaybackSpeedToggleButtonkemedia3-ui-compose-material3untuk mengontrol kecepatan pemutaran. - Menambahkan
ProgressSliderComposable kemedia3-ui-compose-material3untuk menampilkan progres pemutar dan melakukan pencarian menggunakan penyeretan dan pengetukan (#2288). - Hindari buffer di luar layar yang besar saat menganimasikan PlayerControlView.
- Menambahkan Composable
Playerkemedia3-ui-compose-material3yang menggabungkanContentFramedengan kontrol yang dapat disesuaikan yang sejajar dengan bagian atas, tengah, dan bawah. - Sembunyikan posisi pemutaran dari layanan aksesibilitas untuk mencegah
pembaruan pengumuman berkelanjutan saat
PlayerControlViewterlihat.
- Tambahkan Composable
- Ekstensi HLS:
- Mendukung X-PLAYOUT-LIMIT dengan interstisial HLS (#2484).
- Mendukung atribut
QUERYPARAMdengan#EXT-X-DEFINE(#1854). - Mengoptimalkan penguraian playlist HLS dengan meng-cache pencocok ekspresi reguler (#3008).
- Mengekspos trek metadata ID3 (EMSG) dalam rendition audio (#3043).
- Mengizinkan penggantian lokasi saat terjadi error pemuatan, jika streaming redundan dari lokasi yang berbeda tersedia (#1988).
- Memperbaiki perilaku X-SNAP untuk interstisial HLS agar dapat menghitung posisi mulai dan melanjutkan dengan benar (#3013).
- Ekstensi DASH:
- Ekstensi RTSP:
- Memperbaiki regresi dalam streaming H.264 dan H.265 yang salah mengurai sampel unit akses yang sama yang mencakup beberapa paket RTP. Hal ini menyebabkan artefak visual dan kerusakan pada video (#3121).
- Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Menambahkan dukungan pengelola UI MPEG-H ke ekstensi dekoder MPEG-H (#3066).
- Ektensi Cast:
- Menambahkan metode
RemoteCastPlayer.Builder#setTrackSelectoryang memungkinkan penerapan pemilihan trek untuk pemutaran Cast.
- Menambahkan metode
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus
ExperimentalFrameExtractor. Menggunakanandroidx.media3.inspector.frame.FrameExtractorsebagai gantinya. - Menghapus
ChannelMixingMatrix.create(). MenggunakanChannelMixingMatrix.createForConstantGain()sebagai gantinya. - Menghapus
androidx.media3.extractor.metadata.flac.VorbisComment. Menggunakanandroidx.media3.extractor.metadata.vorbis.VorbisCommentsebagai gantinya. - Hapus
MediaSource.prepareSource(MediaSourceCaller, TransferListener). Sebagai gantinya, gunakanMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).
- Menghapus
1.10.0-rc03
25 Maret 2025
Gunakan versi stabil 1.10.0.
1.10.0-rc02
16 Maret 2026
Gunakan versi stabil 1.10.0.
1.10.0-rc01
10 Maret 2026
Gunakan versi stabil 1.10.0.
1.10.0-beta01
25 Februari 2026
Gunakan versi stabil 1.10.0.
1.10.0-alpha01
6 Februari 2026
Gunakan versi stabil 1.10.0.
Versi 1.9.0
1.9.4
16 Mei 2026
Versi 1.9.4 berisi commit berikut.
- Efek:
- Tetapkan
GL_DRAW_BUFFERdanGL_READ_BUFFERsecara eksplisit saat beralih dari konteks tanpa platform.
- Tetapkan
1.9.3
16 Maret 2026
Versi 1.9.3 berisi commit berikut.
- Audio:
- Memperbaiki bug yang menyebabkan pemutaran macet saat memutar playlist audio tanpa jeda dalam mode offload terkompresi.
1.9.2
6 Februari 2026
Versi 1.9.2 berisi commit berikut.
- ExoPlayer:
- Memperbaiki bug saat
ProgressiveMediaSourcemenyebarkan info linimasa yang sudah tidak berlaku ke pemutar dan periode yang diantrekan dihapus secara tidak terduga (#3016).
- Memperbaiki bug saat
- Sesi:
- Memperbaiki masalah saat solusi penempatan tombol UI sistem berdampak negatif pada platform UI lain seperti Android Auto atau produsen yang tidak memerlukan solusi (#3041).
- Ektensi Cast:
- Memperbaiki bug yang menyebabkan transfer dari Transmisi ke pemutaran lokal rusak.
1.9.1
26 Januari 2026
Versi 1.9.1 berisi commit ini.
- Library Umum:
- Mendukung string tanggal-waktu dengan hanya jam dalam selisih zona waktu (#2929).
- ExoPlayer:
- Izinkan penjadwalan dinamis untuk memperlambat interval
doSomeWorkhanya setelah audio mulai mendukung sinkronisasi A/V yang lebih lancar di awal pemutaran. - Memperbaiki bug di
DefaultLoadErrorHandlingPolicyyang menyebabkanFileNotFoundExceptiondan jenis pengecualian serupa dicoba ulang beberapa kali. - Memperbaiki bug dengan penjadwalan dinamis, yaitu waktu yang dihitung untuk
doSomeWorkberikutnya secara keliru dikurangi dengan waktu yang berlalu dari iterasidoSomeWorksaat ini. Mengatasi hal ini diharapkan dapat memperpanjang waktu tidak ada aktivitas CPU dan menghemat daya. - Memperbaiki masalah saat beberapa pemutaran file Dolby Vision gagal saat mencoba menggunakan codec AVC atau HEVC pengganti.
- Memperbaiki bug saat pemuatan berlanjut setelah pemutaran berakhir saat menghapus item yang sedang diputar dari playlist (#2873).
- Menghindari kebocoran instance
MediaItemsaat berulang kali menggunakanExoPlayer.replaceMediaItempada item yang sama (#2993). - Mencegah potensi ANR yang disebabkan oleh rilis penguncian layar saat aktif darurat (#2979).
- Izinkan penjadwalan dinamis untuk memperlambat interval
- Ekstraktor:
- MP3: Mengurai data ReplayGain LAME (#2840).
- Audio:
- Menghapus dukungan untuk
AC4Profile22dan profil lama lainnya dengan benar saat menilai dukungan dekoder AC-4 dalam skenario Automotive (#2609).
- Menghapus dukungan untuk
- Video:
- Menghapus codec video di perangkat di bawah API 30 saat kecepatan frame konten berubah untuk menghindari pemutaran yang tersendat-sendat (#2941).
- Teks:
- VobSub: Memperbaiki beberapa subtitel yang hilang dengan menangani SPU yang hanya berisi satu urutan kontrol, atau memiliki info penting yang dibagi di beberapa urutan kontrol (#2935).
- Ekstensi IMA:
- Perbaikan bug: Memperbaiki masalah saat jenis MIME iklan tidak cocok dengan jenis MIME yang disediakan dalam peristiwa IMA LOADED. Perbaikan ini sekarang memetakan jenis MIME iklan menggunakan indeks pod iklan dan posisi iklan.
- Tambahkan pemeriksaan null sebelum mengakses hasil
getAdsManager()danAdEvent.getAd().
- Sesi:
- Memperbaiki bug saat menghentikan
MediaControlleryang terhubung ke sesi platform menyebabkan aplikasi error jika penghentian terjadi selama pemutaran iklan (#2948). - Menambahkan verifikasi tambahan pada instance
extrasBundledi berbagai class untuk melindungi dari instanceBundleyang salah format yang dikirim dari proses lain. - Memperbaiki masalah saat perintah yang tidak ada untuk
COMMAND_SEEK_NEXTatauCOMMAND_SEEK_BACKdapat menyebabkan kesenjangan dalam notifikasi media sistem (#2976). - Memindahkan penskalaan bitmap untuk ikon notifikasi dari thread utama (#2829).
- Memperbaiki bug yang menyebabkan penulis, penulis lirik, dan komposer tidak digunakan sebagai pengganti
saat mengonversi dari
MediaMetadataCompatdanMediaDescriptionCompatlama (#3018).
- Memperbaiki bug saat menghentikan
- Download:
- Memperbaiki potensi loop tak terbatas saat
PriorityTooLowExceptionditangani olehSegmentDownloader(untuk DASH, HLS, dan SmoothStreaming). Penggantian kustomSegmentDownloadermenggunakan metodeexecuteyang dilindungi harus menyediakan tugasnya yang digabungkan dalamSupplieragar dapat dibuat ulang (#2931).
- Memperbaiki potensi loop tak terbatas saat
- Ekstensi HLS:
- Teruskan dokumen JSON daftar aset mentah ke callback
Listener.onAssetListLoadCompleted. Ini adalah perubahan yang dapat menyebabkan gangguan pada API yang tidak stabil yang mengharuskan aplikasi yang mengimplementasikan callback ini untuk menambahkan argumen tambahan jenisJSONObject(#2950).
- Teruskan dokumen JSON daftar aset mentah ke callback
- Ekstensi RTSP:
- Menangani Paket RTP dengan stempel waktu yang digabungkan dengan benar (#2930).
- Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Memperbaiki potensi
NullPointerExceptionyang dapat terjadi saat melakukan pencarian sebelum memproses frame video pertama (#2965).
- Memperbaiki potensi
- Ektensi Cast:
- Memperbaiki bug yang mencegah linimasa
RemoteCastPlayerdiperbarui dengan benar saat mengganti playlist.
- Memperbaiki bug yang mencegah linimasa
1.9.0
17 Desember 2025
- Library Umum:
- Mengupdate
minSdkke23sesuai dengan library AndroidX lainnya. - Menambahkan
PlayerTransferState, yang memfasilitasi transfer status pemutaran di seluruh instancePlayer. - Tambahkan metode
void mute()danvoid unmute()ke Player yang mempertahankan dan akibatnya memulihkan volume Player sebelum dan setelah menyetelnya ke nol. - Memublikasikan class utilitas
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManager, danStuckPlayerDetectoryang sebelumnya digunakan olehExoPlayersecara internal untuk memungkinkan penggunaan kembali bagi pemutar lain (#1893). - Memperbaiki penanganan pemroses
ForwardingPlayersaat pemutar delegasi yang mendasarinya menggunakan kesetaraan 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 integer overflow saat posisi buffering yang dilaporkan jauh lebih besar daripada durasi yang dilaporkan (#2750). - Memperbaiki deteksi otomatis jenis trek
TrackGroupdengan tidak mengabaikan jenis MIME sampel kustom dan beralih menggunakan jenis trek yang berpotensi salah dari jenis MIME penampung (#2860).
- Mengupdate
- ExoPlayer:
- Tambahkan deteksi pemutar 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 penguncian layar saat aktif secara default untuk memperbaiki masalah buffering selama
pemutaran di latar belakang. Ini sama dengan menetapkan
ExoPlayer.Builder.setWakeModekeC.WAKE_MODE_LOCAL. - Tambahkan logika pemrosesan untuk otomatis memperbarui ID perangkat virtual 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-cache 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-pra-cache. - Menggunakan fungsi pra-cache
DefaultPreloadManagerdi aplikasi demo video pendek. - Tambahkan penyetel
DefaultLoadControl.Builderuntuk pemutaran lokal dan sesuaikan nilai defaultDefaultLoadControlagar berfungsi dengan baik di berbagai file lokal. - Memperbaiki bug yang menyebabkan pemutar tetap berada di
STATE_READYatauSTATE_BUFFERINGsaat menyetel playlist kosong. - Meningkatkan API pengelola pramuat:
- Tambahkan
addMediaItems(List<MediaItem>, List<T>)danaddMediaSources(List<MediaSource>, List<T>)yang menambahkan item media atau sumber media dalam batch, dan otomatis memanggilinvalidate()setelahnya. - Tambahkan
removeMediaItems((List<MediaItem>)danremoveMediaSources(List<MediaSource>)yang menghapus item media atau sumber media dalam batch, dan pastikan pengelola pramuat tidak mulai melakukan pramuat atau melanjutkan pramuat salah satunya setelah penghapusan. - Izinkan
DefaultPreloadManager.setCurrentPlayingIndex(int)untuk membatalkan dirinya sendiri secara otomatis. Aplikasi tidak perlu lagi memanggilinvalidate()secara eksplisit setelah mengupdate 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 buffering target bagi pemutar denganplayerNameyang ditentukan.DefaultLoadControlkini dapat membuat keputusan untuk setiap pemutar secara terpisah berdasarkan byte yang dialokasikan dan byte buffer targetnya sendiri. - Tambahkan
SkipInfokeAdPlaybackState.AdGroupuntuk membawa informasi lewati untuk setiap iklan di grup iklan. - Memperbaiki bug saat memanggil
removeMediaItems(List)selama pemutaran post-roll menyebabkan error (#2746). - Memperbaiki beberapa gangguan dalam pemutaran playlist saat frame salah disetel sebagai sampel terakhir dan dirender.
- Mengaktifkan jalur percobaan ulang jika pemutar gagal membuat ID sesi audio (#2382, #2678).
- Menambahkan dukungan untuk mengontrol total byte buffer untuk sumber di
DefaultPreloadManagerguna menghindari total byte buffer untuk pramuat bertambah secara arbitrer. Untuk menggunakan logika kontrol default, Aplikasi dapat menetapkan byte buffering target untuk pramuat melaluiDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)untukplayerNamePlayerId.Preload.name("pramuat"), dan memasukkanDefaultLoadControlyang dibuat melaluiDefaultPreloadManager.Builder.setLoadControl(LoadControl). - Menambahkan
cloneAndSet(int, int)keShuffleOrderdengan implementasi default (#2834). - Menambahkan offset melanjutkan konten saat melewati pemutaran iklan setelah penyesuaian pencarian atau transisi otomatis (#2484).
- Menambahkan API untuk menetapkan dan mengamati parameter codec untuk trek audio dan video.
Fitur ini diimplementasikan untuk perender berbasis
MediaCodecdan memerlukan API 29+.- Gunakan
ExoPlayer.setAudioCodecParameters()danExoPlayer.setVideoCodecParameters()untuk menerapkan parameter. - Gunakan
ExoPlayer.addAudioCodecParametersChangeListener()danExoPlayer.addVideoCodecParametersChangeListener()untuk memproses perubahan. Mengamati kunci khusus vendor memerlukan API 31+.
- Gunakan
- Memperbaiki
IllegalStateExceptionyang disebabkan oleh penetapan sumber media kosong setelah mencari posisi bukan nol, lalu menyiapkan pemutar dengan sumber media yang tidak kosong. - Memperbaiki bug saat mencari item media lain saat dalam mode scrubbing
dapat menyebabkan
IllegalStateException. - Memperbaiki potensi
NullPointerExceptiondiDefaultPlaybackSessionManager(#2885). - Mengaktifkan peningkatan performa pencarian untuk video yang memenuhi syarat.
- Mengaktifkan kembali penggunaan dekripsi asinkron di MediaCodec pada API 36+ setelah masalah waktu tunggu dengan API platform ini diperbaiki (#1641).
- Mengubah nilai default
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsmenjadi 15 md dan mengaktifkan penghapusan frame video yang lebih efisien sebelum decoding untuk video yang memenuhi syarat. - Menambahkan batas memori maksimum ke penghitungan memori otomatis di
DefaultLoadControl. Hal ini hanya akan berlaku jika jumlah trek yang dipilih berlebihan (#2860). - Memperbaiki bug saat, jika diputar dalam playlist atau mode ulang, pencarian dalam mode scrub di dekat akhir dapat menyebabkan pencarian ke item media berikutnya.
- Tambahkan deteksi pemutar macet yang memicu error pemutar
- CompositionPlayer:
- Publikasikan
CompositionPlayerdi bawah 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. - Menambahkan dukungan untuk
EditedMediaItem.removeVideo.
- Publikasikan
- Transformator:
- Gunakan
InAppMp4Muxersebagai muxer default. - Menambahkan
EditedMediaItem.Builder#setSpeed()dan menghentikan penggunaanEffects#createExperimentalSpeedChangingEffects(). - Ganti
forceAudioTrackdanforceVideoTrackdengantrackTypesdiEditedMediaItemSequence.
- Gunakan
- Pemilihan Trek:
- Tambahkan
TrackSelectionParameters.selectTextByDefaultuntuk memilih pilihan trek teks apa pun tanpa menentukan preferensi lain yang lebih spesifik. - Menambahkan
preferredVideoLabels,preferredAudioLabels, danpreferredTextLabelsdiTrackSelectionParametersuntuk menentukan preferensi trek dengan label tertentu, misalnya yang dibaca dari tag HLS NAME (#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).
- MP3: Meningkatkan batas sniffing menjadi 128 kB agar sesuai dengan batas penelusuran yang ada untuk byte sinkronisasi (#2713).
- MP3: Mengubah
FLAG_ENABLE_INDEX_SEEKINGagar lebih memilih mencari informasi dari header metadata (seperti Xing dan VBRI) jika tersedia, dan beralih ke pencarian berbasis indeks jika tidak ada informasi pencarian lain. Hal ini meningkatkan performa untuk file dengan metadata pencarian (#2839). - MP3: Mengubah
Mp3Extractoragar secara default menggunakan asumsi kecepatan bit konstan (CBR) saat tidak ada metadata pencarian (misalnya, Xing, VBRI) yang ditemukan, meskipunFLAG_ENABLE_INDEX_SEEKINGditetapkan. Hal ini didasarkan pada histori spesifikasi MP3, di mana CBR adalah standar dan VBR memerlukan header eksplisit. Hal ini meningkatkan kemampuan pencarian langsung untuk file tanpa metadata dengan mengorbankan potensi akurasi untuk file VBR yang tidak memiliki header. Pencarian indeks kini digunakan sebagai penggantian jika asumsi CBR tidak dapat dicari (misalnya, untuk streaming dengan panjang yang tidak diketahui) (#2848). - MP4: Menghilangkan ambiguitas antara jenis MIME
audio/mpeg(MP3),audio/mpeg-L1, danaudio/mpeg-L2dengan mengintip nilai lapisan sampel pertama sebelum memunculkan 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 tersebut tidak boleh terfragmentasi (#2650). - MP4: Menambahkan dukungan untuk metadata
©mvn(nama gerakan) dan©mvi(indeks gerakan), yang kini ditampilkan sebagai objekTextInformationFramediFormat.metadatadengan IDMVNMdanMVIN(#2754). - MP4: Mengabaikan trek yang tidak memiliki kotak
stsd(bukan gagal mengurai seluruh file). - Matroska: Menambahkan dukungan untuk deteksi DTS-HD (#6225).
- Memperbaiki masalah di
MatroskaExtractoryang menyebabkan pencarian tidak akurat untuk file dengan beberapa trek. Titik tanda kini dikaitkan dengan benar ke trek masing-masing, sehingga menghasilkan pencarian yang lebih akurat. - MPEG-TS: Memperbaiki
IllegalArgumentExceptiondariReorderingBufferQueueyang disebabkan oleh paket PES tanpa stempel waktu (#2764). - Menambahkan dukungan untuk mengekstrak Foto Motion HEIC.
HeifExtractorkini dapat mengurai file HEIC yang berisi trek video dan audio tersemat.
- Inspektur:
- Memperkenalkan modul
:media3-inspectorbaru yang berfungsi sebagai tempat khusus untuk utilitas pemeriksaan media. Modul ini sekarang menampungandroidx.media3.inspector.MetadataRetrieverbaru, yang akan menyediakan API terpadu untuk ekstraksi metadata dan frame.androidx.media3.exoplayer.MetadataRetrieveryang ada kini tidak digunakan lagi dan digantikan 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 dekoder kustom. Objek ini harus dibuat melaluiBuilder-nya untukMediaItemtertentu. - FrameExtractor: Menambahkan
getThumbnail()untuk mengekstrak frame thumbnail representatif dari file media tanpa memerlukan stempel waktu tertentu. - Tambahkan
androidx.media3.inspector.MediaExtractorCompat, pengganti langsung untukandroid.media.MediaExtractorplatform yang menyediakan cara untuk mengekstrak sampel media mentah yang dienkode dari file media.androidx.media3.exoplayer.MediaExtractorCompatyang ada kini tidak digunakan lagi dan digantikan dengan class baru ini.
- Memperkenalkan modul
- Audio:
- Membuat instance
AudioProcessormengetahui pencarian. - Mengizinkan injeksi antarmuka
AudioOutputProviderbaru keDefaultAudioSink.Builderuntuk mendukung jalur output audio kustom. Defaultnya adalahAudioTrackAudioOutputProvider. - Menangani pencarian di
GainProcessor. - Memanfaatkan kemampuan level dan profil dekoder AC-4 dalam penilaian dukungan format trek (#2580).
- Menghindari potensi penundaan yang disebabkan oleh penanganan callback perubahan pemilihan rute 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:
- Menonaktifkan penggunaan kembali codec untuk konten Dolby-Vision dengan profil yang berbeda.
- Mengaktifkan kembali solusi untuk poin performa yang salah dilaporkan untuk codec aman (#2856).
- Teks:
- Memperbaiki penguraian subtitel CEA-6/708 dalam konten Dolby Vision (#2775).
- Gambar:
- Memperbaiki masalah ScrubbingMode saat pemutar macet saat melakukan scrubbing trek thumbnail DASH (#2815).
- DRM:
- Mengubah jenis nilai yang ditampilkan dari metode
MediaDrmCallbackdaribyte[]menjadi jenisMediaDrmCallback.Responsebaru, untuk memungkinkan menampilkan informasi opsional tambahan. Ini adalah perubahan yang dapat menyebabkan gangguan pada sumber, tetapi gangguan tersebut dapat dengan mudah diselesaikan dengan menggabungkan nilai yang ditampilkanbyte[]sebelumnya dengannew Responsesebelum ditampilkan. - Menambahkan info permintaan kunci seperti URL dan latensi ke
AnalyticsListener.onDrmKeysLoaded(#1001). - Pindahkan data permintaan penyediaan dari parameter URL ke isi POST.
- Mengubah jenis nilai yang ditampilkan dari metode
- Efek:
- Menambahkan
Presentation.copyWithUnsetSideRoundedTountuk membulatkan sisi output yang tidak ditetapkan saatPresentationdibuat dengan panjang satu sisi.
- Menambahkan
- Muxer:
- Menambahkan
MediaMuxerCompat, pengganti langsung untuk frameworkMediaMuxer. - Menambahkan
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()untuk mengizinkan pembuatan Foto Motion. - Tambahkan
WebmMuxeruntuk memungkinkan muxing streaming 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 untuk IMA SDK guna menangani ID iklan seperti yang ditentukan dalam setelan Google Ad Manager. Kode jaringan bersifat opsional, tetapi direkomendasikan untuk permintaan streaming Layanan lengkap. Untuk menemukan kode jaringan, lihat artikel ini. - Menambahkan nomor versi dependensi IMA menjadi 3.37.0 yang memerlukan pengaktifan desugaring library inti. Fitur ini juga harus diaktifkan oleh aplikasi dependen. Lihat catatan konfigurasi IMA. * Mendukung opsi UI kustom IMA DAI di builder URI SSAI. Opsi UI kustom untuk penyisipan iklan sisi server mencakup dukungan rendering "Dapat dilewati" dan "Tentang Iklan Ini". Fitur ini saat ini tersedia untuk penayang tertentu yang masuk dalam daftar yang diizinkan. Perubahan ini juga mengupgrade versi IMA SDK ke 3.38.0 (catatan rilis) untuk mengakses API opsi UI kustom.
- Memperbaiki masalah saat error persiapan konten untuk konten setelah iklan akan dilaporkan secara keliru sebagai error pemutaran iklan (#2656).
- Sesi:
- Menambahkan parameter baru ke
MediaSession.Callback.onPlaybackResumptionuntuk menunjukkan apakah panggilan terjadi hanya untuk mengumpulkan informasi atau untuk memulai pemutaran (#1764). - Mengupdate
MediaSession.ControllerInfo.isTrusteduntuk juga mendeklarasikan pengontrol dari aplikasi sendiri sebagai tepercaya (#2542). - Menambahkan
MediaSessionService.triggerNotificationUpdateuntuk memicu update notifikasi secara manual (#1833). - Menambahkan
ProgressListenerke metode perintah kustom. - Ubah nilai default untuk
MediaLibrarySession.Builder.setLibraryErrorReplicationModemenjadi non- fatal. - Menambahkan parameter
ContextkeMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Membaca 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 memberikan paritas dengan apa yang dilakukan media1 dan platform (#2637). - Memperbaiki bug yang menyebabkan
getCurrentTimeline()dipanggil olehPlayerWrappermeskipun perintah tidak tersedia (#2665). - Memperbaiki bug saat pesan tertinggal dalam antrean pesan looper utama yang menyebabkan kebocoran memori setelah layanan dihentikan (#2692).
- Saat terhubung ke aplikasi sesi lama dengan
MediaBrowser, perintah kustom hanya dikirim ke sesi jika tindakan kustom diiklankan sebagai tindakan kustom diPlaybackStateCompatsesi lama. Semua tindakan kustom lainnya dikirim ke layanan. - Mengimplementasikan
onAudioSessionIdChangeduntuk memberi tahu pengontrol media saat ID sesi audio ditetapkan oleh sesi (#244). - Memperbaiki bug yang menyebabkan
KEYCODE_HEADSETHOOKtidak memulai pemutar saat peristiwa tombol mediaIntenttiba dionStartCommand(). Masalah ini diperbaiki dengan menangani 'KEYCODE_HEADSETHOOK' sepertiKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Memperbaiki bug yang menyebabkan ukuran Surface tidak dikomunikasikan antara sesi
dan pengontrol, sehingga gagal menerapkan efek video dalam
demo-session. Jika Anda menggunakan pengontrol, hal ini mungkin merupakan perubahan yang dapat menyebabkan gangguan jika pemutar Anda tidak dapat menangani panggilan
setVideoSurfaceHolder. - Memperbaiki penyebaran nilai metadata
CharSequencenon-Stringseperti string bergaya span (#2853). - Tambahkan
CommandButton.executeActionagar pengontrol dapat lebih mudah memicu tindakan yang diinginkan. Juga memungkinkan untuk menentukan parameter untuk beberapa perintah pemutar dan sesi guna menentukan tindakan yang akan dipicu. - Tambahkan kompatibilitas mundur untuk instance
CommandButtonmenggunakanPlayer.CommandatauSessionCommandnon-kustom untuk menentukan tindakannya. Hal ini sekarang direpresentasikan dengan benar dalam sesi media platform, misalnya untuk UI Sistem atau Android Auto. - Memperbaiki masalah saat
Bitmapyang sama dikompresi beberapa kali saat menghubungkanMediaControllerke sesi media platform.
- Menambahkan parameter baru ke
- UI:
- Tambahkan class
ProgressStateWithTickIntervaldan ComposablerememberProgressStateWithTickIntervalyang sesuai ke modulmedia3-ui-compose. Holder status ini digunakan didemo-composeuntuk menampilkan posisi dan durasi saat ini dalam bentuk teks. - Tambahkan
MuteButtonStatekeui-composeyang menangani penonaktifan volumePlayer. Holder status ini digunakan didemo-composeuntuk menampilkan tombol aktifkan/nonaktifkan audio. - Tambahkan class
ProgressStateWithTickCountdan ComposablerememberProgressStateWithTickCountyang sesuai ke modulmedia3-ui-compose. Holder status ini digunakan didemo-composeuntuk menampilkan progres sebagai status progres horizontal hanya baca. - Tambahkan Composable
ContentFramekemedia3-ui-composeyang menggabungkan pengelolaanPlayerSurfacedengan pengubahan ukuran rasio aspek dan penutupan dengan shutter. - Mengatasi bug platform API 34 umum yang menyebabkan video direntangkan/dipangkas
saat menggunakan
SurfaceViewdi dalam ComposeAndroidViewsehingga memengaruhi ComposableContentFramedanPlayerSurfacedenganSURFACE_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. - Tambahkan composable
TimeTextkemedia3-ui-compose-material3untuk menampilkan progres pemain dalam bentuk tekstual. Komponen ini dapat dikonfigurasi untuk menampilkan posisi, durasi, atau waktu yang tersisa saat ini. - Menambahkan dukungan untuk menempatkan tombol rute media di
PlayerView. - Menggunakan
BidiFormatteruntuk menampilkan tanda baca dengan benar dalam subtitel teks RTL (#11214).
- Tambahkan class
- Ekstensi HLS:
- Mengurai atribut lewati interstisial HLS.
- Petakan atribut kontrol lewati dari playlist HLS dan dokumen daftar aset ke
AdPlaybackStateuntuk akses publik. - Memperbaiki bug saat waktu mulai playlist dihapus ketika tag EXT-X-PROGRAM-START-DATE yang menentukan tanggal mulai dihapus dari playlist (#2760).
- Menggunakan penelusuran biner untuk menemukan indeks segmen dari posisi tertentu dalam playlist (#2826).
- Tambahkan
HlsInterstitialsAdsLoader.skipCurrentAd()danskipCurrentAdGroup()serta metode yang sesuai untuk melewati iklan dan grup iklan menurut indeks. - Menambahkan
HlsInterstitialsAdsLoader.Listener.onAdStarteduntuk melaporkan awal periode iklan (#2859). - Menerima spasi sebagai pemisah tanggal/waktu dalam string tanggal-waktu ISO 8601.
- Menangani pengambilan potongan berikutnya dengan benar untuk
HlsMediaPlaylisttanpa segmen (#2821). - Gunakan posisi mulai default untuk pre-roll dengan live stream.
- Ekstensi DASH:
- Memperbaiki
UnsupportedOperationExceptionsaat memutar streaming DASH dengan manifes URIdata:non-hierarkis (#2688). - Mereset
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 yang terfragmentasi untuk H264 dan H265 (#2613).
- Ekstensi decoder (FFmpeg, VP9, AV1, dll.):
- Ekstensi AV1: Decoder software AV1 kini menggunakan library
dav1dberperforma tinggi, menggantikan implementasilibgav1sebelumnya untuk meningkatkan kecepatan decoding. - Ekstensi FFmpeg: Memperbaiki masalah yang mencegah beberapa file FLAC
diputar dengan memastikan blok
STREAMINFOdiuraikan dengan benar dan diteruskan ke dekoder (#2887).
- 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 diDefaultCastOptionsProvider#toMediaQueueItem, jika tersedia. - Aktifkan transfer jarak jauh ke lokal di
DefaultCastOptionsProvider. - Menambahkan dukungan untuk Cast dalam demo Sesi.
- Menambahkan dukungan untuk menampilkan tombol rute media di UI Composable.
- Menambahkan dukungan untuk menampilkan tombol rute media di 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. - Menambahkan perbedaan waktu maksimum antara pesan untuk
RobolectricUtil.runMainLooperUntil(danrunLooperUntil). Defaultnya adalah 1 detik, tetapi dapat dikonfigurasi melalui overload 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
BitmapFactoryImageDecoder.BitmapDecoder. Sebagai gantinya, gunakanExternallyLoadedImageDecoder. - Menghapus
ShadowMediaCodecConfig.forAllSupportedMimeTypes()yang tidak digunakan lagi. Sebagai gantinya, gunakanShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - Menghapus
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()yang tidak digunakan lagi. Sebagai gantinya, gunakanShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- Menghapus konstruktor
1.9.0-rc01
1 Desember 2025
Gunakan versi stabil 1.9.0.
1.9.0-beta01
20 November 2025
Gunakan versi stabil 1.9.0.
1.9.0-alpha01
22 Oktober 2025
Gunakan versi stabil 1.9.0.
Versi 1.8.0
1.8.1
21 Mei 2026
Versi 1.8.1 berisi commit berikut.
- Efek:
- Tetapkan
GL_DRAW_BUFFERdanGL_READ_BUFFERsecara eksplisit saat beralih dari konteks tanpa platform.
- Tetapkan
Versi 1.8.0
30 Juli 2025
Versi 1.8.0 berisi commit ini.
- Library Umum:
- Menambahkan dukungan untuk mengganti pemutar di
ForwardingSimpleBasePlayer.
- Menambahkan dukungan untuk mengganti pemutar di
- ExoPlayer:
- Menambahkan pengambil untuk mode acak ke antarmuka
ExoPlayer(#2522). - Menampilkan 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 gunakan instance yang berbeda dari yang digunakan untuk pemutaran (#1191). - Memperbaiki bug yang menyebabkan format audio non-stereo di TV mungkin ditandai sebagai
tidak didukung oleh
DefaultTrackSelector. - Pastikan frame terakhir dirender dengan benar saat menggunakan flag
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. - Menampilkan
IllegalStateExceptionsaatPreloadMediaSourcediputar olehExoPlayerdengan thread pemutaran yang berbeda dengan thread pemuatan awal (#2495). - Menambahkan
cloneAndMovekeShuffleModedengan implementasi default (#2226). - Ubah perilaku default
Renderer.getMinDurationToProgressUsuntuk menampilkan nilai yang lebih besar jika tidak diperlukan panggilan kerender. - 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). Tindakan ini akan mengoptimalkan pemutar untuk banyak pencarian yang sering dilakukan (misalnya, dari pengguna yang menarik panel scrubber). Perilaku mode scrubbing dapat disesuaikan dengansetScrubbingModeParameters(..)diExoPlayerdanExoPlayer.Builder. - Mengizinkan penyesuaian toleransi pencarian pecahan 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 trek 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 mulai yang ditentukan. - Menambahkan dukungan pramuat dari posisi yang ditentukan di
DefaultPreloadManager.
- Menambahkan pengambil untuk mode acak ke antarmuka
- Transformator:
- Tambahkan
CodecDbLiteyang memungkinkan pengoptimalan setelan encoding video khusus chipset. - Tambahkan flag
setEnableCodecDbLitekeDefaultEncoderFactoryuntuk mengaktifkan pengoptimalan setelan CodecDB Lite. Secara default, flag ini ditetapkan ke false. - Mengisi jeda awal (ditambahkan melalui
addGap()) dengan audio senyap kini memerlukan setelan eksplisitexperimentalSetForceAudioTrack(true)diEditedMediaItemSequence.Builder. Jika celah berada di tengah urutan, flag ini tidak diperlukan. - Pindahkan antarmuka
Muxerdarimedia3-transformerkemedia3-muxer. - Buat setelan
MediaItem.Builder().setImageDuration(long)wajib untuk mengimpor item media sebagai gambar. - Tambahkan
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)yang menyertakan daftar edit MP4 saat memangkas untuk menginstruksikan pemutar agar mengabaikan sampel antara frame utama sebelum titik awal pemangkasan, dan titik awal pemangkasan. - Update aplikasi Composition Demo untuk menggunakan Kotlin dan Jetpack Compose, serta tambahkan
VideoCompositorSettingskustom untuk mengatur urutan ke dalam tata letak 2x2 atau PiP.
- Tambahkan
- Ekstraktor:
- Mengurai metadata dari file MP4 yang terfragmentasi (#2084).
- JPEG: Mendukung foto motion (foto dengan gambar bergerak) yang tidak memiliki segmen Exif di awal (#2552).
- Menambahkan dukungan untuk pencarian di MP4 terfragmentasi dengan beberapa atom
sidx. Perilaku ini dapat diaktifkan menggunakan flagFLAG_MERGE_FRAGMENTED_SIDXdiFragmentedMp4Extractor(#9373). - Mengabaikan tabel pencarian kosong dalam file FLAC (termasuk yang hanya berisi titik pencarian placeholder), dan beralih ke pencarian biner jika durasi file diketahui (#2327).
- Memperbaiki penguraian unit H.265 SEI untuk sepenuhnya melewati jenis SEI yang tidak dikenali (#2456).
- Memperbarui
WavExtractoragar 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 memantulkan video. Hal ini memastikan bahwa video yang direfleksikan yang diambil oleh kamera depan iPhone ditampilkan dengan benar, tetapi direfleksikan secara tidak benar di sumbu y (#2012). - MP3: Menggunakan durasi dan ukuran data dari Xing, VBRI, dan metadata kecepatan bit variabel serupa yang tidak dapat dicari saat beralih ke pencarian kecepatan bit konstan karena
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Audio:
- Memperbaiki bug saat
AnalyticsListener.onAudioPositionAdvancingtidak dipanggil ketika 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(). - Mengizinkan upmixing/downmixing daya konstan di DefaultAudioMixer.
- Membuat
ChannelMappingAudioProcessor,TrimmingAudioProcessor, danToFloatPcmAudioProcessormenjadi publik (#2339). - Gunakan
AudioTrack#getUnderrunCount()diAudioTrackPositionTrackeruntuk mendeteksi underrun diDefaultAudioSink, bukan estimasi upaya terbaik. - Meningkatkan penghalusan stempel waktu audio untuk pergeseran posisi yang tidak terduga dari perangkat output audio.
- Memperbaiki bug saat sinkronisasi A/V rusak selama 10 detik pertama setelah melanjutkan dari jeda saat terhubung ke perangkat Bluetooth.
- Memperbaiki bug yang menyebabkan
AnalyticsListener.onAudioPositionAdvancingtidak melaporkan waktu saat audio mulai dimajukan, tetapi waktu pengukuran pertama. - Memperbaiki pemulihan ke audio multisaluran setelah penggantian ke audio stereo di beberapa perangkat (#2258).
- Memperbaiki bug saat
- Video:
- Memperluas solusi platform yang terlepas ke perangkat "lenovo" dan "motorola" (#2059).
- Meningkatkan kelancaran rilis frame video saat startup ketika sampel audio tidak dimulai tepat pada posisi yang diminta.
- Memperluas solusi platform 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 trek tambahan ditandai sebagaiEXCEEDS_CAPABILITIES. - Memperbaiki error pemutaran Widevine VP9 di beberapa perangkat (#2408).
- Teks:
- Menambahkan dukungan untuk trek VobSub dalam file MP4 (#2510).
- Memperbaiki penghentian 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 kacau saat memutar streaming H.262 yang berisi frame B (#2372).
- Menambahkan dukungan untuk subtitel SSA dengan
CodecId = S_TEXT/SSAdalam file Matroska. Sebelumnya,MatroskaExtractorhanya mendukungCodecId = S_TEXT/ASSyang dimaksudkan untuk merepresentasikan varian 'lanjutan' (v4+) dari subtitle SubStation Alpha (tetapi logika penguraian ExoPlayer sama untuk kedua varian) (#2384). - Menambahkan dukungan untuk properti
layerdalam file subtitel SubStation Alpha (SSA) yang digunakan untuk menentukan urutan z tanda saat lebih dari satu tanda ditampilkan di layar secara bersamaan (#2124).
- Metadata:
- Menambahkan dukungan untuk mengambil durasi media dan
TimelinekeMetadataRetrieverdan memigrasikannya ke APIAutoCloseableberbasis instance. 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 error aplikasi 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. - Menyelaraskan ukuran output bitmap maksimum yang digunakan di
CompositionPlayerdengan yang sudah digunakan diTransformer(artinya,CompositionPlayertidak mempertimbangkan ukuran tampilan saat mendekode bitmap, tidak sepertiExoPlayer).
- Batasi bitmap yang didekode ke ukuran tampilan di
- DRM:
- Menambahkan overload baru
OfflineLicenseHelper.newWidevineInstanceyang menerimaMediaItem.DrmConfigurationagar header permintaan HTTP dapat diterapkan dengan benar (#2169).
- Menambahkan overload 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 flag sampel yang benar tidak ditetapkan untuk sampel audio di MP4 terfragmentasi.
writeSampleData()API kini menggunakan classBufferInfokhusus muxer, bukanMediaCodec.BufferInfo.- Tambahkan
Muxer.Factory#supportsWritingNegativeTimestampsInEditListyang secara default ditetapkan ke false.
- Ekstensi IMA:
- Memperbaiki bug yang menyebabkan 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 pihak ketiga yang tidak memiliki hak istimewa diabaikan.
- Menghapus pemeriksaan 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 pemain diperlakukan secara salah sebagai pengecualian kustom persisten. Hal ini mencegah aplikasi melakukan pemulihan.
- Memperbaiki bug yang menyebabkan 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 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, lalu thread utama menyebabkanIllegalStateException(#2265). - Jangan otomatis menampilkan notifikasi jika pemain 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 pencarian dalam live stream di
MediaControllerdapat menyebabkanIllegalArgumentException. - Untuk live stream, berhenti memublikasikan posisi pemutaran dan kemampuan untuk men-seek 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 saat mengirim tindakan kustom, hasil penelusuran, atau permintaan getItem
menyebabkan aplikasi sesi lama error dengan
ClassNotFoundException. - Memperbaiki bug yang menyebabkan
MediaItem.LocalConfiguration.uridibagikan keMediaMetadatasesi platform. Untuk sengaja membagikan URI 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 jeda antara penetapan status tombol awal dan pengamatan perubahan status (misalnya, bentuk ikon atau diaktifkan). Setiap perubahan yang dilakukan pada Pemutar di luar periode pengamatan kini diambil (#2313).
- Tambahkan holder status dan composable ke modul
media3-ui-composeuntukSeekBackButtonStatedanSeekForwardButtonState. - Menambahkan dukungan untuk mode scrubbing ExoPlayer ke
PlayerControlView. Jika diaktifkan, tindakan ini akan menempatkan pemutar 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 posisi awal dan akhir media berbasis waktu yang harus dicakup oleh download.DownloadRequestyang ditampilkan membawa rentang byte yang di-resolve, yang dapat digunakan untuk membuatProgressiveDownloaderdan mendownload konten yang sesuai. - Tambahkan
DownloadHelper.Factoryyang menggantikan metodeDownloadHelper.forMediaItem()statis. - Menambahkan
Factoryuntuk implementasiSegmentDownloader. - 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 diselesaikan, yang dapat digunakan untuk membuatSegmentDownloaderkonkret 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 saat tidak ada potongan yang tersedia di buffer #2598. - Memperbaiki bug saat perubahan pemilihan trek setelah memuat bagian latensi rendah dan petunjuk pramuat dapat menyebabkan pemutaran macet atau berhenti (#2299).
- Mencegah pemuatan ulang yang berlebihan dengan menunggu setengah durasi target saat
CAN-BLOCK-RELOAD=YEStidak dipatuhi oleh server (#2317). - Memperbaiki bug yang menyebabkan pemutaran terhenti saat memulai streaming interstisial sebelum mid-roll dan resolusi daftar aset dicoba untuk iklan yang salah (#2558).
- Memperbaiki penguraian playlist untuk menerima
\f(penggantian halaman) dalam nilai atribut string yang dikutip (#2420). - Mendukung pembaruan interstisial dengan ID yang sama (#2427).
- Memperbaiki bug yang menyebabkan error pemuatan playlist terkadang tidak disebarkan setelah live stream kehabisan segmen untuk dimuat (#2401https://github.com/androidx/media/issues/2401).
- Mengelompokkan rendition subtitel menurut tag NAME, mirip dengan cara pengelompokan rendition audio yang sudah ada (#1666).
- Mendukung X-ASSET-LIST dan live stream dengan
HlsInterstitialsAdsLoader.
- Memperbaiki bug saat
- Ekstensi DASH:
- Memperbaiki masalah saat set adaptasi trick-play digabungkan dengan set adaptasi utamanya untuk membentuk
TrackGroupyang tidak valid (#2148). - Memperbaiki bug saat mempersingkat durasi periode DASH dapat memunculkan pengecualian saat 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 trick-play 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 seperti yang disediakan 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 dekoder audio (#2258).
- Memperbaiki bug saat
- Ektensi Cast:
- Utilitas Pengujian:
- Tambahkan
advance(player).untilPositionAtLeastdanuntilMediaItemIndexkeTestPlayerRunHelperuntuk memajukan pemutar hingga posisi yang ditentukan 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 dekoder 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 'yang lebih baru' daripada 1.7.0, yang merupakan rilis alfa yang tidak sengaja ditandai sebagai stabil (lihat di bawah).
Versi 1.7.0
16 Mei 2025
Rilis ini seharusnya adalah 1.7.0-alpha01, tetapi tidak sengaja diberi tag
1.7.0 (yaitu stabil) di maven.google.com. Jangan gunakan rilis ini. Tetap gunakan
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.
- Library Umum:
- Menambahkan metode
PlaybackParameters.withPitch(float)untuk menyalinPlaybackParametersdengan nilaipitchbaru dengan mudah (#2257).
- Menambahkan metode
- ExoPlayer:
- Memperbaiki masalah saat transisi item media gagal karena error perender 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 kosong atau null (#2267).
- Ekstraktor:
- MP4: Mengurai
alternate_groupdari kotaktkhddan mengeksposnya sebagai entriMp4AlternateGroupDatadiFormat.metadatasetiap trek (#2242).
- MP4: Mengurai
- Audio:
- Memperbaiki masalah offload yang menyebabkan posisi mungkin macet saat memutar playlist konten pendek (#1920).
- Sesi:
- Menurunkan waktu tunggu agregasi untuk callback
MediaSessionplatform dari 500 menjadi 100 milidetik dan menambahkan penyetel eksperimental untuk memungkinkan aplikasi mengonfigurasi nilai ini. - Memperbaiki masalah saat notifikasi muncul kembali setelah ditutup oleh pengguna (#2302).
- Memperbaiki bug yang menyebabkan sesi menampilkan linimasa satu item saat
pemutar yang digabungkan sebenarnya kosong. Hal ini terjadi saat pemutar yang digabungkan
tidak memiliki
COMMAND_GET_TIMELINEyang tersedia, sedangkanCOMMAND_GET_CURRENT_MEDIA_ITEMtersedia dan pemutar yang digabungkan kosong (#2320). - Memperbaiki bug saat panggilan
MediaSessionService.setMediaNotificationProviderdiabaikan secara otomatis setelah interaksi lain dengan layanan sepertisetForegroundServiceTimeoutMs(#2305).
- Menurunkan waktu tunggu agregasi untuk callback
- UI:
- Aktifkan
PlayerSurfaceagar berfungsi denganExoPlayer.setVideoEffectsdanCompositionPlayer. - Memperbaiki bug yang menyebabkan
PlayerSurfacetidak dapat dikomposisi ulang denganPlayerbaru.
- Aktifkan
- Ekstensi HLS:
- Memperbaiki masalah saat durasi potongan tidak ditetapkan di
CmcdDatauntuk media HLS, yang menyebabkan kegagalan pernyataan saat memproses segmen media terenkripsi (#2312).
- Memperbaiki masalah saat durasi potongan 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.
- Library Umum:
- Menambahkan
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 untuk memudahkan penanganan update di class lain (#2128).
- Menambahkan
- ExoPlayer:
- Menambahkan
MediaExtractorCompat, class baru yang menyediakan fitur yang setara denganMediaExtractorplatform. - Menambahkan dukungan pra-pemanasan 'ExoPlayer' eksperimental untuk pemutaran menggunakan
MediaCodecVideoRenderer. Anda dapat mengonfigurasiDefaultRenderersFactorymelaluiexperimentalSetEnableMediaCodecVideoRendererPrewarminguntuk menyediakanMediaCodecVideoRenderersekunder keExoPlayer. Jika diaktifkan,ExoPlayerakan melakukan pra-pemrosesan video item media berturut-turut selama pemutaran untuk mengurangi latensi transisi item media. - Kurangi nilai default untuk
bufferForPlaybackMsdanbufferForPlaybackAfterRebufferMsdiDefaultLoadControlmenjadi masing-masing 1.000 dan 2.000 md. - Lakukan inisialisasi
DeviceInfodan volume perangkat secara asinkron (jika diaktifkan menggunakansetDeviceVolumeControlEnabled). Nilai ini tidak langsung tersedia setelahExoPlayer.Builder.build(), danPlayer.Listenermemberi tahu perubahan melaluionDeviceInfoChangeddanonDeviceVolumeChanged. - ID sesi audio awal tidak lagi langsung tersedia setelah
membuat pemutar. Anda dapat menggunakan
AnalyticsListener.onAudioSessionIdChangeduntuk memproses 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 eksplisit dapat
dinyatakan dengan
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Tambahkan parameter
selectedAudioLanguageke metodeDefaultTrackSelector.selectVideoTrack(). - Menambahkan parameter
retryCountkeMediaSourceEventListener.onLoadStarteddan metodeMediaSourceEventListener.EventDispatcheryang sesuai. - Memperbaiki bug saat item playlist atau periode dalam streaming DASH multi-periode dengan durasi yang tidak sesuai dengan konten sebenarnya dapat menyebabkan frame terhenti di akhir item (#1698).
- Pindahkan
BasePreloadManager.ListenerkePreloadManagerListenertingkat teratas. RenderersFactory.createSecondaryRendererdapat diimplementasikan untuk menyediakan perender sekunder untuk prapenyiapan. Pra-pemanasan memungkinkan transisi item media yang lebih cepat selama pemutaran.- Mengaktifkan pengiriman
CmcdDatauntuk permintaan manifes dalam format streaming adaptif DASH, HLS, dan SmoothStreaming (#1951). - Menyediakan
MediaCodecInfocodec yang akan diinisialisasi diMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Ubah
AdsMediaSourceuntuk memungkinkanAdPlaybackStatesberkembang dengan menambahkan grup iklan. Modifikasi yang tidak valid akan terdeteksi dan memunculkan pengecualian. - Memperbaiki masalah saat frame tambahan khusus dekode dapat ditampilkan secara berurutan dengan cepat saat beralih ke media konten setelah iklan mid-roll.
- Buat
DefaultRenderersFactorymenambahkan dua instanceMetadataRendereragar aplikasi dapat 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 pemangkasan di media yang tidak dapat di-seek. - Memperbaiki bug saat pencarian dengan pra-pemanasan dapat memblokir transisi item media berikutnya.
- Memperbaiki bug yang menyebabkan
ExoPlayer.isLoading()tetaptruesaat telah bertransisi keSTATE_IDLEatauSTATE_ENDED(#2133). - Menambahkan
lastRebufferRealtimeMskeLoadControl.Parameter(#2113).
- Menambahkan
- Transformator:
- Menambahkan dukungan untuk transmuxing ke format alternatif yang kompatibel dengan versi lama.
- Menambahkan dukungan untuk transcoding dan transmuxing format Dolby Vision (profil 8).
- Mengupdate 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 informasi 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. - Pindahkan antarmuka
Muxerdarimedia3-muxerkemedia3-transformer. - Menambahkan
MediaProjectionAssetLoader, yang menyediakan media dariMediaProjectionuntuk perekaman layar, dan menambahkan 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 kecepatan bit konstan, yang header streaming-nya menyimpan jumlah byte, bukan jumlah potongan.
- 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-sinkronisasi tanpa frame sinkronisasi sebelumnya (#2062). - Memperbaiki masalah saat streaming TS dapat macet di beberapa perangkat (#2069).
- FLAC: Menambahkan dukungan untuk file FLAC 32-bit. Sebelumnya, video ini akan gagal
diputar dengan
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio:
- Memperbaiki
onAudioPositionAdvancingagar dipanggil saat pemutaran dilanjutkan (sebelumnya dipanggil saat pemutaran dijeda). - Jangan mengabaikan
SonicAudioProcessorsaatSpeedChangingAudioProcessordikonfigurasi dengan parameter default. - Memperbaiki underflow di
Sonic#getOutputSize()yang dapat menyebabkanDefaultAudioSinkterhenti. - Perbaiki
MediaCodecAudioRenderer.getDurationToProgressUs()danDecoderAudioRenderer.getDurationToProgressUs()agar pencarian dapat mereset durasi yang diberikan dengan benar. - Menjadikan
androidx.media3.common.audio.SonicAudioProcessorfinal. - Menambahkan dukungan untuk PCM float ke
ChannelMappingAudioProcessordanTrimmingAudioProcessor.
- Memperbaiki
- Video:
- Mengubah
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacemenjadi dilindungi sehingga aplikasi dapat mengganti untuk memblokir penggunaan platform placeholder (#1905). - Menambahkan penguraian dependensi sampel AV1
ExoPlayereksperimental untuk mempercepat pencarian. Aktifkan dengan APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesbaru. - Menambahkan API
ExoPlayereksperimental untuk menghapus buffer input dekoderMediaCodecVideoRendereryang terlambat dan tidak diperlukan. 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 platform terpisah untuk menghindari kedipan layar (#2059).
- Mengubah
- Teks:
- Menambahkan dukungan untuk subtitel VobSub (#8260).
- Berhenti memuat semua file subtitel yang dikonfigurasi dengan
MediaItem.Builder.setSubtitleConfigurations, dan hanya muat satu jika dipilih oleh pemilihan trek (#1721). - TTML: Menambahkan dukungan untuk mereferensikan
tts:origindantts:extentmenggunakanstyle(#2953). - Batasi stempel waktu WebVTT dan SubRip menjadi tepat 3 tempat desimal. Sebelumnya, kami salah mengurai jumlah tempat desimal, tetapi selalu mengasumsikan nilainya dalam milidetik, sehingga menyebabkan stempel waktu yang salah (#1997).
- Memperbaiki pemutaran yang berhenti saat playlist berisi item yang dipotong dengan teks CEA-608 atau CEA-708.
- Memperbaiki
IllegalStateExceptionsaat file SSA berisi tanda dengan durasi nol (waktu mulai dan berakhir sama) (#2052). - Menyembunyikan (dan mencatat) error penguraian 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 akhiran baris CR (#2167).
- DRM:
- Memperbaiki error
MediaCodec$CryptoException: Operation not supported in this configurationsaat memutar konten ClearKey di perangkat API < 27 (#1732).
- Memperbaiki error
- Efek:
- Memindahkan fungsi
OverlaySettingskeStaticOverlaySettings.OverlaySettingsdapat dibuat subclass-nya 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 trekint, bukanTrackToken.Mp4MuxerdanFragmentedMp4Muxertidak lagi mengimplementasikan antarmukaMuxer.- Menonaktifkan 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
waktu tunggu ini tanpa berisiko terkena 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. - Membuat notifikasi tetap terlihat saat pemutaran mengalami error atau berhenti. Notifikasi hanya akan dihapus jika playlist dihapus atau pemutar dirilis.
- Meningkatkan penanganan tindakan MediaSession platform Android ACTION_PLAY dan ACTION_PAUSE untuk hanya menetapkan salah satunya sesuai dengan perintah yang tersedia dan juga menerima jika hanya salah satunya yang ditetapkan.
- Menambahkan
Contextsebagai parameter keMediaButtonReceiver.shouldStartForegroundService(#1887). - Memperbaiki bug saat memanggil metode
PlayerpadaMediaControlleryang terhubung ke sesi lama akan 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
waktu tunggu ini tanpa berisiko terkena pembatasan layanan latar depan di berbagai
perangkat. Perhatikan bahwa hanya memanggil
- UI:
- Tambahkan holder status dan composable ke modul
media3-ui-composeuntukPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonState, danPlaybackSpeedState.
- Tambahkan holder status dan composable ke modul
- Download:
- Memperbaiki bug di
CacheWriteryang menyebabkan sumber data tetap terbuka dan area cache terkunci jika sumber data menampilkanExceptionselainIOException(#9760).
- Memperbaiki bug di
- Ekstensi HLS:
- Tambahkan versi pertama
HlsInterstitialsAdsLoader. Loader 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. - Mengurai 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 periodenya berisi sampel media di luar durasi periode yang dideklarasikan (#1698).
- Memperbaiki masalah saat kumpulan adaptasi yang ditandai dengan
adaptation-set-switching, tetapi bahasa atau flag 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:
- Hubungkan instance
AudioSinkdanAudioRendererEventListenerkustom keMidiRenderer.
- Hubungkan instance
- Ektensi Cast:
- Meningkatkan dependensi
play-services-cast-frameworkke 21.5.0 untuk memperbaiki errorFLAG_MUTABLEdi aplikasi yang menargetkan API 34+ pada perangkat yang menginstal layanan Google Play, tetapi dinonaktifkan (#2178).
- Meningkatkan dependensi
- Aplikasi demo:
- Perluas
demo-composedengan tombol tambahan dan sempurnakan integrasiPlayerSurfacedengan dukungan penskalaan dan shutter.
- 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().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().- Menghapus
metode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). GunakanPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)dan teruskan(MediaSession.Token) compatToken.getToken()sebagai gantinya.
- Konstruktor
- 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 menghentikan pemutaran lebih awal saat daftar isi frame
VBRItidak mencakup semua data MP3 dalam file (#1904).
- MP3: Jangan menghentikan pemutaran lebih awal saat daftar isi frame
- Video:
- Rollback penggunaan nilai rasio aspek piksel yang disediakan
MediaCodecAdaptersaat diberikan saat memprosesonOutputFormatChanged(#1371).
- Rollback penggunaan nilai rasio aspek piksel yang disediakan
- Teks:
- Memperbaiki bug di
ReplacingCuesResolver.discardCuesBeforeTimeUsyang menyebabkan isyarat yang aktif ditimeUs(dimulai sebelumnya, tetapi belum berakhir) salah dibuang (#1939).
- Memperbaiki bug di
- Metadata:
- Mengekstrak penomoran disk/lagu dan genre dari komentar Vorbis ke
MediaMetadata(#1958).
- Mengekstrak penomoran disk/lagu dan genre dari komentar Vorbis ke
Versi 1.5.0
27 November 2024
androidx.media3:media3-*:1.5.0 dirilis. Versi 1.5.0 berisi commit ini.
- Library Umum:
- Menambahkan
ForwardingSimpleBasePlayeryang memungkinkan penerusan ke pemutar lain dengan penyesuaian kecil sekaligus memastikan konsistensi penuh dan penanganan pemroses (#1183). - Ganti metode
SimpleBasePlayer.State.playlistdengangetPlaylist(). - Tambahkan penggantian untuk
SimpleBasePlayer.State.Builder.setPlaylist()guna menentukanTimelinesertaTracksdanMetadatasaat ini secara langsung, bukan membuat struktur playlist. - Tingkatkan
minSdkke 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 Common - Tambahkan fungsi ekstensi penangguhan
Player.listenuntuk memutar coroutine guna memprosesPlayer.Eventske librarymedia3-common-ktx. - Menghapus anotasi
@DoNotInlinedari class dalam yang tidak sejalan secara manual, yang dirancang untuk menghindari kegagalan verifikasi class runtime. Versi terbaru R8 kini otomatis melakukan out-of-line panggilan seperti ini untuk menghindari kegagalan runtime (sehingga out-of-line 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 penyingkatan/obfuskasi yang setara dengan R8 melakukan proses out-of-lining otomatis yang serupa untuk menghindari kegagalan verifikasi class runtime. Perubahan ini sudah dilakukan di library AndroidX lainnya.
- Menambahkan
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()kini dapat dipanggil untuk setiap item media. Sebelumnya, callback ini tidak dipanggil untuk item pertama. GunakanMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()untuk mengaktifkannya.- Menambahkan
PreloadMediaSource.PreloadControl.onPreloadErroruntuk mengizinkan implementasiPreloadMediaSource.PreloadControlmengambil tindakan saat terjadi error. - Tambahkan
BasePreloadManager.Listeneruntuk menyebarkan peristiwa pramuat ke aplikasi. - Mengizinkan perubahan waktu tunggu klien SNTP dan mencoba kembali alamat alternatif saat waktu tunggu habis (#1540).
- Hapus
MediaCodecAdapter.Configuration.flagskarena kolom selalu bernilai nol. - Mengizinkan pengguna memilih speaker bawaan untuk pemutaran di Wear OS API 35+ (jika perangkat mengiklankan dukungan untuk 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 perender individual mengizinkan pemutaran siap. - Memperbaiki
MediaCodec.CryptoExceptionyang terkadang dilaporkan sebagai "error runtime yang tidak terduga" saatMediaCodecdioperasikan dalam mode asinkron (perilaku default di API 31+). - Teruskan
bufferedDurationUs, bukanbufferedPositionUs, denganPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Juga mengubahDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSmenjadiDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, aplikasi kemudian perlu meneruskan nilai yang mewakili durasi tertentu dari posisi mulai default yang sumber medianya harus dipramuat dengan IntDef ini, bukan posisi. - Menambahkan implementasi
ForwardingRendereryang meneruskan semua panggilan metode ke perender lain (1703). - Menambahkan pramuat playlist untuk item berikutnya dalam playlist. Aplikasi dapat
mengaktifkan pramuat dengan memanggil
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)sebagaimana mestinya. Secara default, pramuat dinonaktifkan. Jika diaktifkan dan agar tidak mengganggu pemutaran,DefaultLoadControlmembatasi pramuat untuk memulai dan melanjutkan hanya saat pemutar tidak memuat untuk pemutaran. Aplikasi dapat mengubah perilaku ini dengan menerapkanLoadControl.shouldContinuePreloading()sebagaimana mestinya (seperti saat mengganti metode ini diDefaultLoadControl). Implementasi defaultLoadControlmenonaktifkan pramuat jika aplikasi menggunakan implementasi kustomLoadControl. - Menambahkan metode
MediaSourceEventListener.EventDispatcher.dispatchEvent()untuk memungkinkan pemanggilan peristiwa pemroses subclass (1736). - Tambahkan
DefaultPreloadManager.Builderyang membangun instanceDefaultPreloadManagerdanExoPlayerdengan konfigurasi bersama yang konsisten. - Hapus parameter
Renderer[]dariLoadControl.onTracksSelected()karena implementasiDefaultLoadControldapat mengambil jenis streaming dariExoTrackSelection[]. - Menghentikan penggunaan
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])dan menandai metode sebagai final untuk mencegah penggantian. Sebagai gantinya,DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])baru harus digunakan. - Laporkan peristiwa
MediaSourceEventListenerdari sumber sekunder diMergingMediaSource. Hal ini akan menyebabkan peristiwa pemuatan dimulai/error/dibatalkan/selesai dilaporkan untuk subtitel yang di-sideload (yang ditambahkan denganMediaItem.LocalConfiguration.subtitleConfigurations), yang mungkin muncul sebagai peristiwa pemuatan duplikat yang dikeluarkan dariAnalyticsListener. - Mencegah error subtitel & metadata menghentikan pemutaran sepenuhnya.
Sebagai gantinya, trek yang bermasalah akan dinonaktifkan dan pemutaran trek yang tersisa
akan dilanjutkan
(#1722).
- Dalam penanganan subtitel baru (selama ekstraksi), error penguraian (misalnya, data subtitel tidak valid) dan error pemuatan (misalnya, HTTP 404) yang terkait akan ditampilkan melalui callback
onLoadError. - Dalam penanganan subtitel lama (selama rendering), hanya error pemuatan terkait yang ditampilkan melalui callback
onLoadError, sedangkan error penguraian diabaikan secara otomatis (ini adalah perilaku yang sudah ada sebelumnya).
- Dalam penanganan subtitel baru (selama ekstraksi), error penguraian (misalnya, data subtitel tidak valid) dan error pemuatan (misalnya, HTTP 404) yang terkait akan ditampilkan melalui callback
- Memperbaiki bug saat item playlist atau periode dalam streaming DASH multi-periode dengan durasi yang tidak sesuai dengan konten sebenarnya dapat menyebabkan frame terhenti di akhir item (#1698).
- Menambahkan setter ke
SntpClientuntuk menetapkan waktu berlalu maksimum sejak update terakhir setelah klien diinisialisasi ulang (#1794).
- Transformator:
- Tambahkan
SurfaceAssetLoader, yang mendukung pengantrean data video ke Transformer melaluiSurface. ImageAssetLoadermelaporkan input yang tidak didukung melaluiAssetLoader.onError, bukan menampilkanIllegalStateException.- Wajibkan penetapan durasi gambar menggunakan
MediaItem.Builder.setImageDurationMsuntuk ekspor gambar. - Menambahkan dukungan ekspor untuk celah dalam urutan EditedMediaItem audio.
- Tambahkan
- Pemilihan Trek:
DefaultTrackSelector: Lebih memilih audio berbasis objek daripada audio berbasis saluran jika faktor lainnya sama.
- Ekstraktor:
- Mengizinkan
Mp4ExtractordanFragmentedMp4Extractormengidentifikasi sampel H264 yang tidak digunakan sebagai referensi oleh sampel berikutnya. - Menambahkan opsi untuk mengaktifkan pencarian berbasis indeks di
AmrExtractor. - Memperlakukan 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 berhenti
diputar di akhir data MP3, bukan gagal dengan
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Memperbaiki penanganan sampel preroll untuk posisi awal media non-keyframe saat memproses daftar edit di file MP4 (#1659).
- Peningkatan penghitungan kecepatan frame dengan menggunakan durasi media dari kotak
mdhddiMp4ExtractordanFragmentedMp4Extractor(#1531). - Memperbaiki penskalaan
media_timeyang salah dalam daftar edit MP4. Meskipunsegment_durationsudah diskalakan dengan benar menggunakan skala waktu film,media_timekini diskalakan dengan benar menggunakan skala waktu trek, seperti yang ditentukan oleh standar format MP4 (#1792). - Menangani frame yang tidak berurutan dalam penghitungan
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).
- Mengizinkan
- DataSource:
- Mengupdate
HttpEngineDataSourceuntuk mengizinkan penggunaan mulai dari ekstensi 7 versi S, bukan level API 34 (#1262). DataSourceContractTest: Menyatakan bahwaDataSource.getUri()menampilkan URI yang di-resolve (seperti yang didokumentasikan). Jika ini berbeda dengan URI yang diminta, pengujian dapat menunjukkan hal ini menggunakan metodeDataSourceContractTest.TestResource.Builder.setResolvedUri()baru.DataSourceContractTest: Menegaskan bahwaDataSource.getUri()dangetResponseHeaders()menampilkan nilai 'open' setelah panggilan yang gagal keopen()(karena resource 'tidak ditemukan') dan sebelum panggilanclose()berikutnya.- Mengganti
DataSourceContractTest.getNotFoundResources()memungkinkan sub-class pengujian menyediakan beberapa resource 'tidak ditemukan', dan menyediakan header yang diharapkan juga. Hal ini memungkinkan untuk membedakan antara HTTP 404 (dengan header) dan "server tidak ditemukan" (tanpa header).
- Mengganti
- Mengupdate
- Audio:
- Konfigurasikan metadata kenyaringan CTA-2075 secara otomatis pada codec jika ada di media.
- Memastikan penurunan volume yang lancar saat mencari.
- Memperbaiki suara letupan yang mungkin terjadi selama pencarian.
- Memperbaiki akumulasi error pemotongan untuk algoritma peregangan waktu/pergeseran nada Sonic.
- Memperbaiki bug di
SpeedChangingAudioProcessoryang menyebabkan frame output terputus.
- Video:
MediaCodecVideoRenderermenghindari pendekodean sampel yang tidak dirender atau digunakan sebagai referensi oleh sampel lain.- Pada API 35 dan yang lebih tinggi,
MediaCodecAdapterkini dapat menerimanullSurfacediconfiguredan panggilan ke metode barudetachOutputSurfaceuntuk menghapusSurfaceyang ditetapkan sebelumnya jika codec mendukung hal ini (MediaCodecInfo.detachedSurfaceSupported). - Menggunakan nilai rasio aspek piksel yang disediakan
MediaCodecAdapterjika diberikan 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). - Memastikan WebVTT di HLS dengan stempel waktu subtitel yang sangat besar (yang melebihi kapasitas
long64-bit saat direpresentasikan sebagai mikrodetik dan dikalikan dengan timebase MPEG90,000) ditampilkan (#1763). - Mendukung subtitel CEA-608 dalam konten Dolby Vision (#1820).
- Memperbaiki pemutaran yang berhenti di streaming multi-periode DASH saat subtitel CEA-608 diaktifkan (#1863).
- Menambahkan
- Metadata:
- Tetapkan jenis
C.TRACK_TYPE_METADATAke trek yang berisi konten icy atau vnd.dvb.ait.
- Tetapkan jenis
- Gambar:
- Tambahkan
ExternallyLoadedImageDecoderuntuk integrasi yang disederhanakan 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 penskalaanSurfaceTextureminor.SurfaceTexturedapat menyertakan penskalaan kecil yang memotong batas 1-texel di sekitar tepi buffer yang dipangkas. Hal ini sekarang ditangani sehingga output lebih mendekati yang diharapkan. - Percepat
DefaultVideoFrameProcessor.queueInputBitmap(). Hasilnya, mengekspor gambar ke video denganTransformerakan lebih cepat.
- Menambahkan solusi
- Ekstensi IMA:
- Memperbaiki bug ketika menghapus playlist dapat menyebabkan
ArrayIndexOutOfBoundsExceptiondiImaServerSideAdInsertionMediaSource. - Memperbaiki bug saat streaming DAI yang disisipkan di sisi server tanpa pre-roll dapat
menyebabkan
ArrayIndexOutOfBoundsExceptionsaat diputar setelah mid-roll terakhir (#1741).
- Memperbaiki bug ketika menghapus playlist dapat menyebabkan
- Sesi:
- Tambahkan
MediaButtonReceiver.shouldStartForegroundService(Intent)untuk mengizinkan aplikasi menyembunyikan perintah putar yang masuk untuk melanjutkan pemutaran dengan mengganti metode ini. Secara default, layanan selalu dimulai dan pemutaran tidak dapat disembunyikan tanpa sistem mengalami error pada layanan denganForegroundServiceDidNotStartInTimeException(#1528). - Memperbaiki bug yang menyebabkan perintah kustom yang dikirim dari
MediaBrowserdikirim keMediaSessionCompat.Callback, bukan varianMediaBrowserServiceCompatdari metode saat terhubung ke layanan lama. Hal ini mencegahMediaBrowsermenerima nilai yang ditampilkan 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. Tindakan ini akan menambahkan Media3 API untuk hal yang
sebelumnya dikenal sebagai
Custom browse actionsdengan library lama denganMediaBrowserCompat. Perhatikan bahwa dengan Media3, tombol perintah 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 memintaplay(). - 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 berlanggananparentid. - Meningkatkan perilaku interoperabilitas, sehingga browser Media3 yang
terhubung ke
MediaBrowserServicelama tidak meminta turunanparentIddua kali saat berlangganan ke induk.
- Tambahkan
- UI:
- Membuat video yang direntangkan/dipangkas dalam
solusi
PlayerView-in-Compose-AndroidViewdiikutsertakan, karena masalah dengan transisi bersama berbasis XML. Aplikasi yang menggunakanPlayerViewdi dalamAndroidViewharus memanggilPlayerView.setEnableComposeSurfaceSyncWorkarounduntuk mengaktifkan (#1237, #1594). - Menambahkan
setFullscreenButtonStatekePlayerViewuntuk mengizinkan update ikon tombol layar penuh sesuai permintaan, yaitu out-of-band dan tidak reaktif terhadap interaksi klik (#1590, #184). - Memperbaiki bug saat pilihan "None" (Tidak ada) dalam pilihan teks tidak berfungsi jika ada preferensi pilihan trek teks yang ditentukan aplikasi.
- Membuat video yang direntangkan/dipangkas dalam
solusi
- Ekstensi DASH:
- Menambahkan dukungan untuk periode yang dimulai di tengah segmen (#1440).
- Ekstensi Smooth Streaming:
- Memperbaiki error
Bad magic number for Bundlesaat memutar streaming SmoothStreaming dengan trek teks (#1779).
- Memperbaiki error
- Ekstensi RTSP:
- Ekstensi Decoder (FFmpeg, VP9, AV1, dll.):
- Menambahkan modul decoder 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).
- Menambahkan modul decoder IAMF, yang memberikan dukungan untuk pemutaran file MP4
yang berisi trek IAMF menggunakan library native libiamf untuk
menyintesis audio.
- Ekstensi Cast:
- Berhenti membersihkan linimasa setelah CastSession terputus, sehingga aplikasi pengirim dapat melanjutkan pemutaran secara lokal setelah koneksi terputus.
- Isi
DeviceInfoCastPlayer saatContextdiberikan. Hal ini memungkinkan penautanMediaSessionkeRoutingSession, yang diperlukan untuk mengintegrasikan Pengalih Output (#1056).
- Utilitas Pengujian:
DataSourceContractTestkini menyertakan pengujian untuk memverifikasi:- Streaming input
read positiondiperbarui. - Buffer output
offsetditerapkan dengan benar.
- Streaming input
- Aplikasi demo
- Mengatasi kebocoran memori di aplikasi berdurasi singkat 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 bagian 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 penanganan yang salah terhadap kasus waktu mulai output yang diminta lebih besar dari atau sama dengan waktu peristiwa 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 implementasi metodeMediaDrm.requiresSecureDecoderframework yang 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). - Menangani
KEYCODE_HEADSETHOOKsebagai perintah 'putar' diMediaButtonReceiversaat memutuskan apakah akan mengabaikannya untuk menghindariForegroundServiceDidNotStartInTimeException(#1581).
- Mengubah ketuk dua kali
- Ekstensi RTSP:
- Melewati 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.
- Library Umum:
- Meneruskan panggilan pencarian yang dianggap tidak beroperasi ke metode
BasePlayer.seekTo()danSimpleBasePlayer.handleSeek()yang dilindungi, bukan mengabaikannya. Jika menerapkan metode ini di pemutar kustom, Anda mungkin perlu menangani panggilan tambahan ini denganmediaItemIndex == C.INDEX_UNSET. - Menghapus dependensi kompilasi pada desugaring 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.
- Meneruskan panggilan pencarian yang dianggap tidak beroperasi ke metode
- ExoPlayer:
- Tambahkan
BasePreloadManageryang mengoordinasikan pramuat untuk beberapa sumber berdasarkan prioritas yang ditentukan olehrankingData-nya. Penyesuaian dapat dilakukan dengan memperluas class ini. TambahkanDefaultPreloadManageryang menggunakanPreloadMediaSourceuntuk melakukan pramuat sampel media sumber ke dalam memori, dan menggunakan bilangan bulatrankingDatayang menunjukkan indeks item di UI. - Menambahkan
PlayerIdke sebagian besar metodeLoadControluntuk memungkinkan implementasiLoadControlmendukung beberapa pemain. - Menghapus
Buffer.isDecodeOnly()danC.BUFFER_FLAG_DECODE_ONLY. Tidak perlu menetapkan flag ini karena perender dan dekoder akan memutuskan untuk melewati buffer berdasarkan stempel waktu. ImplementasiRendererkustom harus memeriksa apakah waktu buffering minimalBaseRenderer.getLastResetPositionUs()untuk memutuskan apakah sampel harus ditampilkan. ImplementasiSimpleDecoderkustom dapat memeriksaisAtLeastOutputStartTimeUs()jika diperlukan atau menandai buffer lain denganDecoderOutputBuffer.shouldBeSkippeduntuk melewatinya. - Izinkan nilai null ditampilkan oleh
TargetPreloadStatusControl.getTargetPreloadStatus(T)untuk menunjukkan agar tidak melakukan pramuatMediaSourcedenganrankingDatayang diberikan. - Menambahkan
remove(MediaSource)keBasePreloadManager. - Tambahkan
reset()keBasePreloadManageruntuk merilis semua sumber penahanan sekaligus mempertahankan instance pengelola pramuat. - Tambahkan
ExoPlayer.setPriority()(danBuilder.setPriority()) untuk menentukan nilai prioritas yang digunakan diPriorityTaskManagerdan untuk kepentingan MediaCodec dari API 35. - Memperbaiki masalah terkait pembaruan waktu buffering ulang terakhir yang menyebabkan
kunci
bs(kehabisan buffer) yang salah di CMCD (#1124). - Tambahkan
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)untuk menunjukkan bahwa sumber telah dimuat hingga akhir. Hal ini memungkinkanDefaultPreloadManagerdan implementasiPreloadMediaSource.PreloadControlkustom untuk melakukan pramuat sumber berikutnya atau melakukan tindakan lain. - Memperbaiki bug yang menyebabkan penghapusan bagian tanpa suara di akhir item dapat memicu pengecualian pemutaran.
- Tambahkan
clearkePreloadMediaSourceuntuk menghapus periode pramuat. - Menambahkan kode error baru
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDyang digunakan saat resource codec diklaim kembali untuk tugas dengan prioritas lebih tinggi. - Mengizinkan
AdsMediaSourcememuat iklan pre-roll sebelum penyiapan media konten awal selesai (#1358). - Memperbaiki bug saat pemutaran dipindahkan ke
STATE_ENDEDsaat menyiapkan ulang live stream DASH multi-periode setelah periode aslinya sudah dihapus dari manifes. - Mengganti nama
onTimelineRefreshed()menjadionSourcePrepared()danonPrepared()menjadionTracksSelected()diPreloadMediaSource.PreloadControl. Ganti juga nama IntDef diDefaultPreloadManager.Stage. - Menambahkan dukungan eksperimental untuk penjadwalan dinamis guna menyelaraskan pekerjaan
dengan siklus bangun CPU dan menunda bangun hingga perender dapat melanjutkan proses.
Anda dapat mengaktifkannya menggunakan
experimentalSetDynamicSchedulingEnabled()saat menyiapkan instance ExoPlayer. - Menambahkan
Renderer.getDurationToProgressUs().Rendererdapat menerapkan metode ini untuk menampilkan durasi yang harus dimajukan oleh pemutaran ke ExoPlayer agar perender dapat melanjutkan. JikaExoPlayerditetapkan denganexperimentalSetDynamicSchedulingEnabled(),ExoPlayerakan memanggil metode ini saat menghitung waktu untuk menjadwalkan tugas kerjanya. - Tambahkan
MediaCodecAdapter#OnBufferAvailableListeneruntuk memberi tahu saat buffer input dan output tersedia untuk digunakan olehMediaCodecRenderer.MediaCodecRendererakan memberi sinyal kepadaExoPlayersaat menerima callback ini dan jikaExoPlayerdisetel denganexperimentalSetDynamicSchedulingEnabled(), makaExoPlayerakan menjadwalkan loop kerjanya karena perender dapat membuat progres. - Gunakan class data untuk metode
LoadControl, bukan parameter individual. - Tambahkan
ExoPlayer.isReleased()untuk memeriksa apakahExoplayer.release()telah dipanggil. - Menambahkan
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 yang dihapus (#1098).- Memperbaiki potensi
IllegalArgumentExceptionsaat menangani error pemutar yang terjadi saat membaca lebih lanjut item playlist lain (#1483).
- Tambahkan
- Transformator:
- Tambahkan
audioConversionProcessdanvideoConversionProcesskeExportResultyang menunjukkan cara pembuatan trek masing-masing 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 melakukan transcoding 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 batasan tersebut 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.listener. Jika terjadi pengecualian codec, detail codec akan tersedia diExportException.codecInfo.
- Tambahkan
- Ekstraktor:
- MPEG-TS: Melakukan roll forward perubahan yang memastikan frame terakhir dirender dengan meneruskan unit akses terakhir streaming ke antrean sampel (#7909). Menyertakan perbaikan untuk menyelesaikan 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 aliran data yang mendasarinya (misalnya, ukuran file, atau headerContent-LengthHTTP). Hal ini membantu mengecualikan data trailer yang tidak dapat diputar (misalnya, gambar album) dari penghitungan pencarian kecepatan bit konstan, sehingga pencarian menjadi lebih akurat (#1376). - MP3: Menggunakan jumlah frame dan data lainnya dalam frame
Info(jika ada) untuk menghitung kecepatan bit rata-rata untuk pencarian kecepatan bit konstan, bukan mengekstrapolasi dari kecepatan bit frame setelah frameInfo, yang mungkin kecil secara artifisial, misalnya framePCUT(#1376). - Memperbaiki ekstraksi format audio PCM dalam container 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#onPresentationEndedmengidentifikasi dengan benar kapan semua data yang tertunda telah diputar. - Memperbaiki bug di
SilenceSkippingAudioProcessorsaat transisi antara berbagai format audio (misalnya stereo ke mono) dapat menyebabkan prosesor menampilkan pengecualian (#1352). - Terapkan
MediaCodecAudioRenderer.getDurationToProgressUs()agar ExoPlayer akan menjadwalkan loop pekerjaan utamanya secara dinamis saat MediaCodecAudioRenderer dapat membuat progres.
- 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 penguraian 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). Baca dokumentasi tentang penyesuaian untuk mengetahui cara menghubungkan komponen ini ke instanceExoPlayer. Metode ini (dan semua dukungan untuk decoding subtitel lama) akan dihapus dalam rilis mendatang. - Aplikasi dengan implementasi
SubtitleDecoderkustom harus mengupdatenya untuk mengimplementasikanSubtitleParser(danSubtitleParser.Factory, bukanSubtitleDecoderFactory).
- Perubahan ini dapat diganti dengan memanggil
- PGS: Memperbaiki decoding run-length untuk me-resolve
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 streaming (dukungancolumnLocktidak diimplementasikan, sehingga secara efektif diasumsikan selalu salah).- Perubahan ini awalnya disertakan dalam catatan rilis
1.3.0-alpha01, tetapi tidak sengaja dikembalikan sebelum rilis1.3.0-rc01. Masalah ini sekarang telah diperbaiki, sehingga perubahan tersebut tersedia lagi.
- Perubahan ini awalnya disertakan dalam catatan rilis
- CEA-708: Menghindari penambahan baris baru duplikat oleh penanganan naif ExoPlayer terhadap perintah 'set pen location' (#1315).
- Memperbaiki
IllegalArgumentExceptiondariLegacySubtitleUtilsaat sampel subtitel WebVTT tidak berisi tanda, misalnya sebagai bagian dari streaming DASH (#1516).
- Metadata:
- Memperbaiki pemetaan MP4 ke tag pengurutan ID3. Sebelumnya, tag MP4 'album sort'
(
soal), 'artist sort' (soar), dan 'album artist sort' (soaa) salah dipetakan ke tag ID3TSO2,TSOA, danTSOP(#1302). - Memperbaiki pembacaan tag
gnre(genre) dantmpo(tempo) numerik MP4 (/iTunes) jika nilainya lebih dari satu byte. - Menyebarkan frame
TCONID3 keMediaMetadata.genre(#1305).
- Memperbaiki pemetaan MP4 ke tag pengurutan ID3. Sebelumnya, tag MP4 'album sort'
(
- Gambar:
- Menambahkan dukungan untuk petak thumbnail DASH non-persegi (#1300).
- Menambahkan dukungan untuk AVIF untuk API 34+.
- Izinkan
nullsebagai parameter untukExoPlayer.setImageOutput()guna menghapusImageOutputyang ditetapkan sebelumnya.
- DataSource:
- Terapkan dukungan untuk URI resource mentah
android.resource://package/iddenganpackageberbeda dari paket aplikasi saat ini. Hal ini sebelumnya tidak didokumentasikan untuk 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 dianotasi menjadi non-null. - Mengizinkan
ByteArrayDataSourceme-resolve URI ke array byte selamaopen(), bukan di-hard code saat konstruksi (#1405).
- Terapkan dukungan untuk URI resource mentah
- DRM:
- Mengizinkan penetapan
LoadErrorHandlingPolicydiDefaultDrmSessionManagerProvider(#1271).
- Mengizinkan penetapan
- Efek:
- Mendukung beberapa perubahan kecepatan dalam
EditedMediaItematauCompositionyang sama diSpeedChangeEffect. - Dukungan untuk output HLG dan PQ dari input bitmap ultra HDR.
- Menambahkan dukungan untuk EGL_GL_COLORSPACE_BT2020_HLG_EXT, yang meningkatkan output platform HLG di ExoPlayer.setVideoEffect dan Debug SurfaceView Transformer.
- Memperbarui implementasi matriks Overlay agar konsisten dengan
dokumentasi dengan membalik 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
TimestampWrappererror saat digunakan denganExoPlayer#setVideoEffects(#821). - Mengubah ruang kerja warna SDR default dari warna linear menjadi video SDR BT 709 elektrik. Berikan juga opsi ketiga untuk mempertahankan ruang warna asli.
- Mengizinkan penentuan urutan z yang tidak tentu dari EditedMediaItemSequences (#1055).
- Mempertahankan rentang luminans yang konsisten di berbagai konten HDR (menggunakan rentang HLG).
- Menambahkan dukungan untuk overlay Ultra HDR (bitmap) pada konten HDR.
- Mengizinkan efek
SeparableConvolutiondigunakan sebelum API 26. - Hapus
OverlaySettings.useHdryang tidak digunakan karena rentang dinamis overlay dan frame harus cocok. - Menambahkan dukungan HDR untuk
TextOverlay. Pencahayaan overlay teks dapat disesuaikan denganOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Mendukung beberapa perubahan kecepatan dalam
- Ekstensi IMA:
- Mempromosikan API yang diperlukan aplikasi untuk memutar streaming iklan DAI ke stabil.
- Tambahkan
replaceAdTagParameters(Map <String, String>)keImaServerSideAdInsertionMediaSource.AdLoaderyang memungkinkan penggantian parameter tag iklan saat runtime. - Memperbaiki bug saat
VideoAdPlayer.VideoAdPlayerCallback.onError()tidak dipanggil ketika 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 nilainya dapat tetap salah untuk pengontrol meskipun perintah terkait tersedia. - Menambahkan konstanta ikon untuk
CommandButtonyang harus digunakan, bukan resource ikon kustom. - Menambahkan
MediaSessionService.isPlaybackOngoing()untuk memungkinkan aplikasi mengkueri apakah layanan perlu dihentikan dionTaskRemoved()(#1219). - Tambahkan
MediaSessionService.pauseAllPlayersAndStopSelf()yang memudahkan untuk menjeda pemutaran semua sesi dan panggilstopSelf()untuk menghentikan siklus prosesMediaSessionService. - Ganti
MediaSessionService.onTaskRemoved(Intent)untuk memberikan implementasi 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 menetapkan durasi ke metadata sesi platform (#1256).
- Selaraskan konversi
MediaMetadatakeMediaDescriptionCompat, untuk menggunakan urutan dan logika pilihan yang sama saat memilih properti metadata seperti di 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 diSessionResultdanLibraryResult, bukan kode error, untuk memberikan informasi selengkapnya tentang error dan cara mengatasinya 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 fatalPlaybackStateCompat.SessionErroryang dikirim ke pengontrol notifikasi media denganMediaSession.sendError(ControllerInfo, SessionError)dipetakan ke error non-fatal diPlaybackStateCompatyang berarti kode dan pesan error ditetapkan, tetapi status sesi platform tetap berbeda denganSTATE_ERROR. - Mengizinkan aktivitas sesi ditetapkan per pengontrol untuk mengganti
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 memilih tidak menggunakan 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:
- Memastikan bahwa
DownloadHelpertidak membocorkan instanceRendereryang belum dirilis, yang pada akhirnya dapat menyebabkan aplikasi error denganIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Memastikan bahwa
- Ekstensi Cronet:
- Perbaiki
SocketTimeoutExceptiondiCronetDataSource. Di beberapa versi Cronet, permintaan yang diberikan oleh callback tidak selalu sama. Hal ini menyebabkan callback tidak selesai dan waktu tunggu permintaan habis (https://issuetracker.google.com/328442628).
- Perbaiki
- 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
yang menghasilkan
Source ErrordanIllegalArgumentException. - Memperbaiki bug yang menyebabkan playlist yang diputar non-primer tidak dimuat ulang 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 pada error non-fatal (misalnya, yang dilaporkan keAnalyticsListener.onVideoCodecError()). Gunakan rantai metodeTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()baru untuk menonaktifkan perilaku ini.
- Terapkan
- Aplikasi demo:
- Gunakan
DefaultPreloadManagerdi aplikasi demo video pendek. - 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. - Hapus
PlayerMessage.setHandler(Handler). Sebagai gantinya, gunakansetLooper(Looper). - Hapus kolom
Timeline.Window.isLive. Gunakan metodeisLive(). - Menghapus konstruktor
DefaultHttpDataSource. Sebagai gantinya, gunakanDefaultHttpDataSource.Factory. - Menghapus
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. MenggunakanDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSsebagai gantinya. - Hapus
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 menggunakanDecoderReuseEvaluation. - 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). - Hapus antarmuka
Bundleable. Hal ini termasuk menghapus semua kolom konstantaBundleable.Creator<Foo> CREATOR. Sebagai gantinya, 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.
- Library Umum:
- Tambahkan
Format.labelsuntuk mengizinkan label yang dilokalkan atau label alternatif lainnya.
- Tambahkan
- ExoPlayer:
- Memperbaiki masalah saat
PreloadMediaPeriodtidak dapat mempertahankan streaming saat dimuat ulang. - Terapkan
TrackSelectionResultyang sesuai dan benar ke periode pemutaran dalam pemilihan ulang trek. - Memulai perender yang diaktifkan lebih awal hanya setelah memajukan periode pemutaran saat bertransisi di antara item media (#1017).
- Menambahkan jenis nilai yang ditampilkan yang tidak ada ke aturan
-keepclasseswithmembersproguard untukDefaultVideoFrameProcessor.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 kecepatan frame 'yang wajar' (>=10 fps) daripada trek video dengan kecepatan frame yang lebih rendah atau tidak ditetapkan. Hal ini memastikan pemutar memilih trek video 'asli' dalam MP4 yang diekstrak dari foto motion (foto dengan gambar bergerak) yang dapat berisi dua trek HEVC, dengan salah satunya memiliki resolusi yang lebih tinggi, tetapi jumlah frame yang sangat kecil (#1051).
- Ekstraktor:
- Memperbaiki masalah saat padding tidak dilewati saat membaca potongan 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 streaming ke antrean sampel (#7909). Hal ini karena perubahan tersebut menyebabkan masalah baru pada streaming HLS khusus I-frame (#1150) dan streaming HLS H.262 (#1126).
- Audio:
- Mengizinkan pemulihan perender dengan menonaktifkan pengurangan beban jika trek audio gagal melakukan inisialisasi dalam mode pengurangan beban.
- 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 diwajibkan oleh API (#1169). (#966).
- Memperbaiki masalah saat penanganan info warna HDR menyebabkan perilaku codec yang salah dan mencegah peralihan format adaptif untuk trek video SDR (#1158).
- Teks:
- WebVTT: Mencegah isyarat yang berurutan secara langsung membuat instance
CuesWithTimingtambahan palsu dariWebvttParser.parse(#1177).
- WebVTT: Mencegah isyarat yang berurutan secara langsung membuat instance
- DRM:
- Mengatasi
NoSuchMethodErroryang dapat ditampilkan oleh frameworkMediaDrm, bukanResourceBusyExceptionatauNotProvisionedExceptiondi beberapa perangkat Android 14 (#1145).
- Mengatasi
- Efek:
- Peningkatan pemetaan nuansa PQ ke SDR dengan mengonversi ruang warna.
- Sesi:
- UI:
- Kembali menyertakan nama bahasa trek audio jika
Localetidak dapat mengidentifikasi nama tampilan (#988).
- Kembali menyertakan nama bahasa trek audio jika
- Ekstensi DASH:
- Mengisi semua elemen
Labeldari manifes keFormat.labels(#1054).
- Mengisi semua elemen
- Ekstensi RTSP:
- Melewati nilai informasi sesi kosong (i-tag) dalam penguraian SDP (#1087).
- Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Nonaktifkan ekstensi MIDI sebagai dependensi lokal secara default karena memerlukan konfigurasi repositori Maven tambahan. 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.
- Library Umum:
- Terapkan dukungan untuk URI resource mentah
android.resource://package/[type/]namedenganpackageberbeda dari paket aplikasi saat ini. Hal ini selalu didokumentasikan untuk berfungsi, tetapi tidak diimplementasikan dengan benar hingga sekarang. - Menormalisasi jenis MIME yang ditetapkan oleh kode aplikasi atau dibaca dari media agar sepenuhnya menggunakan huruf kecil.
- Tentukan iklan dengan
MediaItemlengkap, bukan satuUridiAdPlaybackState. - Tingkatkan
minSdkke 19 (Android KitKat). Hal ini selaras dengan semua library AndroidX lainnya, dan diperlukan agar kami dapat mengupgrade ke versi terbaru dependensi AndroidX. - Mengisi
artworkUridanartworkDatadiMediaMetadata.Builder.populate(MediaMetadata)jika setidaknya salah satunya bukan null (#964).
- Terapkan dukungan untuk URI resource mentah
- ExoPlayer:
- Menambahkan
PreloadMediaSourcedanPreloadMediaPeriodyang memungkinkan aplikasi memuat data sumber media konten di posisi awal tertentu sebelum pemutaran.PreloadMediaSourcemenangani penyiapan sumber media konten untuk menerimaTimeline, menyiapkan dan meng-cache periode pada posisi awal yang ditentukan, memilih trek, dan memuat data media untuk periode tersebut. Aplikasi mengontrol progres pramuat dengan menerapkanPreloadMediaSource.PreloadControldan menetapkan sumber yang dipramuat ke pemutar untuk pemutaran. - Menambahkan
ExoPlayer.setImageOutputyang memungkinkan aplikasi menyetelImageRenderer.ImageOutput. DefaultRenderersFactorykini menyediakanImageRendererke pemutar secara default denganImageOutputdanImageDecoder.Factory.DEFAULTnull.- Memunculkan peristiwa
Player.Listener.onPositionDiscontinuitysaat keheningan 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, sebuahHttpDataSourcemenggunakan API HttpEngine. - Mencegah subclassing
CompositeSequenceableLoader. Komponen ini sebelumnya dibuat dapat diperluas, tetapi tidak pernah dijadikan subclass dalam library. Penyesuaian dapat dilakukan dengan menggabungkan instance menggunakan pola dekorator dan mengimplementasikanCompositeSequenceableLoaderFactorykustom. - 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 penguraian. - Menambahkan dukungan untuk menyesuaikan
SubtitleParser.Factoryyang digunakan selama ekstraksi. Hal ini dapat dicapai denganMediaSource.Factory.setSubtitleParserFactory(). - Tambahkan awalan sumber ke semua kolom
Format.idyang dihasilkan dariMergingMediaSource. Hal ini membantu mengidentifikasi sumber yang menghasilkanFormat(#883). - Memperbaiki ekspresi reguler 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 slow motion SEF H.265/HEVC.
- Meningkatkan kecepatan transmuxing, terutama untuk pengeditan 'hapus video'.
- Menambahkan API untuk memastikan bahwa file output dimulai pada frame video. Hal ini dapat membuat output operasi pemangkasan lebih kompatibel dengan implementasi pemutar yang tidak menampilkan frame video pertama hingga stempel waktu presentasinya (#829).
- Menambahkan dukungan untuk mengoptimalkan operasi pemangkasan MP4 aset tunggal.
- Tambahkan dukungan untuk memastikan frame video memiliki stempel waktu pertama dalam file output. Memperbaiki file output yang dimulai dengan frame hitam pada pemutar berbasis iOS (#829).
- Pemilihan Trek:
- Tambahkan
DefaultTrackSelector.selectImageTrackuntuk mengaktifkan pemilihan trek gambar. - Tambahkan
TrackSelectionParameters.isPrioritizeImageOverVideoEnableduntuk menentukan apakah akan memilih trek gambar jika trek gambar dan trek video tersedia. Nilai defaultnya adalahfalse, yang berarti pemilihan trek video diprioritaskan.
- Tambahkan
- Ekstraktor:
- Menambahkan penguraian AV1C tambahan ke ekstraktor MP4 untuk mengambil nilai
ColorInfo.colorSpace,ColorInfo.colorTransfer, danColorInfo.colorRange(#692). - MP3: Menggunakan pencarian kecepatan bit konstan (CBR) untuk file dengan header
Info(CBR yang setara dengan headerXing). Sebelumnya, kami menggunakan tabel pencarian dari headerInfo, tetapi hal ini menghasilkan pencarian yang kurang akurat dibandingkan jika kami 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 penguraian 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 memasukkanVideoFrameProcessor.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 streaming (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 thumbnail
masing-masing disediakan untuk
ImageOutputmendekati waktu presentasinya.
- Menambahkan dukungan untuk thumbnail DASH. Gambar petak dipangkas dan thumbnail
masing-masing disediakan untuk
- DRM:
- Putar 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 penghentian di tengah pemutaran jika kunci masih belum siap
saat posisi pemutaran mencapai sampel terenkripsi (tetapi sebelumnya
pemutaran tidak akan dimulai sama sekali pada tahap ini). Perilaku ini dapat
dinonaktifkan dengan
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyatauDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- Ekstensi IMA:
- Memperbaiki masalah saat iklan DASH dan HLS tanpa ekstensi file yang sesuai tidak dapat diputar.
- Putar 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 penghentian di tengah pemutaran jika kunci masih belum siap
saat posisi pemutaran mencapai sampel terenkripsi (tetapi sebelumnya
pemutaran tidak akan dimulai sama sekali pada tahap ini). Perilaku ini dapat
dinonaktifkan dengan
- Sesi:
- Menonaktifkan deteksi klik dua kali untuk aplikasi TV (#962).
- Memperbaiki masalah saat
MediaItem.RequestMetadatadengan tambahan non-null saja tidak ditransmisikan antara pengontrol media dan sesi. - Menambahkan konstruktor ke
MediaLibrarySession.Builderyang hanya menggunakanContext, bukanMediaLibraryService.
- Ekstensi HLS:
- Kurangi
HlsMediaPeriodmenjadi visibilitas paket pribadi. Jenis ini tidak boleh bergantung langsung dari luar paket HLS. - Menyelesaikan pencarian ke awal segmen dengan lebih efisien (#1031).
- Kurangi
- Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Dekoder MIDI: Mengabaikan pesan peristiwa SysEx (#710).
- Utilitas Pengujian:
- Jangan jeda pemutaran di
TestPlayerRunHelper.playUntilPosition. Pengujian mempertahankan pemutaran dalam status pemutaran, tetapi menangguhkan progres hingga pengujian dapat menambahkan pernyataan dan tindakan lebih lanjut.
- Jangan jeda pemutaran di
- Aplikasi demo:
- Menambahkan modul demo video pendek untuk mendemonstrasikan penggunaan
PreloadMediaSourcedengan kasus penggunaan konten video pendek.
- Menambahkan modul demo video pendek 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 offset kembali 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 pencarian ke nol dalam live stream secara tidak benar memungkinkan streaming dimulai pada posisi defaultnya (#9347).
- Memperbaiki masalah saat instance baru
CmcdData.Factorymenerima nilai negatif untukbufferedDurationUsdari sumber potongan, sehingga menghasilkanIllegalArgumentException(#888).
- Memperbaiki masalah saat pencarian manual di luar rentang
- Transformator:
- Mengatasi masalah saat encoder akan menampilkan error pada waktu konfigurasi karena menetapkan kecepatan operasi yang tinggi.
- Ekstraktor:
- Tandai trek HEVC sekunder (tidak dapat diputar) di foto motion (foto dengan gambar bergerak) JPEG sebagai
ROLE_FLAG_ALTERNATEuntuk mencegahnya dipilih secara otomatis untuk diputar karena resolusinya yang lebih tinggi. - Memperbaiki deteksi keyframe 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) di foto motion (foto dengan gambar 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 saat
MediaMetadatahanya diisi dari komentar Vorbis dengan kunci huruf besar (#876). - Menangkap
OutOfMemoryErrorsaat mengurai frame ID3 yang sangat besar, yang berarti pemutaran dapat dilanjutkan tanpa info tag, bukan pemutaran yang gagal sepenuhnya.
- Memperbaiki bug saat
- DRM:
- Memperluas solusi untuk URL lisensi
https://default.urlClearKey palsu ke API 33+ (sebelumnya solusi hanya diterapkan di API 33 persis) (#837). - Memperbaiki
ERROR_DRM_SESSION_NOT_OPENEDsaat beralih dari konten terenkripsi ke konten yang tidak terenkripsi tanpa platform yang terpasang ke pemutar. Error ini terjadi karena penggunaan dekoder aman yang salah untuk memutar konten yang tidak dilindungi.
- Memperluas solusi untuk URL lisensi
- Sesi:
- Menempatkan 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 update notifikasi pertama diminta (#917).
- Menempatkan 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:
- Menyaring pembuatan
Timelineagar tidak membuat aplikasi error saat pemuatan media gagal di perangkat transmisi (#708).
- Menyaring pembuatan
Versi 1.2.0
15 November 2023
- Library Umum:
- Tambahkan parameter
@Nullable Throwableke metode di 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 saat parameter jenis generik nullable
dan jenis elemen array nullable tidak terdeteksi sebagai nullable. Contohnya
adalah parameter metode
TrackSelectorResultdanSimpleDecoder(#6792). - Mengubah perilaku UI dan notifikasi default di
Util.shouldShowPlayButtonuntuk menampilkan tombol "putar" saat pemutaran dihentikan sementara (misalnya, karena kehilangan fokus audio sementara). Perilaku lama dapat dipertahankan menggunakanPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)atauMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Mengupgrade
androidx.annotation:annotation-experimentalke1.3.1untuk memperbaiki https://issuetracker.google.com/251172715. - Memindahkan
ExoPlayer.setAudioAttributeske antarmukaPlayer.
- Tambahkan parameter
- ExoPlayer:
- Memperbaiki masalah pencarian di streaming AC4 yang disebabkan oleh tidak mengidentifikasi sampel 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 penghentian 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 sudah 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), laju pemutaran (pr), dan startup (su) (#8699). - Menambahkan kedalaman bit 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 selisih 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 secara eksplisit mengizinkan atau melarang adaptasi yang tidak lancar. Default-nya tetap pada perilaku saat ini, yaitutrue.
- Tambahkan
- Ekstraktor:
- MPEG-TS: Memastikan frame terakhir dirender dengan meneruskan unit akses terakhir dari streaming ke antrean sampel (#7909).
- Memperbaiki kesalahan ketik saat menentukan
rotationDegrees. MengubahprojectionPosePitchmenjadiprojectionPoseRoll(#461). - Menghapus asumsi bahwa instance
Extractordapat langsung diperiksa denganinstanceof. Jika Anda ingin 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 di MP4.
- Tambahkan
AudioSink.getFormatOffloadSupport(Format)yang mengambil tingkat dukungan offload yang dapat diberikan sink untuk format melaluiDefaultAudioOffloadSupportProvider. Metode ini menampilkanAudioOffloadSupportbaru yang berisiisFormatSupported,isGaplessSupported, danisSpeedChangeSupported. - Tambahkan
AudioSink.setOffloadMode()yang digunakan untuk mengonfigurasi konfigurasi offload pada sink audio. Default-nya adalahAudioSink.OFFLOAD_MODE_DISABLED. - Offload dapat diaktifkan melalui
setAudioOffloadPreferencediTrackSelectionParameters. Jika preferensi yang ditetapkan adalah mengaktifkan, perangkat mendukung offload untuk format, dan pemilihan trek adalah trek audio tunggal, maka offload audio akan diaktifkan. - Jika
audioOffloadModePreferenceditetapkan keAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorhanya akan memilih trek audio dan hanya jika format trek tersebut didukung dalam offload. Jika tidak ada trek audio yang didukung dalam offload, tidak ada trek yang akan dipilih. - Menonaktifkan dukungan gapless untuk offload saat level pra-API 33 karena masalah posisi pemutaran setelah transisi trek.
- Menghapus parameter
enableOffloaddari tanda tangan metodeDefaultRenderersFactory.buildAudioSink. - Hapus metode
DefaultAudioSink.Builder.setOffloadMode. - Hapus nilai intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Menambahkan dukungan untuk metadata gapless Opus selama pemutaran offload.
- Mengizinkan pemulihan perender dengan menonaktifkan offload jika gagal pada penulisan pertama (#627).
- Aktifkan Penjadwalan Offload secara default untuk pemutaran yang di-offload khusus audio.
- Hapus
ExoPlayer.experimentalSetOffloadSchedulingEnableddanAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - Mengganti nama
onExperimentalSleepingForOffloadChangedmenjadionSleepingForOffloadChangeddanonExperimentalOffloadedPlaybackmenjadionOffloadedPlayback. - Memindahkan antarmuka dan definisi
TrackSelectionParametersterkait mode offload audio ke classAudioOffloadPreferencesdalam. - Tambahkan callback
onAudioTrackInitializeddanonAudioTrackReleasedkeAnalyticsListener,AudioRendererEventListener, danAudioSink.Listener. - Memperbaiki masalah underflow buffer audio DTS Express (#650).
- Memperbaiki bug saat pemeriksaan kemampuan untuk E-AC3-JOC menampilkan
IllegalArgumentException(#677).
- Menambahkan dukungan untuk PCM big-endian 24/32-bit di MP4 dan Matroska, serta mengurai
encoding PCM untuk
- Video:
- Izinkan
MediaCodecVideoRenderermenggunakanVideoFrameProcessor.Factorykustom. - Memperbaiki bug yang menyebabkan frame pertama tidak dapat dirender jika streaming audio dimulai dengan stempel waktu negatif (#291).
- Izinkan
- Teks:
- Hapus
ExoplayerCuesDecoder. Trek teks dengansampleMimeType = application/x-media3-cueskini ditangani langsung olehTextRenderertanpa memerlukan instanceSubtitleDecoder.
- Hapus
- Metadata:
MetadataDecoder.decodetidak akan lagi dipanggil untuk sampel "hanya dekode" karena implementasinya harus menampilkan null.
- Efek:
- Tambahkan
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)yang mengantrekan input bitmap berdasarkan stempel waktu. - Ubah
VideoFrameProcessor.registerInputStream()menjadi non-pemblokiran. Aplikasi harus menerapkanVideoFrameProcessor.Listener#onInputStreamRegistered(). - Mengubah parameter
frameRatedandurationUsdariVideoFrameProcessor.queueInputBitmapmenjadiTimestampIterator.
- Tambahkan
- Ekstensi IMA:
- Memperbaiki bug saat live stream DASH multi-periode yang bukan item pertama dalam playlist dapat menampilkan pengecualian (#571).
- Merilis 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). - Hanya gunakan
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 penelepon 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 memudahkan. - Ganti
MediaLibrarySession.Callback.onSubscribe()untuk menyatakan ketersediaan ID induk yang berlangganan 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 jika
COMMAND_GET_TIMELINEtidak tersedia untuk pengontrol notifikasi media. Dengan Android Auto sebagai pengontrol klien yang membaca dari sesi framework, hal ini menyebabkan tombolqueuedi UI Android Auto tidak ditampilkan (#339). - Menggunakan
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 penekanan pemutaran karenaPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTdengan meluncurkan dialog sistem agar pengguna dapat 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:
- Menyatakan jenis layanan latar depan "sinkronisasi data" untuk
DownloadServiceuntuk kompatibilitas Android 14. Saat menggunakan layanan ini, aplikasi juga perlu menambahkandataSyncsebagaiforegroundServiceTypedalam manifes dan menambahkan izinFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Menyatakan 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 penyelesaian pemuatan terakhir (#663).
- Ekstensi DASH:
- Mengizinkan beberapa ID DASH yang sama di URL template segmen.
- Menambahkan dukungan eksperimental untuk mengurai subtitel selama ekstraksi. Versi ini
memiliki dukungan yang lebih baik untuk menggabungkan subtitel yang tumpang-tindih, termasuk
menyelesaikan kedipan saat bertransisi di antara segmen subtitel. Anda
dapat mengaktifkannya menggunakan
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Ekstensi RTSP:
- Memperbaiki kondisi race yang dapat menyebabkan
IndexOutOfBoundsExceptionsaat kembali ke TCP, atau pemutaran berhenti dalam beberapa situasi. - Memeriksa 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.
- Menambahkan
DecoderOutputBuffer.shouldBeSkippeduntuk langsung menandai buffer output yang tidak perlu ditampilkan. Opsi ini lebih disukai daripadaC.BUFFER_FLAG_DECODE_ONLYyang tidak akan digunakan lagi. - Menambahkan
Decoder.setOutputStartTimeUsdanSimpleDecoder.isAtLeastOutputStartTimeUsuntuk memungkinkan dekoder menghapus sampel khusus dekode sebelum waktu mulai. 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:
- Membuat
TestExoPlayerBuilderdanFakeClockkompatibel dengan pengujian UI Espresso dan pengujian UI Compose. Hal ini memperbaiki bug saat pemutaran berjalan secara non-deterministik selama interaksi tampilan Espresso atau Compose.
- Membuat
- Menghapus simbol yang tidak digunakan lagi:
- Hapus
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)danTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). GunakanComposition.Builder.setHdrMode(int)dan teruskanCompositionkeTransformer.start(Composition, String). - Hapus metode
DownloadNotificationHelper.buildProgressNotificationyang tidak digunakan lagi, gunakan metode yang tidak digunakan lagi yang menggunakan parameternotMetRequirements.
- Hapus
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
- Library Umum:
- 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 Common Media Client Data (CMCD): format streaming (sf), jenis streaming (st), versi (v), kecepatan bit teratas (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:
- Menambahkan 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 petunjuk menjadi 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 sediakan pengambil untuk
mengaksesnya. Saat tata letak kustom berubah,
MediaController.Listener.onCustomLayoutChangedakan dipanggil. Aplikasi yang ingin mengirim tata letak kustom yang berbeda ke pengontrol Media3 yang berbeda dapat melakukannya diMediaSession.Callback.onConnectmenggunakanAcceptedResultBuilderuntuk memastikan tata letak kustom tersedia untuk pengontrol saat koneksi selesai. - Memperbaiki kasus saat
MediaLibraryServiceLegacyStubmengirim error keResultyang tidak mendukung hal ini, 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 sediakan pengambil untuk
mengaksesnya. Saat tata letak kustom berubah,
Versi 1.1.0
5 Juli 2023
- Library Umum:
- Menambahkan alasan penghentian untuk rute audio yang tidak sesuai dan memutar saat siap mengubah alasan penghentian yang terlalu lama. (#15).
- Menambahkan perintah ke Pemutar:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Tambahkan metode overload 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 di posisi yang sama (#8046).
- ExoPlayer:
- Izinkan ExoPlayer mengontrol metode volume perangkat hanya jika
diaktifkan secara eksplisit. Gunakan
ExoPlayer.Builder.setDeviceVolumeControlEnableduntuk memiliki akses ke:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)dansetDeviceVolume(int, int)increaseDeviceVolume(int)danincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)dandecreaseDeviceVolume(int, int)
- Menambahkan
FilteringMediaSourceyang memungkinkan pemfilteran jenis trek yang tersedia dariMediaSource. - Menambahkan dukungan untuk menyertakan Common Media Client Data (CMCD) dalam
permintaan keluar 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). - Tambahkan
ExoPlayer.setVideoEffects()untuk menggunakanEffectselama pemutaran video. - Perbarui
SampleQueueuntuk menyimpansourceIdsebagailong, bukanint. Tindakan ini akan 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). Sebagai gantinya, varian metode tanpamediaTimeOffsetUsdapat dipanggil. 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 di playlist kosong.
- Izinkan ExoPlayer mengontrol metode volume perangkat hanya jika
diaktifkan secara eksplisit. Gunakan
- Transformator:
- Hapus
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Sebagai gantinya, gunakanExoPlayerAssetLoader.Factory(MediaSource.Factory)danTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Hapus
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Memperbaiki bug yang menyebabkan transformasi macet (menyebabkan waktu tunggu muxer habis) jika akhir streaming video diberi sinyal saat frame input sedang menunggu pemrosesan.
- Buat kueri codec melalui
MediaCodecList, bukan menggunakan utilitasfindDecoder/EncoderForFormat, untuk memperluas dukungan. - Hapus konfigurasi B-frame di
DefaultEncoderFactorykarena tidak berfungsi di beberapa perangkat.
- Hapus
- 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).
- Ekstrapolasi posisi saat ini selama mode tidur dengan penjadwalan offload.
- Tambahkan
Renderer.release()danAudioSink.release()untuk merilis resource di akhir siklus proses pemutar. - Memproses perubahan kemampuan audio di
DefaultAudioSink. Tambahkan parameter yang diperlukancontextdi konstruktorDefaultAudioSink, yang akan digunakanDefaultAudioSinkuntuk mendaftar sebagai pemroses keAudioCapabilitiesReceiverdan memperbarui propertiaudioCapabilities-nya saat diberi tahu tentang perubahan kemampuan. - Menyebarkan perubahan kemampuan audio melalui peristiwa baru
onAudioCapabilitiesChangeddi antarmukaAudioSink.Listener, dan antarmuka baruRendererCapabilities.Listeneryang memicu peristiwaonRendererCapabilitiesChanged. - Tambahkan
ChannelMixingAudioProcessoruntuk menerapkan penskalaan/pencampuran ke saluran audio. - Menambahkan nilai int baru
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEkeDecoderDiscardReasonsuntuk menghapus dekoder audio saat mode pengabaian memungkinkan 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:
- Membuat
MediaCodecVideoRenderermelaporkanVideoSizedengan lebar dan tinggi 0 saat perender dinonaktifkan.Player.Listener.onVideoSizeChangeddipanggil saatPlayer.getVideoSize()berubah. Dengan perubahan ini, ukuran video ExoPlayer denganMediaCodecVideoRenderermemiliki lebar dan tinggi 0 jikaPlayer.getCurrentTrackstidak mendukung video, atau ukuran trek video yang didukung belum ditentukan.
- Membuat
- DRM:
- Mengurangi visibilitas beberapa metode khusus internal di
DefaultDrmSessionyang tidak diharapkan untuk 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:
- Mengaktifkan streaming DASH live multi-periode untuk DAI. Perlu diperhatikan bahwa implementasi saat ini belum mendukung pencarian di live stream (#10912).
- Memperbaiki bug yang menyebabkan grup iklan baru disisipkan dalam live stream karena posisi konten yang dihitung dalam linimasa berturut-turut sedikit bervariasi.
- Sesi:
- Tambahkan metode bantuan
MediaSession.getControllerForCurrentRequestuntuk mendapatkan informasi tentang pengontrol yang saat ini memanggil metodePlayer. - Menambahkan
androidx.media3.session.MediaButtonReceiveruntuk memungkinkan aplikasi mengimplementasikan kelanjutan pemutaran dengan peristiwa tombol media yang dikirim, misalnya, oleh 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 bantuan
- UI:
- Tambahkan metode Util
shouldShowPlayButtondanhandlePlayPauseButtonActionuntuk menulis elemen UI kustom dengan tombol putar/jeda.
- Tambahkan metode Util
- Ekstensi RTSP:
- Ekstensi DASH:
- Menghapus selisih waktu media dari
MediaLoadData.startTimeMsdanMediaLoadData.endTimeMsuntuk streaming DASH multi-periode. - Memperbaiki bug saat menyiapkan ulang sumber media Dash live multi-periode
menghasilkan
IndexOutOfBoundsException(#10838).
- Menghapus selisih waktu media dari
- Ekstensi HLS:
- Tambahkan
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)untuk menetapkan waktu tunggu bagi thread pemuatan agar menungguTimestampAdjustermelakukan inisialisasi. Jika inisialisasi tidak selesai sebelum waktu tunggu habis,PlaybackExceptionakan ditampilkan untuk menghindari pemutaran berhenti tanpa henti. Waktu tunggu ditetapkan ke nol secara default (#323).
- Tambahkan
- Utilitas Pengujian:
- Periksa ketidakpekaan skema URI terhadap huruf besar/kecil di
DataSourceContractTest.
- Periksa ketidakpekaan skema URI terhadap huruf besar/kecil di
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus konstruktor
DefaultAudioSink, menggunakanDefaultAudioSink.Buildersebagai gantinya. - Hapus
HlsMasterPlaylist, gunakanHlsMultivariantPlaylistsebagai gantinya. - Hapus
Player.stop(boolean). Sebagai gantinya, gunakanPlayer.stop()danPlayer.clearMediaItems()(jikaresetadalahtrue). - Menghapus dua konstruktor
SimpleCacheyang tidak digunakan lagi, menggunakan konstruktor yang tidak digunakan lagi yang menggunakanDatabaseProvideruntuk performa yang lebih baik. - Menghapus konstruktor
DefaultBandwidthMeter, menggunakanDefaultBandwidthMeter.Buildersebagai gantinya. - Menghapus konstruktor
DefaultDrmSessionManager, menggunakanDefaultDrmSessionManager.Buildersebagai gantinya. - Menghapus dua konstruktor
HttpDataSource.InvalidResponseCodeExceptionyang tidak digunakan lagi, menggunakan 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. - Menghapus konstruktor
DownloadServiceyang tidak digunakan lagi, menggunakan 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), menggunakan Kotlin Charset dari paketkotlin.text,java.nio.charset.StandardCharsets, ataucom.google.common.base.Charsets. - Menghapus konstruktor
WorkManagerScheduleryang tidak digunakan lagi, menggunakan konstruktor yang tidak digunakan lagi yang menyertakan opsi untuk memberikan parameterContext. - 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
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrate, dancopyWithVideoSize, gunakanFormat.buildUpon()dan metode penyetel sebagai gantinya. - Hapus
ExoPlayer.retry()yang tidak digunakan lagi, gunakanprepare()sebagai gantinya. - Menghapus konstruktor
DefaultTrackSelectortanpa argumen yang tidak digunakan lagi, gunakanDefaultTrackSelector(Context)sebagai gantinya. - Menghapus konstruktor
OfflineLicenseHelperyang tidak digunakan lagi, dan menggunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)sebagai gantinya. - Menghapus konstruktor
DownloadManageryang tidak digunakan lagi, gunakan konstruktor yang menggunakanExecutorsebagai gantinya. - Menghapus konstruktor
Cueyang tidak digunakan lagi, dan menggunakanCue.Buildersebagai gantinya. - Menghapus konstruktor
OfflineLicenseHelperyang tidak digunakan lagi, dan menggunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)sebagai gantinya. - Menghapus empat metode
AnalyticsListeneryang tidak digunakan lagi:onDecoderEnabled, gunakanonAudioEnableddan/atauonVideoEnabledsebagai gantinya.onDecoderInitialized, gunakanonAudioDecoderInitializeddan/atauonVideoDecoderInitialized.onDecoderInputFormatChanged, gunakanonAudioInputFormatChangeddan/atauonVideoInputFormatChanged.onDecoderDisabled, gunakanonAudioDisableddan/atauonVideoDisabledsebagai gantinya.
- Hapus
Player.Listener.onSeekProcesseddanAnalyticsListener.onSeekProcessedyang tidak digunakan lagi, gunakanonPositionDiscontinuitydenganDISCONTINUITY_REASON_SEEKsebagai gantinya. - Hapus
ExoPlayer.setHandleWakeLock(boolean), gunakansetWakeMode(int)sebagai gantinya. - Hapus
DefaultLoadControl.Builder.createDefaultLoadControl()yang tidak digunakan lagi, gunakanbuild()sebagai gantinya. - Hapus
MediaItem.PlaybackPropertiesyang tidak digunakan lagi, gunakanMediaItem.LocalConfigurationsebagai gantinya. 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 H.265 SPS 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 memperbarui perintah yang tersedia saat terhubung keMediaSessionCompatlama yang memperbarui 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 update
Timelinedan posisi gabungan diMediaSessiondapat menyebabkanMediaControllermenampilkanIllegalStateException.
- 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 yang menyebabkan streaming sampel kosong di media dapat menyebabkan pemutaran macet.
- Sesi:
- Memperbaiki bug saat beberapa item antrean identik yang dipublikasikan oleh
MediaSessionCompatlama menghasilkan pengecualian diMediaController(#290). - Menambahkan penerusan
MediaSession.broadcastCustomCommandyang tidak ada keMediaControllerCompat.Callback.onSessionEventlama (#293). - Memperbaiki bug yang menyebabkan pemanggilan
MediaSession.setPlayertidak mengupdate perintah yang tersedia. - Memperbaiki masalah saat instance
TrackSelectionOverrideyang dikirim dariMediaControllerdiabaikan jika mereferensikan 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:
- Mencoba 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:
- Membuat perbedaan maksimum waktu mulai dua segmen yang akan
digabungkan dapat dikonfigurasi di
SegmentDownloaderdan subclass (#248).
- Membuat 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 rilis frame saat memutar media dengan kecepatan frame yang jauh lebih tinggi daripada kecepatan refresh layar.
- Memetakan format HEVC HDR10 ke
- Cast:
- Memperbaiki
STATE_IDLEsementara saat bertransisi di antara item media (#245).
- Memperbaiki
- RTSP:
- Menangkap IllegalArgumentException yang ditampilkan dalam penguraian pesan respons Describe RTSP yang tidak valid (#10971).
- Sesi:
- Memperbaiki bug saat tombol putar/jeda notifikasi tidak diupdate dengan status pemutar (#192).
- Ekstensi IMA:
- Memperbaiki bug yang mencegah streaming DAI tanpa iklan dimulai
karena peristiwa
LOADEDpertama (dan satu-satunya dalam kasus tanpa iklan) tidak diterima.
- Memperbaiki bug yang mencegah streaming DAI tanpa iklan 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 merupakan perubahan yang 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
berikut.
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
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 dengan 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 mengetahui informasi selengkapnya, lihat project GitHub Media3.
ExoPlayer sebelumnya dihosting di project GitHub ExoPlayer terpisah. Di Media3, nama paketnya adalah
androidx.media3.exoplayer. Kami berencana untuk terus mengelola dan merilis
project GitHub ExoPlayer selama beberapa waktu untuk memberi aplikasi waktu bermigrasi ke Media3.
Media3 memiliki pengganti untuk semua modul ExoPlayer, kecuali untuk ekstensi
media2 dan mediasession lama, yang digantikan oleh modul
media3-session baru. Hal ini memberikan integrasi langsung antara pemutar dan
sesi media tanpa perlu menggunakan class adaptor/konektor.