Media3
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
16 Februari 2023 | - | 1.0.0-rc01 | - | - |
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.0.0-rc01" // 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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$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" // 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 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" }
Kotlin
dependencies { val media3_version = "1.0.0-rc01" // 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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$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") // 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 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") }
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.0.0
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 Cast:
- 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 Cast:
- 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
- Cast:
Versi 1.0.0-beta01
16 Juni 2022
androidx.media3:media3-*:1.0.0-beta01
dirilis.
Versi 1.0.0-beta01 berisi commit ini.
Ini sama dengan rilis ExoPlayer 2.18.0.
- Library Core:
- Mengaktifkan dukungan untuk diagnostik platform Android melalui
MediaMetricsManager
. ExoPlayer akan meneruskan peristiwa pemutaran dan data performa ke platform, yang membantu memberikan informasi performa dan proses debug sistem di perangkat. Data ini juga dapat dikumpulkan oleh Google jika berbagi data penggunaan dan diagnostik diaktifkan oleh pengguna perangkat. Aplikasi dapat memilih untuk tidak berkontribusi pada diagnostik platform untuk ExoPlayer denganExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Memperbaiki bug yang menyebabkan trek terlalu sering direset saat menggunakan
MergingMediaSource
, misalnya saat melakukan sideload subtitel dan mengubah subtitel yang dipilih di tengah pemutaran (#10248). - Menghentikan deteksi jenis jaringan 5G-NSA di API 29 dan 30. Pemutaran ini akan menggunakan jaringan 4G.
- Tidak mengizinkan penerusan
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.