Media3
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
10 Juli 2024 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.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.4.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 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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.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 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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
Untuk mengetahui informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Anda dapat menggunakan Issue tracker media3 untuk menemukan jawaban atas pertanyaan, masalah umum dan permintaan fitur, serta mengajukan masalah baru.
Versi 1.4.0
Versi 1.4.0-rc01
10 Juli 2024
androidx.media3:media3-*:1.4.0-rc01
dirilis.
Versi 1.4.0-rc01 berisi commit ini.
- Perpustakaan Umum:
- Menambahkan
Format.customData
untuk menyimpan informasi kustom yang disediakan aplikasi tentang instanceFormat
.
- Menambahkan
- ExoPlayer:
- Memperbaiki beberapa inkonsistensi fokus audio, misalnya tidak melaporkan hilangnya fokus penuh atau sementara saat pemutar dijeda (#1436).
- Memperbaiki potensi
IndexOutOfBoundsException
yang disebabkan oleh pengekstrak yang melaporkan jalur tambahan setelah langkah persiapan awal (#1476). Effects
diExoPlayer.setVideoEffect()
akan menerima stempel waktu setelah offset perender dihapus (#1098).- Memperbaiki potensi
IllegalArgumentException
saat menangani error pemutar yang terjadi saat membaca maju ke item playlist lainnya (#1483).
- Teks:
- Memperbaiki
IllegalArgumentException
dariLegacySubtitleUtil
jika sampel subtitel WebVTT tidak berisi isyarat, misalnya sebagai bagian dari aliran DASH (#1516).
- Memperbaiki
- Sesi:
- Izinkan aktivitas sesi ditetapkan per pengontrol untuk mengganti
aktivitas sesi global. Aktivitas sesi dapat ditentukan untuk
pengontrol pada waktu koneksi dengan membuat
ConnectionResult
denganAcceptedResultBuilder.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 ikut replikasi error yang aktif secara default.
- Izinkan aktivitas sesi ditetapkan per pengontrol untuk mengganti
aktivitas sesi global. Aktivitas sesi dapat ditentukan untuk
pengontrol pada waktu koneksi dengan membuat
- UI:
- Mengatasi bug platform yang menyebabkan video yang direntangkan/dipangkas saat menggunakan
SurfaceView
di dalamAndroidView
Compose pada API 34 (#1237).
- Mengatasi bug platform yang menyebabkan video yang direntangkan/dipangkas saat menggunakan
- Aplikasi demo:
- Gunakan
HttpEngineDataSource
sebagaiHttpDataSource
jika didukung oleh perangkat.
- Gunakan
Versi 1.4.0-beta01
26 Juni 2024
androidx.media3:media3-*:1.4.0-beta01
dirilis.
Versi 1.4.0-beta01 berisi commit ini.
- ExoPlayer:
- Tambahkan
ExoPlayer.isReleased()
untuk memeriksa apakahExoplayer.release()
telah dipanggil. - Menambahkan
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
untuk mengonfigurasi posisi maksimum yang dicariseekToPrevious()
ke item sebelumnya (#1425).
- Tambahkan
- Transformator:
- Hapus kolom
ExportResult.processedInputs
. Jika Anda menggunakan kolom ini untuk detail kodec, gunakanDefaultDecoderFactory.listener
sebagai gantinya. Jika terjadi pengecualian codec, detail codec akan tersedia diExportException.codecInfo
.
- Hapus kolom
- Ekstraktor:
- Memperbaiki ekstraksi format audio PCM dalam penampung AVI.
- Gambar:
- Izinkan
null
sebagai parameter untukExoPlayer.setImageOutput
guna menghapusImageOutput
yang ditetapkan sebelumnya.
- Izinkan
- Efek:
- Hapus
OverlaySettings.useHdr
yang tidak digunakan karena rentang dinamis overlay dan frame harus cocok. - Menambahkan dukungan HDR untuk
TextOverlay
. Luminans overlay teks dapat disesuaikan denganOverlaySettings.setHdrLuminanceMultiplier
.
- Hapus
- Sesi:
- Menambahkan
MediaSession.Callback.onPlayerInteractionFinished
untuk memberi tahu sesi saat serangkaian interaksi pemain dari pengontrol tertentu selesai. - Tambahkan
SessionError
dan gunakan diSessionResult
danLibraryResult
, bukan kode error, untuk memberikan informasi selengkapnya tentang error dan cara mengatasi error jika memungkinkan. - Publikasikan kode untuk aplikasi pengujian pengontrol media3 yang dapat digunakan untuk menguji interaksi dengan aplikasi yang memublikasikan sesi media.
- Menyebarkan tambahan yang diteruskan ke
MediaSession[Builder].setSessionExtras()
media3 kePlaybackStateCompat.getExtras()
pengontrol media1. - Memetakan error fatal dan non-fatal ke dan dari sesi platform.
PlaybackException
dipetakan ke status error fatalPlaybackStateCompat
.SessionError
yang dikirim ke pengontrol notifikasi media denganMediaSession.sendError(ControllerInfo, SessionError)
dipetakan ke error non-fatal diPlaybackStateCompat
yang berarti kode dan pesan error ditetapkan, tetapi status sesi platform tetap berbeda denganSTATE_ERROR
.
- Menambahkan
- UI:
- Ekstensi HLS:
- Memperbaiki bug saat playlist yang diputar non-utama tidak dimuat ulang selama pemutaran live (#1240).
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus antarmuka
Bundleable
. Ini termasuk menghapus semua kolom konstantaBundleable.Creator<Foo> CREATOR
. Pemanggil harus menggunakan metodeBundle toBundle()
danstatic Foo fromBundle(Bundle)
pada setiap jenis.
- Menghapus antarmuka
Versi 1.4.0-alpha02
7 Juni 2024
androidx.media3:media3-*:1.4.0-alpha02
dirilis.
Versi 1.4.0-alpha02 berisi commit ini.
- Perpustakaan Umum:
- Teruskan panggilan pencarian tanpa pengoperasian ke metode
BasePlayer.seekTo
danSimpleBasePlayer.handleSeek
yang dilindungi, bukan mengabaikannya. Jika mengimplementasikan metode ini dalam 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 untukMediaItem
non-gambar (seperti yang didokumentasikan).
- Teruskan panggilan pencarian tanpa pengoperasian ke metode
- ExoPlayer:
- Tambahkan
reset
keBasePreloadManager
untuk merilis semua sumber penyimpanan sekaligus mempertahankan instance pengelola pramuat. - Tambahkan
ExoPlayer.setPriority
(danBuilder.setPriority
) untuk menentukan nilai prioritas yang digunakan diPriorityTaskManager
dan untuk nilai penting MediaCodec dari API 35. - Memperbaiki masalah saat memperbarui waktu buffer ulang terakhir yang mengakibatkan
kunci
bs
(buffer buffer) salah di CMCD (#1124). - Tambahkan
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
untuk menunjukkan bahwa sumber telah dimuat ke akhir. Hal ini memungkinkan implementasiDefaultPreloadManager
danPreloadMediaSource.PreloadControl
kustom melakukan pramuat sumber berikutnya atau melakukan tindakan lain. - Memperbaiki bug saat melewatkan senyap di akhir item dapat memicu pengecualian pemutaran.
- Tambahkan
clear
kePreloadMediaSource
untuk menghapus periode pramuat. - Tambahkan kode error baru
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
yang digunakan saat resource codec diklaim kembali untuk tugas dengan prioritas yang lebih tinggi. - Izinkan
AdsMediaSource
memuat iklan pre-roll sebelum persiapan media konten awal selesai (#1358). - Memperbaiki bug saat pemutaran dipindahkan ke
STATE_ENDED
saat menyiapkan ulang live stream DASH multi-periode setelah periode aslinya telah dihapus dari manifes. - Ganti nama
onTimelineRefreshed
menjadionSourcePrepared
danonPrepared
menjadionTracksSelected
diPreloadMediaSource.PreloadControl
. Selain itu, ganti nama IntDef diDefaultPreloadManager.Stage
sebagaimana mestinya. - Menambahkan dukungan eksperimental untuk penjadwalan dinamis guna lebih menyelaraskan pekerjaan
dengan siklus aktif CPU dan menunda bangun hingga perender dapat melanjutkan.
Anda dapat mengaktifkannya menggunakan
experimentalSetDynamicSchedulingEnabled
saat menyiapkan instance ExoPlayer. - Menambahkan
Renderer.getDurationToProgressMs
.Renderer
dapat mengimplementasikan metode ini untuk menampilkan ke ExoPlayer durasi pemutaran yang harus dilanjutkan agar perender dapat melanjutkan. JikaExoPlayer
ditetapkan denganexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
akan memanggil metode ini saat menghitung waktu untuk menjadwalkan tugas kerjanya. - Tambahkan
MediaCodecAdapter#OnBufferAvailableListener
untuk memberi tahu saat buffer input dan output tersedia untuk digunakan olehMediaCodecRenderer
.MediaCodecRenderer
akan memberi sinyalExoPlayer
saat menerima callback ini, dan jikaExoPlayer
ditetapkan denganexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
akan menjadwalkan loop kerjanya karena perender dapat melakukan progres. - Gunakan class data untuk metode
LoadControl
, bukan parameter individual.
- Tambahkan
- Transformator:
- Mengatasi bug decoder yang menyebabkan jumlah saluran audio dibatasi pada stereo saat menangani input PCM.
- Saat memilih trek di
ExoPlayerAssetLoader
, abaikan batasan jumlah saluran audio karena hanya berlaku untuk pemutaran. - Ganti antarmuka
androidx.media3.transformer.Muxer
denganandroidx.media3.muxer.Muxer
dan hapusandroidx.media3.transformer.Muxer
. - Memperbaiki pemuatan gambar HEIC dari skema URI konten. (#1373).
- Sesuaikan durasi trek audio di
AudioGraphInput
untuk meningkatkan sinkronisasi AV.
- Ekstraktor:
- MPEG-TS: Meneruskan perubahan dengan 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 I-frame(#1150) dan streaming HLS H.262 (#1126).
- MP3: Memilih ukuran data dari frame
Info
daripada ukuran yang dilaporkan oleh aliran data yang mendasarinya (mis. ukuran file atau headerContent-Length
HTTP). Hal ini membantu mengecualikan data cuplikan yang tidak dapat diputar (misalnya, gambar album) dari penghitungan pencarian kecepatan bit konstan, sehingga pencarian lebih akurat (#1376). - MP3: Gunakan jumlah frame dan data lainnya dalam frame
Info
(jika ada) untuk menghitung kecepatan bit rata-rata untuk pencarian kecepatan bit konstan, bukan mengekstrak dari kecepatan bit frame setelah frameInfo
, yang mungkin berukuran kecil secara artifisial, misalnya framePCUT
(#1376).
- Audio:
- Memperbaiki atribut encoding DTS:X Profile 2 untuk pemutaran passthrough (#1299).
- Untuk pemutaran yang dialihkan, reset kolom pelacakan untuk penyelesaian streaming
di
DefaultAudioSink
sebelum memanggilAudioTrack.stop()
sehinggaAudioTrack.StreamEventCallback#onPresentationEnded
mengidentifikasi dengan benar saat semua data yang tertunda telah diputar. - Memperbaiki bug di
SilenceSkippingAudioProcessor
saat transisi antara format audio yang berbeda (misalnya stereo ke mono) dapat menyebabkan prosesor menampilkan pengecualian (#1352). - Implementasikan
MediaCodecAudioRenderer.getDurationToProgressUs
sehingga ExoPlayer akan menjadwalkan loop kerja utamanya secara dinamis ke saat MediaCodecAudioRenderer dapat membuat progres.
- Video:
- Memperbaiki logika penggantian dekoder untuk Dolby Vision agar dapat menggunakan dekoder AV1 yang kompatibel jika diperlukan (#1389).
- 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 agar terjadi selama ekstraksi,
bukan selama rendering (lihat
diagram arsitektur ExoPlayer
untuk mengetahui perbedaan antara ekstraksi dan rendering).
- Perubahan ini dapat diganti dengan memanggil kedua
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
danTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Lihat dokumen tentang penyesuaian untuk mengetahui cara menggabungkan komponen ini ke dalam instanceExoPlayer
. Metode ini (dan semua dukungan untuk decoding subtitel lama) akan dihapus dalam rilis mendatang. - Aplikasi dengan implementasi
SubtitleDecoder
kustom harus mengupdatenya untuk menerapkanSubtitleParser
(danSubtitleParser.Factory
, bukanSubtitleDecoderFactory
).
- Perubahan ini dapat diganti dengan memanggil kedua
- PGS: Memperbaiki decoding durasi proses untuk me-resolve
0
sebagai indeks warna, bukan nilai warna literal (#1367). - CEA-708: Abaikan nilai
rowLock
. Spesifikasi CEA-708-E S-2023 menyatakan bahwarowLock
dancolumnLock
harus dianggap benar, terlepas dari nilai yang ada dalam aliran data (dukungancolumnLock
tidak diterapkan, sehingga secara efektif diasumsikan selalu salah).- Perubahan ini awalnya disertakan dalam catatan rilis
1.3.0-alpha01
, tetapi perubahan tersebut tidak sengaja dikembalikan sebelum rilis1.3.0-rc01
. Hal ini sekarang telah diperbaiki, sehingga perubahan tersebut muncul kembali.
- Perubahan ini awalnya disertakan dalam catatan rilis
- CEA-708: Menghindari penambahan baris baru duplikat oleh penanganan naif perintah 'set pen location' dari ExoPlayer (#1315).
- Metadata:
- Memperbaiki pemetaan tag pengurutan MP4 ke ID3. Sebelumnya, tag 'sort album'
(
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. - Menerapkan frame ID3
TCON
keMediaMetadata.genre
(#1305).
- Memperbaiki pemetaan tag pengurutan MP4 ke ID3. Sebelumnya, tag 'sort album'
(
- Gambar:
- Menambahkan dukungan untuk petak thumbnail DASH non-persegi (#1300).
- Menambahkan dukungan AVIF untuk API 34+.
- DataSource:
- Mengizinkan
ByteArrayDataSource
me-resolve URI ke array byte selamaopen()
, bukan hard code saat pembuatan (#1405).
- Mengizinkan
- DRM:
- Mengizinkan penetapan
LoadErrorHandlingPolicy
diDefaultDrmSessionManagerProvider
(#1271).
- Mengizinkan penetapan
- Efek:
- Memperbaiki bug saat
TimestampWrapper
mengalami error saat digunakan denganExoPlayer#setVideoEffects
(#821). - Ubah ruang kerja warna SDR default dari warna linear ke video video SDR BT 709 listrik. Selain itu, berikan opsi ketiga untuk mempertahankan ruang warna asli.
- Mengizinkan penentuan urutan z yang tidak tentu untuk EditedMediaItemSequences (#1055).
- Pertahankan rentang luminans yang konsisten di berbagai konten HDR (menggunakan rentang HLG).
- Menambahkan dukungan untuk overlay Ultra HDR (bitmap) pada konten HDR.
- Izinkan efek
SeparableConvolution
digunakan sebelum API 26.
- Memperbaiki bug saat
- Ekstensi IMA:
- Mempromosikan API yang diperlukan aplikasi untuk memutar streaming iklan DAI ke stabil.
- Menambahkan
replaceAdTagParameters(Map <String, String>)
keImaServerSideAdInsertionMediaSource.AdLoader
yang memungkinkan penggantian parameter tag iklan saat runtime. - Memperbaiki bug yang menyebabkan
VideoAdPlayer.VideoAdPlayerCallback.onError
tidak dipanggil saat error pemutar terjadi selama pemutaran iklan (#1334). - Menambahkan IMA SDK versi 3.33.0 untuk memperbaiki
NullPointerException
saat menggunakan URI tag iklandata://
(#700).
- Sesi:
- Menyembunyikan pencari di notifikasi media untuk live stream dengan tidak menyetel durasi ke dalam metadata sesi platform (#1256).
- Selaraskan konversi
MediaMetadata
keMediaDescriptionCompat
, 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 mengupdatePlaybackState
sesi platform ke status error dengan informasi error yang diberikan (#543).
- Ekstensi Cronet:
- Perbaiki
SocketTimeoutException
diCronetDataSource
. Pada beberapa versi Cronet, permintaan yang diberikan oleh callback tidak selalu sama. Hal ini menyebabkan callback tidak selesai dan meminta waktu habis (https://issuetracker.google.com/328442628).
- Perbaiki
- Ekstensi HLS:
- Memperbaiki bug saat sampel EMSG yang tertunda yang menunggu penghentian
didelegasikan di
HlsSampleStreamWrapper
dengan offset yang salah yang menyebabkanIndexOutOfBoundsException
atauIllegalArgumentException
(#1002). - Memperbaiki bug saat playlist non-utama terus dimuat ulang untuk streaming LL-HLS (#1240).
- Memperbaiki bug saat mengaktifkan CMCD untuk HLS dengan segmen inisialisasi
yang menghasilkan
Source Error
danIllegalArgumentException
.
- Memperbaiki bug saat sampel EMSG yang tertunda yang menunggu penghentian
didelegasikan di
- Ekstensi DASH:
- Ekstensi Cast:
- Memperbaiki bug yang mengonversi judul album
MediaQueueItem
ke artis di item media Media3 (#1255).
- Memperbaiki bug yang mengonversi judul album
- Aplikasi demo:
- Mengizinkan penyetelan mode pengulangan dengan argumen
Intent
dari command line (#1266).
- Mengizinkan penyetelan mode pengulangan dengan argumen
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus metode
setContentTypePredicate(Predicate)
dariDefaultHttpDataSource
,OkHttpDataSource
, danCronetDataSource
. Sebagai gantinya, gunakan metode yang setara di setiapXXXDataSource.Factory
. - Menghapus konstruktor
OkHttpDataSource
danOkHttpDataSourceFactory
. GunakanOkHttpDataSource.Factory
sebagai gantinya. - Menghapus
PlayerMessage.setHandler(Handler)
. Sebagai gantinya, gunakansetLooper(Looper)
. - Hapus kolom
Timeline.Window.isLive
. Sebagai gantinya, gunakan metodeisLive()
. - Menghapus konstruktor
DefaultHttpDataSource
. Sebagai gantinya, gunakanDefaultHttpDataSource.Factory
. - Menghapus
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. MenggunakanDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
sebagai gantinya. - Menghapus
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. Sebagai gantinya, gunakanMediaCodecInfo.canReuseCodec(Format, Format)
. - Hapus metode
DrmSessionManager.DUMMY
dangetDummyDrmSessionManager()
. GunakanDrmSessionManager.DRM_UNSUPPORTED
sebagai gantinya. - Hapus
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. Gunakan overload yang menggunakanDecoderReuseEvaluation
. - Hapus konstanta IntDef
RendererSupport.FormatSupport
danFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
. Gunakan IntDef dan konstanta yang setara diandroidx.media3.common.C
sebagai gantinya (misalnya,C.FORMAT_HANDLED
).
- Menghapus metode
Versi 1.4.0-alpha01
17 April 2024
androidx.media3:media3-*:1.4.0-alpha01
dirilis.
Versi 1.4.0-alpha01 berisi commit ini.
- ExoPlayer:
- Tambahkan
BasePreloadManager
yang mengoordinasikan pramuat untuk beberapa sumber berdasarkan prioritas yang ditentukan olehrankingData
-nya. Penyesuaian dapat dilakukan dengan memperluas class ini. TambahkanDefaultPreloadManager
yang menggunakanPreloadMediaSource
untuk melakukan pramuat contoh media sumber ke dalam memori, dan menggunakanrankingData
bilangan bulat yang menunjukkan indeks item di UI. - Menambahkan
PlayerId
ke sebagian besar metodeLoadControl
untuk mengaktifkan implementasiLoadControl
guna mendukung beberapa pemain. - Menghapus
Buffer.isDecodeOnly()
danC.BUFFER_FLAG_DECODE_ONLY
. Tanda ini tidak perlu ditetapkan karena perender dan decoder akan memutuskan untuk melewati buffer berdasarkan stempel waktu. ImplementasiRenderer
kustom harus memeriksa apakah waktu buffer setidaknyaBaseRenderer.getLastResetPositionUs()
untuk menentukan apakah contoh harus ditampilkan. ImplementasiSimpleDecoder
kustom dapat memeriksaisAtLeastOutputStartTimeUs
jika diperlukan atau menandai buffer lain denganDecoderOutputBuffer.shouldBeSkipped
untuk melewatinya. - Mengizinkan nilai null ditampilkan oleh
TargetPreloadStatusControl.getTargetPreloadStatus(T)
untuk menunjukkan bahwa tidak melakukan pramuatMediaSource
denganrankingData
yang diberikan. - Menambahkan
remove(MediaSource)
keBasePreloadManager
.
- Tambahkan
- Transformator:
- Tambahkan
audioConversionProcess
danvideoConversionProcess
keExportResult
yang menunjukkan cara pembuatan masing-masing jalur dalam file output. - Pemeriksaan level H.264 pengoptimalan trim yang santai.
- Menambahkan dukungan untuk mengubah antara media input SDR dan HDR secara berurutan.
- Menambahkan dukungan untuk efek audio tingkat komposisi.
- Menambahkan dukungan untuk melakukan transcoding gambar Ultra HDR ke video HDR.
- Memperbaiki masalah saat
DefaultAudioMixer
tidak menghasilkan jumlah byte yang benar setelah direset dan digunakan kembali.
- Tambahkan
- Video:
- Memperbaiki masalah saat
Listener.onRenderedFirstFrame()
muncul terlalu awal saat mengganti platform di tengah pemutaran.
- Memperbaiki masalah saat
- DataSource:
- Implementasikan dukungan untuk URI resource mentah
android.resource://package/id
denganpackage
yang berbeda dengan paket aplikasi saat ini. Sebelumnya, tindakan ini tidak didokumentasikan, tetapi merupakan cara yang lebih efisien untuk mengakses resource di paket lain daripada berdasarkan nama. - Segera periksa bahwa
url
adalah non-null di konstruktorDataSpec
. Parameter ini sudah dianotasi sebagai non-null.
- Implementasikan dukungan untuk URI resource mentah
- Efek:
- Mendukung beberapa perubahan kecepatan dalam
EditedMediaItem
atauComposition
yang sama dalamSpeedChangeEffect
. - 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 SurfaceView Debug Transformer.
- Mengupdate implementasi matriks Overlay agar konsisten dengan
dokumentasi dengan membalik nilai x dan y yang diterapkan dalam
setOverlayFrameAnchor()
. Jika menggunakanOverlaySettings.Builder.setOverlayFrameAnchor()
, balikkan nilai x dan y dengan mengalikannya dengan-1
.
- Mendukung beberapa perubahan kecepatan dalam
- Sesi:
- Ubah default
CommandButton.enabled
menjaditrue
dan pastikan nilainya dapat tetap salah untuk pengontrol meskipun perintah terkait tersedia. - Menambahkan konstanta ikon untuk
CommandButton
yang harus digunakan, bukan resource ikon kustom. - Menambahkan
MediaSessionService.isPlaybackOngoing()
untuk memungkinkan aplikasi mengkueri apakah layanan perlu dihentikan dionTaskRemoved()
(#1219). - Tambahkan
MediaSessionService.pauseAllPlayersAndStopSelf()
yang dengan mudah memungkinkan menjeda pemutaran semua sesi dan memanggilstopSelf
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.
- Ubah default
- Download:
- Pastikan
DownloadHelper
tidak membocorkan instanceRenderer
yang belum dirilis, yang pada akhirnya dapat mengakibatkan aplikasi error denganIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- Pastikan
- Utilitas Pengujian:
- Implementasikan
onInit()
danonRelease()
diFakeRenderer
. - Ubah metode
TestPlayerRunHelper.runUntil/playUntil
agar gagal pada error nonfatal (misalnya yang dilaporkan keAnalyticsListener.onVideoCodecError
). Gunakan rantai metodeTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
baru untuk menonaktifkan perilaku ini.
- Implementasikan
- Aplikasi demo:
- Gunakan
DefaultPreloadManager
dalam aplikasi demo singkat.
- Gunakan
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus
CronetDataSourceFactory
. Sebagai gantinya, gunakanCronetDataSource.Factory
. - Hapus beberapa konstruktor
DataSpec
. Sebagai gantinya, gunakanDataSpec.Builder
.
- Menghapus
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.
- Perpustakaan Umum:
- Tambahkan
Format.labels
untuk mengizinkan label yang dilokalkan atau label alternatif lainnya.
- Tambahkan
- ExoPlayer:
- Memperbaiki masalah saat
PreloadMediaPeriod
tidak dapat mempertahankan aliran saat dipramuat lagi. - Menerapkan
TrackSelectionResult
yang sesuai dan benar ke periode pemutaran dalam pemilihan ulang jalur. - Memulai perender yang diaktifkan lebih awal hanya setelah melanjutkan periode pemutaran saat melakukan transisi antar-item media (#1017).
- Menambahkan jenis nilai yang ditampilkan yang tidak ada ke aturan
-keepclasseswithmembers
proguard untukDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Memperbaiki masalah saat
- Transformator:
- Menambahkan solusi untuk pengecualian yang ditampilkan karena
MediaMuxer
tidak 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 'masuk akal' (>=10 fps) daripada trek video dengan kecepatan frame yang lebih rendah atau tidak disetel. Hal ini untuk memastikan pemain memilih trek video 'nyata' dalam MP4 yang diekstrak dari foto gerakan yang dapat berisi dua trek HEVC yang salah satunya memiliki resolusi 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: Mengisi
Format.averageBitrate
dari frame metadata sepertiXING
danVBRI
. - MPEG-TS: Mengembalikan perubahan yang bertujuan untuk memastikan frame terakhir dirender dengan meneruskan unit akses terakhir streaming ke antrean contoh (#7909). Hal ini disebabkan oleh perubahan yang menyebabkan masalah baru dengan streaming HLS khusus I-frame (#1150) dan streaming HLS H.262 (#1126).
- Audio:
- Izinkan pemulihan perender dengan menonaktifkan pengurangan beban jika trek audio gagal diinisialisasi dalam mode offload.
- Video:
- Menambahkan solusi untuk masalah perangkat di Galaxy Tab S7 FE, Chromecast dengan Google TV, dan Lenovo M10 FHD Plus yang menyebabkan streaming H265 60 fps ditandai sebagai tidak didukung
- Menambahkan solusi yang memastikan frame pertama selalu dirender saat tunneling meskipun perangkat tidak melakukan ini secara otomatis seperti yang diperlukan oleh API (#1169). (#966).
- Memperbaiki masalah saat penanganan info warna HDR menyebabkan kesalahan perilaku codec dan mencegah pengalihan format adaptif untuk trek video SDR (#1158).
- Teks:
- WebVTT: Mencegah isyarat berturut-turut secara langsung agar tidak membuat
instance
CuesWithTiming
tambahan yang palsu dariWebvttParser.parse
(#1177).
- WebVTT: Mencegah isyarat berturut-turut secara langsung agar tidak membuat
instance
- DRM:
- Mengatasi
NoSuchMethodError
yang dapat ditampilkan oleh frameworkMediaDrm
, bukanResourceBusyException
atauNotProvisionedException
di beberapa perangkat Android 14 (#1145).
- Mengatasi
- Efek:
- Peningkatan pemetaan warna PQ ke SDR dengan mengonversi ruang warna.
- Sesi:
- UI:
- Penggantian untuk menyertakan nama bahasa trek audio jika
Locale
tidak dapat mengidentifikasi nama tampilan (#988).
- Penggantian untuk menyertakan nama bahasa trek audio jika
- Ekstensi DASH:
- Mengisi semua elemen
Label
dari manifes ke dalamFormat.labels
(#1054).
- Mengisi semua elemen
- Ekstensi RTSP:
- Melewati nilai informasi sesi kosong (i-tag) di penguraian SDP (#1087).
- Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Nonaktifkan ekstensi MIDI sebagai dependensi lokal secara default karena memerlukan repositori Maven tambahan untuk dikonfigurasi. Pengguna yang memerlukan modul ini dari dependensi lokal dapat mengaktifkannya kembali.
Versi 1.3.0
6 Maret 2024
androidx.media3:media3-*:1.3.0
dirilis.
Versi 1.3.0 berisi commit ini.
- Perpustakaan Umum:
- Implementasikan dukungan untuk URI resource mentah
android.resource://package/[type/]name
denganpackage
yang berbeda dengan paket aplikasi saat ini. Hal ini selalu didokumentasikan agar berfungsi, tetapi hingga saat ini tidak diterapkan dengan benar. - Menormalkan jenis MIME yang ditetapkan oleh kode aplikasi atau membaca dari media agar menjadi huruf kecil sepenuhnya.
- Tentukan iklan dengan
MediaItem
lengkap, bukanUri
tunggal diAdPlaybackState
. - Tingkatkan
minSdk
menjadi 19 (Android KitKat). Hal ini diselaraskan dengan semua library AndroidX lainnya, dan diperlukan agar kami dapat mengupgrade ke versi terbaru dependensi Android kami. - Isi
artworkUri
danartworkData
diMediaMetadata.Builder.populate(MediaMetadata)
jika setidaknya salah satunya adalah non-null (#964).
- Implementasikan dukungan untuk URI resource mentah
- ExoPlayer:
- Tambahkan
PreloadMediaSource
danPreloadMediaPeriod
yang memungkinkan aplikasi melakukan pramuat sumber media konten di posisi awal tertentu sebelum pemutaran.PreloadMediaSource
menangani penyiapan sumber media konten untuk menerimaTimeline
, menyiapkan dan menyimpan dalam cache periode di posisi awal yang ditentukan, memilih trek, dan memuat data media untuk periode tersebut. Aplikasi mengontrol progres pramuat dengan menerapkanPreloadMediaSource.PreloadControl
dan menyetel sumber yang dipramuat ke pemutar untuk diputar. - Menambahkan
ExoPlayer.setImageOutput
yang mengizinkan aplikasi untuk menyetelImageRenderer.ImageOutput
. DefaultRenderersFactory
sekarang menyediakanImageRenderer
kepada pemain secara default denganImageOutput
danImageDecoder.Factory.DEFAULT
null.- Memancarkan peristiwa
Player.Listener.onPositionDiscontinuity
saat senyap dilewati (#765). - Menambahkan dukungan eksperimental untuk mengurai subtitel selama ekstraksi. Anda
dapat mengaktifkannya menggunakan
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Dukung sumber media adaptif dengan
PreloadMediaSource
. - Implementasikan
HttpEngineDataSource
,HttpDataSource
menggunakan HttpEngine API. - Mencegah subclass
CompositeSequenceableLoader
. Komponen ini sebelumnya dapat diperluas, tetapi tidak pernah dibuat subclass-nya dalam library. Penyesuaian dapat dilakukan dengan menggabungkan instance menggunakan pola dekorator dan mengimplementasikanCompositeSequenceableLoaderFactory
kustom. - Memperbaiki masalah jika pengulangan waktu yang sama menyebabkan metadata dari item ini dihapus (#1007).
- Ganti nama metode
experimentalSetSubtitleParserFactory
diBundledChunkExtractor.Factory
danDefaultHlsExtractorFactory
menjadisetSubtitleParserFactory
, lalu jangan izinkan penerusannull
. Gunakan metodeexperimentalParseSubtitlesDuringExtraction(boolean)
baru untuk mengontrol perilaku penguraian. - Menambahkan dukungan untuk menyesuaikan
SubtitleParser.Factory
yang digunakan selama ekstraksi. Hal ini dapat dilakukan denganMediaSource.Factory.setSubtitleParserFactory()
. - Tambahkan awalan sumber ke semua kolom
Format.id
yang dihasilkan dariMergingMediaSource
. Hal ini membantu mengidentifikasi sumber mana yang menghasilkanFormat
(#883). - Perbaiki ekspresi reguler yang digunakan untuk memvalidasi nama kunci Common Media Client Data (CMCD) kustom dengan mengubahnya agar hanya memeriksa tanda hubung (#1028).
- Hentikan parameter kueri CMCD encoding ganda (#1075).
- Tambahkan
- Transformator:
- Menambahkan dukungan untuk meratakan video gerak lambat H.265/HEVC SEF.
- Tingkatkan kecepatan transmuxing, terutama untuk hasil edit 'hapus video'.
- Tambahkan API untuk memastikan file output dimulai di 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 trim 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 pemain berbasis iOS (#829).
- Pemilihan Trek:
- Tambahkan
DefaultTrackSelector.selectImageTrack
untuk mengaktifkan pemilihan jalur image. - Tambahkan
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
untuk 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 pengekstrak MP4 untuk mengambil
nilai
ColorInfo.colorSpace
,ColorInfo.colorTransfer
, danColorInfo.colorRange
(#692). - MP3: Gunakan pencarian kecepatan bit konstan (CBR) untuk mencari file dengan header
Info
(CBR yang setara dengan headerXing
). Sebelumnya, kita menggunakan tabel pencarian dari headerInfo
, tetapi ini menghasilkan pencarian yang kurang tepat dibandingkan jika kita mengabaikannya dan menganggap file tersebut adalah CBR. - MPEG2-TS: Menambahkan dukungan DTS, DTS-LBR, dan DTS:X Profile2 (#275).
- Mengekstrak jenis audio dari deskripsi TS dan memetakannya ke flag peran, sehingga pengguna dapat memilih trek audio yang lebih tepat (#973).
- Menambahkan penguraian AV1C tambahan ke pengekstrak MP4 untuk mengambil
nilai
- Audio:
- Video:
- Ubah konstruktor
MediaCodecVideoRenderer
yang menggunakan argumenVideoFrameProcessor.Factory
dan ganti dengan konstruktor yang menggunakan argumenVideoSinkProvider
. Aplikasi yang ingin memasukkanVideoFrameProcessor.Factory
kustom dapat membuat instanceCompositingVideoSinkProvider
yang menggunakanVideoFrameProcessor.Factory
kustom dan meneruskan penyedia sink video keMediaCodecVideoRenderer
.
- Ubah konstruktor
- Teks:
- Memperbaiki serialisasi isyarat bitmap untuk mengatasi error
Tried to marshall a Parcel that contained Binder objects
saat menggunakanDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: Abaikan nilai
rowLock
. Spesifikasi CEA-708-E S-2023 menyatakan bahwarowLock
dancolumnLock
harus dianggap benar, terlepas dari nilai yang ada dalam aliran data (dukungancolumnLock
tidak diterapkan, sehingga secara efektif diasumsikan selalu salah).
- Memperbaiki serialisasi isyarat bitmap untuk mengatasi error
- Gambar:
- Menambahkan dukungan untuk thumbnail DASH. Gambar petak akan dipangkas dan thumbnail
satu per satu diberikan ke
ImageOutput
mendekati waktu presentasinya.
- Menambahkan dukungan untuk thumbnail DASH. Gambar petak akan dipangkas dan thumbnail
satu per satu diberikan ke
- 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 jeda 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.setPlayClearContentWithoutKey
atauDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- 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 jeda 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
- Ekstensi IMA:
- Memperbaiki masalah saat iklan DASH dan HLS tanpa ekstensi file yang sesuai tidak dapat diputar.
- Sesi:
- Menonaktifkan deteksi klik dua kali untuk aplikasi TV (#962).
- Memperbaiki masalah saat
MediaItem.RequestMetadata
yang hanya memiliki tambahan non-null tidak dikirim antara pengontrol media dan sesi. - Tambahkan konstruktor ke
MediaLibrarySession.Builder
yang hanya menggunakanContext
, bukanMediaLibraryService
.
- Ekstensi HLS:
- Kurangi
HlsMediaPeriod
ke visibilitas pribadi paket. Jenis ini tidak boleh bergantung secara langsung dari luar paket HLS. - Resolve mencari awal segmen dengan lebih efisien (#1031).
- Kurangi
- Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Decoder MIDI: Mengabaikan pesan peristiwa SysEx (#710).
- Utilitas Pengujian:
- Jangan jeda pemutaran dalam
TestPlayerRunHelper.playUntilPosition
. Pengujian akan mempertahankan pemutaran dalam status diputar, tetapi menangguhkan progres hingga pengujian dapat menambahkan pernyataan dan tindakan lebih lanjut.
- Jangan jeda pemutaran dalam
- Aplikasi demo:
- Tambahkan modul demo singkat untuk mendemonstrasikan penggunaan
PreloadMediaSource
dengan kasus penggunaan konten pendek.
- Tambahkan modul demo singkat 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/maxOffset
terus 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 pemilihan trek setelah mencari ke nol dalam live stream salah membiarkan streaming dimulai pada posisi default (#9347).
- Memperbaiki masalah saat instance baru
CmcdData.Factory
menerima nilai negatif untukbufferedDurationUs
dari sumber potongan, sehingga menghasilkanIllegalArgumentException
(#888).
- Memperbaiki masalah saat pencarian manual di luar
rentang
- Transformator:
- Mengatasi masalah yang mungkin muncul saat encoder muncul pada waktu konfigurasi karena penetapan kecepatan operasi yang tinggi.
- Ekstraktor:
- Tandai trek HEVC sekunder (tidak dapat diputar) di foto motion JPEG sebagai
ROLE_FLAG_ALTERNATE
agar tidak dipilih secara otomatis untuk pemutaran karena resolusinya yang lebih tinggi. - Memperbaiki deteksi keyframe yang salah untuk streaming TS H264 (#864).
- Memperbaiki perkiraan durasi streaming TS yang lebih panjang dari 47721 detik (#855).
- Tandai trek HEVC sekunder (tidak dapat diputar) di foto motion JPEG sebagai
- Audio:
- Memperbaiki penanganan EOS untuk
SilenceSkippingAudioProcessor
saat 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
MediaMetadata
hanya diisi dari komentar Vorbis dengan kunci berhuruf besar (#876). - Tangkap
OutOfMemoryError
saat mengurai frame ID3 yang sangat besar, yang berarti pemutaran dapat dilanjutkan tanpa info tag, bukan pemutaran gagal sepenuhnya.
- Memperbaiki bug saat
- DRM:
- Memperluas solusi untuk URL lisensi ClearKey
https://default.url
palsu ke API 33+ (sebelumnya solusi ini hanya berlaku di API 33) (#837). - Memperbaiki
ERROR_DRM_SESSION_NOT_OPENED
saat beralih dari konten terenkripsi ke kosong tanpa permukaan yang melekat pada pemutar. Error ini terjadi karena kesalahan penggunaan decoder aman untuk memutar konten yang jelas.
- Memperluas solusi untuk URL lisensi ClearKey
- Sesi:
- Tempatkan kunci dan nilai kustom dalam
MediaMetadataCompat
keMediaMetadata.extras
danMediaMetadata.extras
keMediaMetadataCompat
(#756, #802). - Memperbaiki penyiaran
notifyChildrenChanged
untuk pengontrol lama (#644). - Memperbaiki bug saat menyetel waktu negatif untuk timer
setWhen
notifikasi yang dinonaktifkan akan menyebabkan error di beberapa perangkat (#903). - Memperbaiki
IllegalStateException
saat pengontrol notifikasi media belum selesai terhubung saat update notifikasi pertama diminta (#917).
- Tempatkan kunci dan nilai kustom dalam
- UI:
- Ekstensi DASH:
- Mengurai "f800" sebagai jumlah saluran 5 untuk Dolby dalam manifes DASH (#688).
- Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
- Ekstensi Cast:
- Membersihkan pembuatan
Timeline
agar tidak membuat aplikasi error saat memuat media gagal di perangkat transmisi (#708).
- Membersihkan pembuatan
Versi 1.2.0
15 November 2023
- Perpustakaan Umum:
- Tambahkan parameter
@Nullable Throwable
ke metode dalam antarmukaLog.Logger
. Parametermessage
ke metode ini tidak lagi berisi informasi apa pun tentangThrowable
yang 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
TrackSelectorResult
danSimpleDecoder
(#6792). - Ubah perilaku UI dan notifikasi default di
Util.shouldShowPlayButton
untuk menampilkan tombol "putar" saat pemutaran disembunyikan sementara (mis. karena hilangnya fokus audio sementara). Perilaku lama dapat dipertahankan menggunakanPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
atauMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Upgrade
androidx.annotation:annotation-experimental
ke1.3.1
untuk memperbaiki https://issuetracker.google.com/251172715. - Pindahkan
ExoPlayer.setAudioAttributes
ke antarmukaPlayer
.
- Tambahkan parameter
- ExoPlayer:
- Memperbaiki pencarian masalah di aliran AC4 yang disebabkan oleh tidak mengidentifikasi sampel khusus dekode dengan benar (#11000).
- Menambahkan penghentian 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_OUTPUT
jika pemutaran dicoba saat tidak ada output audio yang sesuai tersedia, atau jika semua output yang sesuai terputus selama pemutaran. Alasan penyembunyian akan dihapus ketika output yang sesuai terhubung. - Tambahkan
MediaSource.canUpdateMediaItem
danMediaSource.updateMediaItem
untuk menerima updateMediaItem
setelah pembuatan melaluiPlayer.replaceMediaItem(s)
. - Mengizinkan update
MediaItem
untuk semua classMediaSource
yang disediakan oleh library melaluiPlayer.replaceMediaItem(s)
(#33, #9978). - Mengganti nama
MimeTypes.TEXT_EXOPLAYER_CUES
menjadiMimeTypes.APPLICATION_MEDIA3_CUES
. - Tambahkan
PngExtractor
yang mengirim dan membaca seluruh file PNG ke dalamTrackOutput
sebagai satu sampel. - Meningkatkan kualitas metode
SequenceableLoader.continueLoading(long)
di antarmukaSequenceableLoader
keSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
berisi parameter tambahan, termasukplaybackSpeed
danlastRebufferRealtimeMs
, selainplaybackPositionUs
yang ada. - Meningkatkan metode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
di antarmukaChunkSource
keChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Menambahkan kolom tambahan ke logging Common Media Client Data (CMCD): kekurangan buffer (
bs
), batas waktu (dl
), kecepatan pemutaran (pr
), dan startup (su
) (#8699). - Menambahkan bitdepth luma dan kroma ke
ColorInfo
(#491). - Menambahkan kolom lain ke logging Data Klien Media Umum (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
ConcurrentModificationException
diExperimentalBandwidthMeter
(#612). - Tambahkan parameter
MediaPeriodId
keCompositeMediaSource.getMediaTimeForChildMediaTime
. - Mendukung
ClippingMediaSource
(dan sumber lainnya dengan offset waktu periode/periode) diConcatenatingMediaSource2
(#11226). - Ubah
BaseRenderer.onStreamChanged()
agar juga menerima argumenMediaPeriodId
.
- Transformator:
- Mengurai data rotasi EXIF untuk input gambar.
- Hapus jenis anotasi
TransformationRequest.HdrMode
dan konstanta terkaitnya. GunakanComposition.HdrMode
dan konstanta terkaitnya sebagai gantinya. - Sederhanakan
OverlaySettings
untuk memperbaiki masalah rotasi. - Mengubah parameter
frameRate
dandurationUs
dariSampleConsumer.queueInputBitmap
menjadiTimestampIterator
.
- Pemilihan Trek:
- Menambahkan
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
untuk secara eksplisit mengizinkan atau melarang adaptasi yang tidak lancar. Defaultnya tetap pada perilakutrue
saat ini.
- Menambahkan
- Ekstraktor:
- MPEG-TS: Memastikan frame terakhir dirender dengan meneruskan unit akses terakhir aliran ke antrean contoh (#7909).
- Memperbaiki kesalahan ketik saat menentukan
rotationDegrees
. MengubahprojectionPosePitch
menjadiprojectionPoseRoll
(#461). - Hapus asumsi bahwa instance
Extractor
dapat langsung diperiksa denganinstanceof
. Jika Anda ingin akses runtime ke detail implementasiExtractor
, Anda harus memanggilExtractor.getUnderlyingInstance
terlebih dahulu. - Menambahkan
BmpExtractor
. - Menambahkan
WebpExtractor
. - Menambahkan
HeifExtractor
. - Tambahkan
dukungan QuickTime klasik
ke
Mp4Extractor
.
- Audio:
- Menambahkan dukungan untuk PCM big-endian 24/32 bit dalam MP4 dan Matroska, dan mengurai
encoding PCM untuk
lpcm
dalam MP4. - Menambahkan dukungan untuk mengekstrak audio Vorbis dalam format MP4.
- Tambahkan
AudioSink.getFormatOffloadSupport(Format)
yang mengambil tingkat dukungan pengurangan beban yang dapat disediakan oleh sink untuk format tersebut melaluiDefaultAudioOffloadSupportProvider
. Metode ini menampilkanAudioOffloadSupport
baru yang berisiisFormatSupported
,isGaplessSupported
, danisSpeedChangeSupported
. - Menambahkan
AudioSink.setOffloadMode()
yang mengonfigurasi konfigurasi pengurangan beban di sink audio. Defaultnya adalahAudioSink.OFFLOAD_MODE_DISABLED
. - Pengurangan beban dapat diaktifkan melalui
setAudioOffloadPreference
diTrackSelectionParameters
. Jika preferensi yang ditetapkan adalah untuk diaktifkan, perangkat mendukung pengurangan beban untuk format tersebut, dan pemilihan trek adalah satu trek audio, maka pengurangan beban audio akan diaktifkan. - Jika
audioOffloadModePreference
ditetapkan keAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
, makaDefaultTrackSelector
hanya akan memilih trek audio dan hanya jika format trek tersebut didukung saat offload. Jika tidak ada trek audio yang didukung dalam pemindahan, tidak ada trek yang akan dipilih. - Menonaktifkan dukungan tanpa jeda untuk pengurangan beban saat level pra-API 33 karena masalah posisi pemutaran setelah transisi jalur.
- Hapus parameter
enableOffload
dari tanda tangan metodeDefaultRenderersFactory.buildAudioSink
. - Hapus metode
DefaultAudioSink.Builder.setOffloadMode
. - Hapus nilai intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Menambahkan dukungan untuk metadata Opus tanpa jeda selama pemutaran offload.
- Mengizinkan pemulihan perender dengan menonaktifkan pengurangan beban jika gagal saat penulisan pertama (#627).
- Aktifkan Penjadwalan Offload secara default untuk pemutaran khusus audio yang dialihkan.
- Hapus
ExoPlayer.experimentalSetOffloadSchedulingEnabled
danAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - Mengganti nama
onExperimentalSleepingForOffloadChanged
sebagaionSleepingForOffloadChanged
danonExperimentalOffloadedPlayback
sebagaionOffloadedPlayback
. - Pindahkan antarmuka dan definisi
TrackSelectionParameters
terkait mode pengurangan beban audio ke classAudioOffloadPreferences
bagian dalam. - Tambahkan callback
onAudioTrackInitialized
danonAudioTrackReleased
keAnalyticsListener
,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 dalam MP4 dan Matroska, dan mengurai
encoding PCM untuk
- Video:
- Izinkan
MediaCodecVideoRenderer
menggunakanVideoFrameProcessor.Factory
kustom. - Memperbaiki bug saat frame pertama tidak dapat dirender jika streaming audio dimulai dengan stempel waktu negatif (#291).
- Izinkan
- Teks:
- Menghapus
ExoplayerCuesDecoder
. Jalur teks dengansampleMimeType = application/x-media3-cues
kini ditangani langsung olehTextRenderer
tanpa memerlukan instanceSubtitleDecoder
.
- Menghapus
- Metadata:
MetadataDecoder.decode
tidak akan lagi dipanggil untuk contoh "khusus dekode" karena implementasi tersebut harus tetap menampilkan null.
- Efek:
- Tambahkan
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
input bitmap yang mengantrekan berdasarkan stempel waktu. - Ubah
VideoFrameProcessor.registerInputStream()
menjadi tidak memblokir. Aplikasi harus mengimplementasikanVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Mengubah parameter
frameRate
dandurationUs
dariVideoFrameProcessor.queueInputBitmap
menjadiTimestampIterator
.
- Tambahkan
- Ekstensi IMA:
- Memperbaiki bug saat live stream DASH multi-periode yang bukan item pertama dalam playlist dapat menampilkan pengecualian (#571).
- Rilis StreamManager sebelum memanggil
AdsLoader.destroy()
- Menambahkan versi IMA SDK ke 3.31.0.
- Sesi:
- Menetapkan perilaku layanan latar depan notifikasi ke
FOREGROUND_SERVICE_IMMEDIATE
diDefaultMediaNotificationProvider
(#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.
- Konversi peristiwa tombol media yang diterima oleh
MediaSessionService.onStartCommand()
dalam Media3, bukan merutekannya ke sesi platform dan kembali ke Media3. Dengan demikian, pengontrol pemanggil selalu menjadi pengontrol notifikasi media dan aplikasi dapat dengan mudah mengenali panggilan yang berasal dari notifikasi dengan cara yang sama pada semua level API yang didukung. - Memperbaiki bug saat
MediaController.getCurrentPosition()
tidak maju saat terhubung keMediaSessionCompat
lama. - Tambahkan
MediaLibrarySession.getSubscribedControllers(mediaId)
untuk memudahkan Anda. - Ganti
MediaLibrarySession.Callback.onSubscribe()
untuk menegaskan ketersediaan ID induk yang menjadi langganan pengontrol. Jika berhasil, langganan akan diterima dannotifyChildrenChanged()
akan segera dipanggil untuk memberi tahu browser (#561). - Tambahkan modul demo sesi untuk Automotive OS dan aktifkan demo sesi untuk Android Auto.
- Jangan menetapkan antrean sesi framework saat
COMMAND_GET_TIMELINE
tidak tersedia untuk pengontrol notifikasi media. Dengan Android Auto sebagai pengontrol klien yang membaca dari sesi framework, hal ini mengakibatkan tombolqueue
di UI Android Auto tidak ditampilkan (#339). - Menggunakan
DataSourceBitmapLoader
secara 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.Listener
untuk perangkat Wear OS yang menangani penghentian pemutaran karenaPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
dengan meluncurkan dialog sistem agar pengguna dapat menghubungkan output audio yang sesuai (mis. headphone bluetooth). Pemroses akan melanjutkan pemutaran otomatis jika perangkat yang sesuai terhubung dalam waktu tunggu yang dapat dikonfigurasi (default-nya adalah 5 menit).
- Tambahkan implementasi
- Download:
- Deklarasikan jenis layanan latar depan "sinkronisasi data" untuk
DownloadService
guna kompatibilitas Android 14. Saat menggunakan layanan ini, aplikasi juga perlu menambahkandataSync
sebagaiforegroundServiceType
dalam manifes dan menambahkan izinFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- Deklarasikan jenis layanan latar depan "sinkronisasi data" untuk
- Ekstensi HLS:
- Muat 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. Tindakan ini
memiliki dukungan yang lebih baik untuk menggabungkan subtitel yang tumpang-tindih, termasuk
menyelesaikan kedipan saat beralih antarsegmen subtitel. Anda
dapat mengaktifkannya menggunakan
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- Ekstensi RTSP:
- Memperbaiki kondisi race yang dapat menyebabkan
IndexOutOfBoundsException
saat melakukan penggantian ke TCP, atau pemutaran macet di beberapa situasi. - Memeriksa status di 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.):
- Rilis modul dekoder MIDI yang menyediakan dukungan untuk pemutaran file MIDI standar menggunakan library Jsyn untuk menyintesis audio.
- Tambahkan
DecoderOutputBuffer.shouldBeSkipped
untuk menandai buffer output yang tidak perlu ditampilkan secara langsung. Opsi ini lebih disarankan daripadaC.BUFFER_FLAG_DECODE_ONLY
yang tidak akan digunakan lagi. - Tambahkan
Decoder.setOutputStartTimeUs
danSimpleDecoder.isAtLeastOutputStartTimeUs
untuk memungkinkan decoder menghapus sampel khusus dekode sebelum waktu mulai. Ini harus lebih diutamakan daripadaBuffer.isDecodeOnly
yang tidak akan digunakan lagi. - Memperbaiki bug yang memublikasikan artefak decoder MIDI ke repositori Maven. Artefak
diganti namanya menjadi
media3-exoplayer-midi
(#734).
- Ekstensi Leanback:
- Memperbaiki bug saat menonaktifkan platform dapat menyebabkan
ArithmeticException
dalam kode Leanback (#617).
- Memperbaiki bug saat menonaktifkan platform dapat menyebabkan
- Utilitas Pengujian:
- Buat
TestExoPlayerBuilder
danFakeClock
kompatibel dengan pengujian UI Espresso dan pengujian UI Compose. Tindakan ini memperbaiki bug saat pemutaran dilanjutkan secara non-deterministik selama interaksi tampilan Espresso atau Compose.
- Buat
- Menghapus simbol yang tidak digunakan lagi:
- Hapus
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
danTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. GunakanComposition.Builder.setHdrMode(int)
dan teruskanComposition
keTransformer.start(Composition, String)
sebagai gantinya. - Hapus metode
DownloadNotificationHelper.buildProgressNotification
yang tidak digunakan lagi, gunakan metode yang tidak digunakan lagi dan 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
- Perpustakaan Umum:
- Menghapus dependensi
multidex
yang tidak sengaja ditambahkan dari semua modul (#499).
- Menghapus dependensi
- ExoPlayer:
- Memperbaiki masalah di
PlaybackStatsListener
saatPlaybackStats
palsu dibuat setelah playlist dihapus. - Tambahkan kolom tambahan ke logging Common Media Client Data (CMCD): format streaming (sf), jenis streaming (st), versi (v), birate atas (tb), durasi objek (d), throughput terukur (mtp), dan jenis objek (ot) (#8699).
- Memperbaiki masalah di
- Audio:
- Memperbaiki bug yang menyebabkan
Player.getState()
tidak pernah ditransisikan keSTATE_ENDED
saat memutar file yang sangat pendek (#538).
- Memperbaiki bug yang menyebabkan
- Pelepasan Beban Audio:
- Tambahkan Awal Halaman Header ID Ogg dan Halaman Header Komentar ke bitstream untuk pemutaran Opus yang dialihkan sesuai dengan RFC 7845.
- Video:
- H.265/HEVC: Memperbaiki penguraian info foto referensi jangka pendek dan jangka panjang SPS.
- Teks:
- CEA-608: Mengubah logika pemotongan isyarat menjadi hanya mempertimbangkan teks yang terlihat. Indentasi dan offset tab sebelumnya disertakan saat membatasi panjang tanda hingga 32 karakter (yang secara teknis benar berdasarkan spesifikasi) (#11019).
- Ekstensi IMA:
- Menambahkan versi IMA SDK ke 3.30.3.
- Sesi:
- Tambahkan tata letak kustom ke status pengontrol dan sediakan pengambil untuk
mengaksesnya. Saat tata letak kustom berubah,
MediaController.Listener.onCustomLayoutChanged
akan dipanggil. Aplikasi yang ingin mengirim tata letak kustom yang berbeda ke pengontrol Media3 yang berbeda dapat melakukannya diMediaSession.Callback.onConnect
menggunakanAcceptedResultBuilder
untuk memastikan tata letak kustom tersedia bagi pengontrol saat koneksi selesai. - Memperbaiki kasus saat
MediaLibraryServiceLegacyStub
mengirim error keResult
yang tidak mendukung hal ini yang menghasilkanUnsupportedOperationException
(#78). - Memperbaiki cara
PlayerWrapper
membuatVolumeProviderCompat
dengan menentukanvolumeControlType
melalui perintah lama (COMMAND_ADJUST_DEVICE_VOLUME
danCOMMAND_SET_DEVICE_VOLUME
) serta perintah baru (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
danCOMMAND_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
- Perpustakaan Umum:
- Tambahkan alasan penyembunyian untuk rute audio yang tidak sesuai dan putar jika siap mengubah alasan untuk mode yang disembunyikan terlalu lama. (#15).
- Tambahkan perintah ke Pemutar:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Tambahkan metode yang kelebihan beban ke Pemutar yang memungkinkan pengguna menentukan tanda
volume:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Menambahkan
Builder
untukDeviceInfo
dan menghentikan konstruktor yang ada. - Tambahkan
DeviceInfo.routingControllerId
untuk menentukan ID pengontrol perutean untuk pemutaran jarak jauh. - Menambahkan
Player.replaceMediaItem(s)
sebagai pintasan untuk menambahkan dan menghapus item di posisi yang sama (#8046).
- ExoPlayer:
- Mengizinkan ExoPlayer memiliki kontrol metode volume perangkat hanya jika
diikutsertakan secara eksplisit. Gunakan
ExoPlayer.Builder.setDeviceVolumeControlEnabled
untuk mendapatkan akses ke:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
dansetDeviceVolume(int, int)
increaseDeviceVolume(int)
danincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
dandecreaseDeviceVolume(int, int)
- Tambahkan
FilteringMediaSource
yang memungkinkan Anda memfilter jenis jalur 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 lain ke manifes demo utama untuk mempermudah
memulai aplikasi demo dengan file
*.exolist.json
kustom (#439). - Menambahkan
ExoPlayer.setVideoEffects()
untuk menggunakanEffect
selama pemutaran video. - Update
SampleQueue
untuk menyimpansourceId
sebagailong
, bukanint
. Tindakan ini mengubah tanda tangan metode publikSampleQueue.sourceId
danSampleQueue.peekSourceId
. - Tambahkan parameter ke metode
LoadControl
shouldStartPlayback
danonTracksSelected
yang memungkinkan pengaitan metode ini denganMediaPeriod
yang 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 konkurensi pada live stream multi-periode. - Menghentikan penggunaan
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
danBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. Varian metode tanpamediaTimeOffsetUs
dapat dipanggil sebagai gantinya. Perhatikan bahwa meskipun untuk varian yang tidak digunakan lagi, offset tidak lagi ditambahkan kestartTimeUs
danendTimeUs
dari objekMediaLoadData
yang dikirim oleh dispatcher. - Ganti nama
ExoTrackSelection.blacklist
menjadiexcludeTrack
danisBlacklisted
menjadiisTrackExcluded
. - Memperbaiki perilaku yang tidak konsisten antara
ExoPlayer.setMediaItem(s)
danaddMediaItem(s)
saat dipanggil di playlist kosong.
- Mengizinkan ExoPlayer memiliki kontrol metode volume perangkat hanya jika
diikutsertakan secara eksplisit. Gunakan
- Transformator:
- Menghapus
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. GunakanExoPlayerAssetLoader.Factory(MediaSource.Factory)
danTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
sebagai gantinya. - Menghapus
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Memperbaiki bug saat transformasi dapat terhenti (yang menyebabkan waktu tunggu muxer) jika akhir streaming video diberi sinyal saat frame input sedang menunggu pemrosesan.
- Codec kueri melalui
MediaCodecList
, bukan menggunakan utilitasfindDecoder/EncoderForFormat
, untuk memperluas dukungan. - Hapus konfigurasi frame B di
DefaultEncoderFactory
karena tidak berfungsi di beberapa perangkat.
- Menghapus
- Pemilihan trek:
- Menambahkan
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
yang dinonaktifkan secara default. Jika diaktifkan,DefaultTrackSelector
akan memicu pilihan jalur baru saat kemampuan perender berubah.
- Menambahkan
- Ekstraktor:
- Audio:
- Memperbaiki bug saat beberapa pemutaran gagal saat tunneling diaktifkan dan
AudioProcessors
aktif, misalnya untuk pemangkasan tanpa celah (#10847). - Mengenkapsulasi frame Opus dalam paket Ogg dalam pemutaran langsung (offload).
- Ekstrapolasi posisi saat ini selama tidur dengan penjadwalan pengurangan beban.
- Tambahkan
Renderer.release()
danAudioSink.release()
untuk merilis resource di akhir siklus proses pemain. - Dengarkan perubahan kemampuan audio dalam
DefaultAudioSink
. Tambahkan parameter yang diperlukancontext
dalam konstruktorDefaultAudioSink
, yang akan digunakan untuk mendaftarkanDefaultAudioSink
sebagai pemroses keAudioCapabilitiesReceiver
dan memperbarui propertiaudioCapabilities
-nya saat diberi tahu tentang perubahan kemampuan. - Terapkan perubahan kemampuan audio melalui peristiwa
onAudioCapabilitiesChanged
baru di antarmukaAudioSink.Listener
, dan antarmuka baruRendererCapabilities.Listener
yang memicu peristiwaonRendererCapabilitiesChanged
. - Menambahkan
ChannelMixingAudioProcessor
untuk menerapkan penskalaan/pencampuran ke saluran audio. - Tambahkan nilai int baru
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
keDecoderDiscardReasons
untuk menghapus dekoder audio jika mode pengabaian memungkinkan setelah kemampuan audio berubah. - Menambahkan dukungan pemutaran langsung untuk DTS Express dan DTS:X (#335).
- Memperbaiki bug saat beberapa pemutaran gagal saat tunneling diaktifkan dan
- Video:
- Buat laporan
MediaCodecVideoRenderer
sebagaiVideoSize
dengan lebar dan tinggi 0 saat perender dinonaktifkan.Player.Listener.onVideoSizeChanged
dipanggil sebagaimana mestinya saatPlayer.getVideoSize()
berubah. Dengan perubahan ini, ukuran video ExoPlayer denganMediaCodecVideoRenderer
memiliki lebar dan tinggi 0 jikaPlayer.getCurrentTracks
tidak mendukung video, atau ukuran trek video yang didukung belum ditentukan.
- Buat laporan
- DRM:
- Mengurangi visibilitas beberapa metode khusus internal di
DefaultDrmSession
yang tidak diharapkan akan 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 container MP4.
- Ekstensi IMA:
- Aktifkan streaming DASH live multi-periode untuk DAI. Perlu diketahui bahwa penerapan saat ini belum mendukung pencarian di live stream (#10912).
- Memperbaiki bug saat grup iklan baru dimasukkan ke dalam live stream karena posisi konten yang dihitung dalam linimasa berturut-turut sedikit berbeda.
- Sesi:
- Tambahkan metode helper
MediaSession.getControllerForCurrentRequest
untuk mendapatkan informasi tentang pengontrol yang saat ini memanggil metodePlayer
. - Menambahkan
androidx.media3.session.MediaButtonReceiver
untuk memungkinkan aplikasi mengimplementasikan melanjutkan pemutaran dengan peristiwa tombol media yang dikirim oleh, misalnya, headset Bluetooth (#167). - Menambahkan implementasi default ke
MediaSession.Callback.onAddMediaItems
untuk memungkinkanMediaItems
yang diminta diteruskan kePlayer
jika memilikiLocalConfiguration
(misalnya, URI) (#282). - Menambahkan tombol perintah "seek to previous" dan "seek to next" di tampilan notifikasi media yang rapat secara default untuk Android 12 dan yang lebih lama (#410).
- Menambahkan implementasi default ke
MediaSession.Callback.onAddMediaItems
untuk memungkinkanMediaItems
yang diminta diteruskan kePlayer
jika memilikiLocalConfiguration
(misalnya, URI) (#282). - Menambahkan tombol perintah "seek to previous" dan "seek to next" di tampilan notifikasi media yang rapat secara default untuk Android 12 dan yang lebih lama (#410).
- Tambahkan metode helper
- UI:
- Menambahkan metode Utilitas
shouldShowPlayButton
danhandlePlayPauseButtonAction
untuk menulis elemen UI kustom dengan tombol putar/jeda.
- Menambahkan metode Utilitas
- Ekstensi RTSP:
- Ekstensi DASH:
- Hapus offset waktu media dari
MediaLoadData.startTimeMs
danMediaLoadData.endTimeMs
untuk aliran DASH multi periode. - Memperbaiki bug saat menyiapkan ulang sumber media Dash live multi-periode
menghasilkan
IndexOutOfBoundsException
(#10838).
- Hapus offset waktu media dari
- Ekstensi HLS:
- Tambahkan
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
untuk menetapkan waktu tunggu bagi thread pemuatan untuk menungguTimestampAdjuster
melakukan inisialisasi. Jika inisialisasi tidak selesai sebelum waktu tunggu habis,PlaybackException
akan ditampilkan untuk menghindari pemutaran tanpa henti. Waktu tunggu ditetapkan ke nol secara default (#323).
- Tambahkan
- Utilitas Pengujian:
- Memeriksa ketidakpekaan huruf besar/kecil skema URI di
DataSourceContractTest
.
- Memeriksa ketidakpekaan huruf besar/kecil skema URI di
- Menghapus simbol yang tidak digunakan lagi:
- Hapus konstruktor
DefaultAudioSink
, dan gunakanDefaultAudioSink.Builder
sebagai gantinya. - Hapus
HlsMasterPlaylist
, gunakanHlsMultivariantPlaylist
sebagai gantinya. - Menghapus
Player.stop(boolean)
. GunakanPlayer.stop()
danPlayer.clearMediaItems()
(jikareset
adalahtrue
). - Hapus dua konstruktor
SimpleCache
yang tidak digunakan lagi, dan gunakan konstruktor yang masih tidak digunakan lagi yang menggunakanDatabaseProvider
untuk mendapatkan performa yang lebih baik. - Hapus konstruktor
DefaultBandwidthMeter
, dan gunakanDefaultBandwidthMeter.Builder
sebagai gantinya. - Hapus konstruktor
DefaultDrmSessionManager
, dan gunakanDefaultDrmSessionManager.Builder
sebagai gantinya. - Hapus dua konstruktor
HttpDataSource.InvalidResponseCodeException
yang tidak digunakan lagi, dan gunakan konstruktor yang masih digunakan serta menerima kolom tambahan(cause
,responseBody
) untuk meningkatkan logging error. - Hapus
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
, danDownloadHelper.forSmoothStreaming
, gunakanDownloadHelper.forMediaItem
sebagai gantinya. - Hapus konstruktor
DownloadService
yang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menyertakan opsi untuk memberikan parameterchannelDescriptionResourceId
. - Hapus konstanta String yang tidak digunakan lagi untuk Charset (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
, danUTF16LE_NAME
), gunakan Charset Kotlin dari paketkotlin.text
,java.nio.charset.StandardCharsets
, ataucom.google.common.base.Charsets
. - Hapus konstruktor
WorkManagerScheduler
yang tidak digunakan lagi, dan gunakan konstruktor yang masih digunakan dengan opsi untuk memberikan parameterContext
. - Hapus metode
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
, dancreateSampleFormat
yang tidak digunakan lagi, yang digunakan untuk membuat instance classFormat
. Sebagai gantinya, gunakanFormat.Builder
untuk membuat instanceFormat
. - Hapus metode
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
dancopyWithVideoSize
yang tidak digunakan lagi. Sebagai gantinya, gunakanFormat.buildUpon()
dan metode penyetel. - Hapus
ExoPlayer.retry()
yang tidak digunakan lagi, gunakanprepare()
sebagai gantinya. - Hapus konstruktor
DefaultTrackSelector
zero-arg yang tidak digunakan lagi, dan gunakanDefaultTrackSelector(Context)
sebagai gantinya. - Hapus konstruktor
OfflineLicenseHelper
yang tidak digunakan lagi, dan gunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
sebagai gantinya. - Hapus konstruktor
DownloadManager
yang tidak digunakan lagi, gunakan konstruktor yang menggunakanExecutor
sebagai gantinya. - Hapus konstruktor
Cue
yang tidak digunakan lagi, dan gunakanCue.Builder
sebagai gantinya. - Hapus konstruktor
OfflineLicenseHelper
yang tidak digunakan lagi, dan gunakanOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
sebagai gantinya. - Hapus empat metode
AnalyticsListener
yang tidak digunakan lagi:onDecoderEnabled
, gunakanonAudioEnabled
dan/atauonVideoEnabled
sebagai gantinya.onDecoderInitialized
, gunakanonAudioDecoderInitialized
dan/atauonVideoDecoderInitialized
sebagai gantinya.onDecoderInputFormatChanged
, gunakanonAudioInputFormatChanged
dan/atauonVideoInputFormatChanged
sebagai gantinya.onDecoderDisabled
, gunakanonAudioDisabled
dan/atauonVideoDisabled
sebagai gantinya.
- Hapus
Player.Listener.onSeekProcessed
danAnalyticsListener.onSeekProcessed
yang tidak digunakan lagi, dan gunakanonPositionDiscontinuity
denganDISCONTINUITY_REASON_SEEK
sebagai gantinya. - Hapus
ExoPlayer.setHandleWakeLock(boolean)
, gunakansetWakeMode(int)
. - Hapus
DefaultLoadControl.Builder.createDefaultLoadControl()
yang tidak digunakan lagi, gunakanbuild()
sebagai gantinya. - Hapus
MediaItem.PlaybackProperties
yang tidak digunakan lagi, gunakanMediaItem.LocalConfiguration
sebagai gantinya. Kolom yang tidak digunakan lagiMediaItem.playbackProperties
sekarang berjenisMediaItem.LocalConfiguration
.
- Hapus 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 apakahBuffer
berisi flagC.BUFFER_FLAG_LAST_SAMPLE
. - Memperbaiki masalah saat frame terakhir mungkin tidak dirender jika sampel terakhir dengan frame dihapus antrean tanpa membaca contoh 'akhir streaming'. (#11079).
- Tambahkan
- Ekstraktor:
- Memperbaiki penguraian SPS H.265 dalam file MPEG-TS dengan menggunakan kembali logika penguraian yang sudah digunakan oleh ekstraktor RTSP dan MP4 (#303).
- Teks:
- SSA: Menambahkan dukungan untuk file UTF-16 jika dimulai dengan tanda urutan byte (#319).
- Sesi:
- Memperbaiki masalah saat
MediaController
tidak memperbarui perintah yang tersedia saat terhubung keMediaSessionCompat
lama yang memperbarui tindakannya. - Memperbaiki bug yang mencegah
MediaLibraryService
menampilkan null untuk panggilan dari UI Sistem keCallback.onGetLibraryRoot
denganparams.isRecent == true
pada API 30 (#355). - Memperbaiki kebocoran memori
MediaSessionService
atauMediaLibraryService
(#346). - Memperbaiki bug saat gabungan
Timeline
dan pembaruan posisi dalamMediaSession
dapat menyebabkanMediaController
menampilkanIllegalStateException
.
- 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 target live stream saat mencari posisi default (#11051).
- Memperbaiki bug saat streaming sampel kosong di media dapat menyebabkan pemutaran berhenti.
- Sesi:
- Memperbaiki bug saat beberapa item antrean identik yang dipublikasikan oleh
MediaSessionCompat
lama menghasilkan pengecualian diMediaController
(#290). - Menambahkan penerusan
MediaSession.broadcastCustomCommand
yang hilang keMediaControllerCompat.Callback.onSessionEvent
lama (#293). - Memperbaiki bug saat memanggil
MediaSession.setPlayer
tidak memperbarui perintah yang tersedia. - Memperbaiki masalah saat instance
TrackSelectionOverride
yang dikirim dariMediaController
diabaikan jika mereferensikan grup denganFormat.metadata
(#296). - Perbaiki masalah saat
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
harus tersedia untuk mengakses metadata melaluiMediaSessionCompat
lama. - Memperbaiki masalah saat instance
MediaSession
pada 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 yang kosong (#11014).
- RTSP:
- Coba lagi dengan TCP jika Penyiapan RTSP dengan UDP gagal dengan Error RTSP 461 SUPPORTEDTransport (#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 agar
gabungan dapat dikonfigurasi dalam
SegmentDownloader
dan subclass (#248).
- Membuat perbedaan maksimum waktu mulai dua segmen agar
gabungan dapat dikonfigurasi dalam
- Audio:
- Video:
- Petakan 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 dari kecepatan refresh layar.
- Petakan format HEVC HDR10 ke
- Pemeran:
- Memperbaiki
STATE_IDLE
sementara saat bertransisi antar-item media (#245).
- Memperbaiki
- RTSP:
- Mendeteksi IllegalArgumentException yang ditampilkan dalam penguraian RTSP yang tidak valid Menjelaskan pesan respons (#10971).
- Sesi:
- Memperbaiki bug saat tombol putar/jeda notifikasi tidak diperbarui dengan status pemutar (#192).
- Ekstensi IMA:
- Memperbaiki bug yang mencegah streaming DAI tanpa iklan dimulai
karena peristiwa
LOADED
pertama (dan dalam kasus tanpa iklan, satu-satunya) 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.setPlaybackLooper
yang menetapkan thread pemutaran yang sudah ada sebelumnya untuk instance ExoPlayer baru. - Mengizinkan helper pengelola download dihapus (#10776).
- Menambahkan parameter ke
BasePlayer.seekTo
untuk menunjukkan perintah yang digunakan untuk melakukan pencarian. - Menggunakan tema saat memuat drawable pada API 21+ (#220).
- Menambahkan
ConcatenatingMediaSource2
yang memungkinkan penggabungan beberapa item media menjadi satu jendela (#247).
- Menyesuaikan logika pengurutan dekoder perender untuk mempertahankan
preferensi
- Ekstraktor:
- Menampilkan
ParserException
, bukanNullPointerException
jika 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
AudioTrack
dalam pemutaran langsung (passthrough).
- Menggunakan kecepatan bit format audio terkompresi untuk menghitung ukuran buffer minimum
untuk
- Teks:
- Memperbaiki
TextRenderer
yang meneruskan indeks tidak valid (negatif) keSubtitle.getEventTime
jika 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.mediaType
untuk menunjukkan jenis konten atau jenis folder yang dijelaskan oleh metadata. - Menambahkan
MediaMetadata.isBrowsable
sebagai 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
PlayerView
saat menggunakan tata letak kanan ke kiri (RTL) (#227).
- Memperbaiki
- Sesi:
- Menambahkan
SimpleBasePlayer
abstrak untuk membantu menerapkan antarmukaPlayer
untuk pemutar kustom. - Menambahkan metode helper untuk mengonversi token sesi platform ke Media3
SessionToken
(#171). - Menggunakan
onMediaMetadataChanged
untuk memicu update sesi media platform (#219). - Menambahkan sesi media sebagai argumen
getMediaButtons()
dariDefaultMediaNotificationProvider
dan menggunakan daftar yang tidak dapat diubah untuk kejelasan (#216). - Menambahkan pemroses callback
onSetMediaItems
untuk 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
QueueTimeline
menjadi 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.mediaType
untuk menunjukkan jenis konten atau jenis folder yang dijelaskan oleh metadata. - Menambahkan
MediaMetadata.isBrowsable
sebagai penggantiMediaMetadata.folderType
. Jenis folder tidak akan digunakan lagi dalam rilis berikutnya.
- Ektensi transmisi:
- Menambahkan nomor versi Cast SDK menjadi 21.2.0.
- Ekstensi IMA:
- Menghapus pemroses pemutar
ImaServerSideAdInsertionMediaSource
di thread aplikasi untuk menghindari masalah threading. - Menambahkan properti
focusSkipButtonWhenAvailable
keImaServerSideAdInsertionMediaSource.AdsLoader.Builder
untuk meminta tombol lewati difokuskan pada perangkat TV dan menyetelnya ke benar (true) secara default. - Menambahkan metode
focusSkipButton()
keImaServerSideAdInsertionMediaSource.AdsLoader
untuk 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.isTunnelingEnabled
untuk memeriksa apakah tunnel diaktifkan untuk jalur yang saat ini dipilih (#2518). - Menambahkan
WrappingMediaSource
untuk 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
onMediaItemTransition
yang hilang saat memanggilseekToNext
atauseekToPrevious
dalam playlist item tunggal (#10667). - Menambahkan
Player.getSurfaceSize
yang menampilkan ukuran platform tempat video dirender. - Memperbaiki bug saat menghapus pemroses selama rilis pemutar dapat menyebabkan
IllegalStateException
(#10758).
- Menambahkan
- Build:
- Menerapkan
compileSdkVersion
minimum 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
ProgressiveDownloader
yang disebabkan oleh download dan pemutaran serentak denganPriorityTaskManager
yang 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
SingleThreadExecutor
untuk merilis instanceAudioTrack
guna menghindari error OutOfMemory saat merilis beberapa pemutar secara bersamaan (#10057). - Menambahkan
AudioOffloadListener.onExperimentalOffloadedPlayback
untuk status offload AudioTrack. (#134). - Menjadikan
AudioTrackBufferSizeProvider
sebagai antarmuka publik. - Menambahkan
ExoPlayer.setPreferredAudioDevice
untuk menyetel perangkat output audio yang diinginkan (#135). - Mengganti nama
androidx.media3.exoplayer.audio.AudioProcessor
menjadiandroidx.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:
MetadataRenderer
sekarang 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 opened
saat 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.presentationTimeOffset
dari 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.Builder
untuk 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). SimpleBitmapLoader
dapat memuat bitmap dari URIfile://
(#108).- Memperbaiki pernyataan yang mencegah
MediaController
mencari iklan dalam periode (#122). - Saat pemutaran berakhir,
MediaSessionService
akan 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
DefaultNotificationProvider
pada 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 transmisi:
- Mengimplementasikan
getDeviceInfo()
agar dapat mengidentifikasiCastPlayer
saat 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
ShuffleOrder
denganExoPlayer.setShuffleOrder
akan menghasilkan panggilan kePlayer.Listener#onTimelineChanged
denganreason=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
setDataSourceFactory
diDefaultMediaSourceFactory
, 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
playWhenReady
diLeanbackAdapter
(10420).
- Memproses perubahan
- Pemeran:
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
null
keMediaSource.Factory.setDrmSessionManagerProvider
danMediaSource.Factory.setLoadErrorHandlingPolicy
. InstanceDefaultDrmSessionManagerProvider
danDefaultLoadErrorHandlingPolicy
dapat diteruskan secara eksplisit jika diperlukan. - Menambahkan
MediaItem.RequestMetadata
untuk merepresentasikan metadata yang diperlukan untuk memutar media saatLocalConfiguration
yang tepat tidak diketahui. Juga menghapusMediaMetadata.mediaUrl
karena kini telah disertakan dalamRequestMetadata
. - Menambahkan
Player.Command.COMMAND_SET_MEDIA_ITEM
agar pemutar dapat mengizinkan penyetelan satu item.
- Mengaktifkan dukungan untuk diagnostik platform Android melalui
- Pemilihan trek:
- Menggabungkan class
TrackSelectionOverrides
ke dalamTrackSelectionParameters
, dan mempromosikanTrackSelectionOverride
ke class level atas. - Mengganti nama
TracksInfo
menjadiTracks
danTracksInfo.TrackGroupInfo
menjadiTracks.Group
.Player.getCurrentTracksInfo
danPlayer.Listener.onTracksInfoChanged
juga diganti namanya menjadiPlayer.getCurrentTracks
danPlayer.Listener.onTracksChanged
. Ini termasuk 'un-deprecating' (membatalkan penghentian penggunaan) nama metodePlayer.Listener.onTracksChanged
, tetapi dengan jenis parameter yang berbeda. - Mengubah
DefaultTrackSelector.buildUponParameters
danDefaultTrackSelector.Parameters.buildUpon
untuk menampilkanDefaultTrackSelector.Parameters.Builder
, bukanDefaultTrackSelector.ParametersBuilder
yang tidak digunakan lagi. - Menambahkan
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
yang diaktifkan secara default. Jika diaktifkan,DefaultTrackSelector
akan memilih trek audio yang jumlah salurannya tidak melebihi kemampuan output perangkat. Pada perangkat genggam,DefaultTrackSelector
akan 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,DefaultTrackSelector
akan memantau perubahan di properti Spatializer dan memicu pemilihan trek baru berdasarkan perubahan tersebut. Perangkat dengan mode UItelevision
dikecualikan dari batasan ini dan format dengan jumlah saluran tertinggi akan diutamakan. Untuk mengaktifkan fitur ini, instanceDefaultTrackSelector
harus dibuat denganContext
.
- Menggabungkan class
- Video:
- Mengganti nama
DummySurface
menjadiPlaceholderSurface
. - 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.AudioAttributes
ke class wrapperAudioAttributesV21
baru, 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
AudioTrack
dengan mask saluranAudioFormat.CHANNEL_OUT_7POINT1POINT4
jika 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
OutlineColour
saatBorderStyle == 3
(yaituOutlineColour
menetapkan 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
OnClickListener
yang ditetapkan padaPlayerView
jikauseController=false
(#9605). Juga memperbaiki pengiriman peristiwa keOnLongClickListener
untuk semua konfigurasi tampilan. - Memperbaiki salah perlakuan pada urutan peristiwa sentuh yang keluar dari batas
PlayerView
sebelumACTION_UP
sebagai sebuah klik (#9861). - Memperbaiki masalah aksesibilitas
PlayerView
saat mengetuk dapat mengalihkan pemutaran, bukan menyembunyikan kontrol (#8627). - Menulis ulang
TrackSelectionView
danTrackSelectionDialogBuilder
agar berfungsi dengan antarmukaPlayer
, bukanExoPlayer
. Dengan begitu, tampilan dapat digunakan dengan implementasiPlayer
lainnya, dan menghapus dependensi dari modul UI ke modul ExoPlayer. Perubahan ini dapat menyebabkan gangguan. - Tidak menampilkan trek teks paksa dalam pemilih trek
PlayerView
, dan mempertahankan trek teks paksa yang sesuai tetap dipilih jika "None" (Tidak ada) dipilih (#9432).
- Memperbaiki pengiriman peristiwa ke
- DASH:
- Mengurai jumlah saluran dari elemen
AudioChannelConfiguration
DTS. Tindakan ini akan mengaktifkan kembali passthrough audio untuk streaming DTS (#10159). - Tidak mengizinkan penerusan
null
keDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. InstanceDefaultCompositeSequenceableLoaderFactory
dapat 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
null
keHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
, danHlsMediaSource.Factory.setPlaylistTrackerFactory
. InstanceDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
, atau referensi keDefaultHlsPlaylistTracker.FACTORY
dapat diteruskan secara eksplisit jika diperlukan.
- Streaming Lancar:
- Tidak mengizinkan penerusan
null
keSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. InstanceDefaultCompositeSequenceableLoaderFactory
dapat 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
DummyDataSource
menjadiPlaceholderDataSource
. - Mengatasi penanganan gangguan OkHttp.
- Mengganti nama
- Sesi:
- Mengganti
MediaSession.MediaItemFiller
denganMediaSession.Callback.onAddMediaItems
untuk memungkinkan penyelesaian permintaan asinkron. - Mendukung metode
setMediaItems(s)
saatMediaController
terhubung ke sesi media lama. - Menghapus
MediaController.setMediaUri
danMediaSession.Callback.onSetMediaUri
. Fungsi yang sama dapat dicapai dengan menggunakanMediaController.setMediaItem
danMediaSession.Callback.onAddMediaItems
. - Meneruskan panggilan
MediaController
lama untuk memutar media keMediaSession.Callback.onAddMediaItems
, bukanonSetMediaUri
. - Menambahkan
MediaNotification.Provider
danDefaultMediaNotificationProvider
untuk memberikan penyesuaian notifikasi. - Menambahkan
BitmapLoader
danSimpleBitmapLoader
untuk 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.MediaSessionCallback
menjadiMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
menjadiMediaLibrarySession.Callback
, danMediaSession.Builder.setSessionCallback
menjadisetCallback
. - Memperbaiki NPE di
MediaControllerImplLegacy
(#59). - Memperbarui info posisi sesi tentang perubahan linimasa (#51).
- Memperbaiki NPE di
MediaControllerImplBase
setelah 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.getCurrentTrackGroups
danPlayer.getCurrentTrackSelections
. Sebagai gantinya, gunakanPlayer.getCurrentTracks
. Anda juga dapat terus menggunakanExoPlayer.getCurrentTrackGroups
danExoPlayer.getCurrentTrackSelections
, meskipun metode ini tetap tidak digunakan lagi. - Menghapus konstanta
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
danDEFAULT_TRACK_SELECTOR_PARAMETERS
DownloadHelper
. GunakangetDefaultTrackSelectorParameters(Context)
jika memungkinkan, danDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
jika sebaliknya. - Menghapus konstruktor
DefaultTrackSelector(ExoTrackSelection.Factory)
. Sebagai gantinya, gunakanDefaultTrackSelector(Context, ExoTrackSelection.Factory)
. - Menghapus
Transformer.Builder.setContext
. Sebagai gantinya,Context
harus 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.setTrackId
danMediaItem.SubtitleConfiguration.Builder.setId
untuk memprioritaskan kolomSubtitleConfiguration
dan kembali ke nilaiFactory
jika belum ditetapkan (#10016).
- Memperbaiki interaksi
- Pemutaran iklan:
- Memperbaiki underrun audio di antara periode iklan dalam streaming SSAI HLS live.
Versi 1.0.0-alpha02
2 Maret 2022
androidx.media3:media3-*:1.0.0-alpha02
dirilis.
Versi 1.0.0-alpha02 berisi commit ini.
Ini sama dengan rilis ExoPlayer 2.17.0.
- Library Core:
- Menambahkan metode
DefaultRenderersFactory.getCodecAdapterFactory()
yang dilindungi sehingga subclassDefaultRenderersFactory
yang menggantibuildVideoRenderers()
ataubuildAudioRenderers()
dapat mengakses factory adaptor codec dan meneruskannya ke instanceMediaCodecRenderer
yang mereka buat. - Memperluas kolom header ICY
name
dangenre
masing-masing keMediaMetadata.station
danMediaMetadata.genre
agar 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#inputBufferCount
menjadiqueuedInputBufferCount
. - Menjadikan
SimpleExoPlayer.renderers
pribadi. Perender dapat diakses melaluiExoPlayer.getRenderer
. - Memperbarui beberapa nilai konstanta
AnalyticsListener.EventFlags
agar cocok dengan nilai diPlayer.EventFlags
. - Membagi
AnalyticsCollector
menjadi 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
TrackGroup
duplikat diTrackGroupArray
.TrackGroup
dapat selalu dibedakan dengan menetapkanid
dalam konstruktorTrackGroup
. Tindakan ini akan memperbaiki error saat melanjutkan pemutaran setelah memindahkan aplikasi ke latar belakang dengan penggantian trek aktif (#9718). - Mengubah logika di
AdaptiveTrackSelection
untuk 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
AudioCapabilities
API untuk mewajibkan penerusanAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
secara eksplisit, bukannull
. - Mengizinkan penyesuaian penghitungan ukuran buffer
AudioTrack
dengan memasukkanAudioTrackBufferSizeProvider
keDefaultAudioSink
. (#8891). - Mencoba lagi pembuatan
AudioTrack
jika ukuran buffer yang diminta > 1 MB. (#9712).
- Ekstraktor:
- Teks:
- Menambahkan kolom
MediaItem.SubtitleConfiguration.id
yang diperluas ke kolomFormat.id
pada trek subtitel yang dibuat dari konfigurasi (#9673). - Menambahkan dukungan dasar untuk subtitel WebVTT di penampung Matroska (#9886).
- Mencegah
Cea708Decoder
membaca lebih dari ukuran blok layanan yang dideklarasikan.
- Menambahkan kolom
- DRM:
- Menghapus
playbackLooper
dariDrmSessionManager.(pre)acquireSession
. SaatDrmSessionManager
digunakan oleh aplikasi diMediaSource
kustom,playbackLooper
harus diteruskan keDrmSessionManager.setPlayer
.
- Menghapus
- Pemutaran iklan/IMA:
- Menambahkan dukungan untuk Penyisipan Iklan Dinamis (DAI) IMA (#8213).
- Menambahkan metode ke
AdPlaybackState
untuk 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
main
sebagaiC.SELECTION_FLAG_DEFAULT
. - Memperbaiki logika pengecualian URL dasar untuk manifes yang tidak mendeklarasikan namespace DVB (#9856).
- Mendukung URL
MPD.Location
relatif (#9939).
- Menambahkan properti penting dan tambahan yang diuraikan ke
- HLS:
- Mengisi
Format.label
dengan 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
SocketFactory
yang 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.
TransformationException
kini digunakan untuk mendeskripsikan error yang terjadi selama transformasi.- Menambahkan
TransformationRequest
untuk menentukan opsi transformasi. - Mengizinkan beberapa pemroses untuk didaftarkan.
- Memperbaiki Transformator yang macet saat output codec dibaca sebagian.
- Memperbaiki NPE potensial di
Transformer.getProgress
saat merilis muxer throw. - Menambahkan aplikasi demo untuk menerapkan transformasi.
- Ekstensi MediaSession:
- Secara default,
MediaSessionConnector
kini menghapus playlist saat berhenti. Aplikasi yang ingin mempertahankan playlist dapat memanggilsetClearMediaItemsOnStop(false)
di konektor.
- Secara default,
- Ektensi transmisi:
- Ekstensi FFmpeg:
- Membuat
build_ffmpeg.sh
bergantung 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-framework
sebelumnya tidak kompatibel dengan aplikasi yang menargetkan Android 12, dan akan error denganIllegalArgumentException
saat membuatPendingIntent
(#9528).
- Mengupgrade ekstensi Transmisi agar bergantung pada
- Menghapus simbol yang tidak digunakan lagi:
- Menghapus
Player.EventListener
. MenggunakanPlayer.Listener
sebagai gantinya. - Menghapus
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
, danMediaSourceFactory#setDrmUserAgent
. MenggunakanMediaSourceFactory#setDrmSessionManagerProvider
sebagai gantinya. - Menghapus
MediaSourceFactory#setStreamKeys
. MenggunakanMediaItem.Builder#setStreamKeys
sebagai gantinya. - Menghapus
MediaSourceFactory#createMediaSource(Uri)
. MenggunakanMediaSourceFactory#createMediaSource(MediaItem)
sebagai gantinya. - Menghapus
setTag
dariDashMediaSource
,HlsMediaSource
danSsMediaSource
. MenggunakanMediaItem.Builder#setTag
sebagai gantinya. - Menghapus
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. MenggunakanMediaItem.Builder#setLiveConfiguration
danMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
untuk mengganti manifes, atauDashMediaSource#setFallbackTargetLiveOffsetMs
untuk memberikan nilai penggantian. - Menghapus
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Anda tidak lagi dapat memilih untuk tidak menerapkan thread. - Menghapus
ActionFile
danActionFileUpgradeUtil
. Menggunakan ExoPlayer 2.16.1 atau sebelum menggunakanActionFileUpgradeUtil
untuk menggabungkan file tindakan lama keDefaultDownloadIndex
. - Menghapus
ProgressiveMediaSource#setExtractorsFactory
. Menggunakan konstruktorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
sebagai gantinya. - Menghapus
ProgressiveMediaSource.Factory#setTag
danProgressiveMediaSource.Factory#setCustomCacheKey
. MenggunakanMediaItem.Builder#setTag
danMediaItem.Builder#setCustomCacheKey
sebagai gantinya. - Menghapus konstruktor
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
danDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Menggunakan konstruktorDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
, danDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
sebagai gantinya. - Menghapus semua konstruktor
CronetDataSource
publik. Sebagai gantinya, gunakanCronetDataSource.Factory
.
- Menghapus
- Mengubah
IntDefs
berikut menjadi@Target(TYPE_USE)
saja. Hal ini dapat merusak kompilasi penggunaan di Kotlin, yang dapat diperbaiki dengan memindahkan anotasi ke anotasi jenis (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(dalam paketcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(dalam paketcom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Versi 1.0.0-alpha01
27 Oktober 2021
androidx.media3:media3-*:1.0.0-alpha01
dirilis.
Versi 1.0.0-alpha01 berisi commit berikut ini.
Fitur baru
Media3 adalah tempat baru untuk support library media, termasuk ExoPlayer. Alfa pertama berisi implementasi library awal yang fungsional untuk mengimplementasikan kasus penggunaan media, seperti:
- ExoPlayer, pemutar media tingkat aplikasi untuk Android yang mudah disesuaikan dan diperluas.
- Fungsi sesi media, untuk mengekspos dan mengontrol pemutaran. Modul sesi
baru ini menggunakan antarmuka
Player
yang sama seperti ExoPlayer. - Komponen UI untuk mem-build antarmuka pengguna pemutaran media.
- Modul yang menggabungkan fungsi di library lain untuk digunakan dengan ExoPlayer, misalnya, penyisipan iklan melalui IMA SDK.
Untuk informasi selengkapnya, lihat project GitHub Media3.
ExoPlayer sebelumnya dihosting di
project GitHub ExoPlayer yang terpisah. Di Media3,
nama paketnya adalah androidx.media3.exoplayer
. Kami berencana untuk terus mempertahankan dan
merilis project GitHub ExoPlayer untuk sementara waktu guna memberikan waktu bagi aplikasi untuk bermigrasi ke
Media3. Media3 memiliki pengganti untuk semua modul ExoPlayer, kecuali untuk
ekstensi media2 dan mediasession lama, yang diganti dengan
modul media3-session
baru. Hal ini memberikan integrasi langsung antara pemutar dan
sesi media tanpa perlu menggunakan class adaptor/konektor.