Media3

Mendukung library untuk kasus penggunaan media.
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.1.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 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.1.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 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).
  • Ekstraktor:
    • Menampilkan ParserException, bukan NullPointerException 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).
  • Audio:
    • Menggunakan kecepatan bit format audio terkompresi untuk menghitung ukuran buffer minimum untuk AudioTrack dalam pemutaran langsung (passthrough).
  • Teks:
    • Memperbaiki TextRenderer yang meneruskan indeks tidak valid (negatif) ke Subtitle.getEventTime jika file subtitel tidak berisi tanda.
    • SubRip: Menambahkan dukungan untuk file UTF-16 jika dimulai dengan tanda urutan byte.
  • 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 pengganti MediaMetadata.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).
  • Sesi:
    • Menambahkan SimpleBasePlayer abstrak untuk membantu menerapkan antarmuka Player 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() dari DefaultMediaNotificationProvider dan menggunakan daftar yang tidak dapat diubah untuk kejelasan (#216).
    • Menambahkan pemroses callback onSetMediaItems untuk memberikan cara mengubah/menetapkan daftar MediaItem, 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).
  • 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 pengganti MediaMetadata.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 ke ImaServerSideAdInsertionMediaSource.AdsLoader.Builder untuk meminta tombol lewati difokuskan pada perangkat TV dan menyetelnya ke benar (true) secara default.
    • Menambahkan metode focusSkipButton() ke ImaServerSideAdInsertionMediaSource.AdsLoader untuk secara terprogram meminta tombol lewati difokuskan.
    • Menambahkan nomor vers IMA SDK menjadi 3.29.0.
  • 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 satu MediaSource (#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 memanggil seekToNext atau seekToPrevious 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).
  • Build:
    • Menerapkan compileSdkVersion minimum untuk menghindari error kompilasi (#10684).
    • Menghindari pemblokiran publikasi jika disertakan dalam build gradle lain.
  • 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 dengan PriorityTaskManager yang sama (#10570).
    • Membuat notifikasi download segera muncul (#183).
    • Membatasi penghapusan download paralel menjadi 1 untuk menghindari pembuatan thread yang berlebihan (#10458).
  • Video:
    • Mencoba dekoder alternatif untuk Dolby Vision jika layar tidak mendukungnya. (#9794).
  • Audio:
    • Menggunakan SingleThreadExecutor untuk merilis instance AudioTrack 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 menjadi androidx.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).
  • Metadata:
    • MetadataRenderer sekarang dapat dikonfigurasi untuk merender metadata segera setelah tersedia. Membuat instance dengan MetadataRenderer(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).
  • UI:
    • Menggunakan penggantian pemutar saat ini sebagai preset di TrackSelectionDialogBuilder (#10429).
  • Sesi:
    • Memastikan perintah selalu dijalankan dalam urutan yang benar meskipun beberapa perintah memerlukan resolusi asinkron (#85).
    • Menambahkan DefaultMediaNotificationProvider.Builder untuk mem-build instance DefaultMediaNotificationProvider. Builder dapat mengonfigurasi ID notifikasi, ID saluran notifikasi, dan nama saluran notifikasi yang digunakan oleh penyedia. Selain itu, tambahkan metode DefaultMediaNotificationProvider.setSmallIcon(int) untuk menyetel ikon kecil notifikasi. (#104).
    • Memastikan perintah yang dikirim sebelum MediaController.release() tidak dihapus (#99).
    • SimpleBitmapLoader dapat memuat bitmap dari URI file:// (#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:
    • Menambahkan penanganan paket terpisah-pisah H263 (#119).
    • Menambahkan dukungan untuk MP4A-LATM (#162).
  • 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 mengidentifikasi CastPlayer saat mengontrol pemutaran dengan MediaController (#142).
  • 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.

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 dengan ExoPlayer.setShuffleOrder akan menghasilkan panggilan ke Player.Listener#onTimelineChanged dengan reason=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 di DefaultMediaSourceFactory, yang dalam kasus tertentu tidak berfungsi (#116).
  • Ekstraktor:
    • Memperbaiki penguraian kumpulan gambar referensi jangka pendek H265 (#10316).
    • Memperbaiki penguraian kecepatan bit dari kotak esds (#10381).
  • 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 di LeanbackAdapter (10420).
  • Cast:
    • Menggunakan MediaItem yang telah diteruskan ke metode playlist sebagai Window.mediaItem di CastTimeline (#25, #8212).
    • Mendukung Player.getMetadata() dan Listener.onMediaMetadataChanged() dengan CastPlayer (#25).

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 dengan ExoPlayer.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 ke MediaSource.Factory.setDrmSessionManagerProvider dan MediaSource.Factory.setLoadErrorHandlingPolicy. Instance DefaultDrmSessionManagerProvider dan DefaultLoadErrorHandlingPolicy dapat diteruskan secara eksplisit jika diperlukan.
    • Menambahkan MediaItem.RequestMetadata untuk merepresentasikan metadata yang diperlukan untuk memutar media saat LocalConfiguration yang tepat tidak diketahui. Juga menghapus MediaMetadata.mediaUrl karena kini telah disertakan dalam RequestMetadata.
    • Menambahkan Player.Command.COMMAND_SET_MEDIA_ITEM agar pemutar dapat mengizinkan penyetelan satu item.
  • Pemilihan trek:
    • Menggabungkan class TrackSelectionOverrides ke dalam TrackSelectionParameters, dan mempromosikan TrackSelectionOverride ke class level atas.
    • Mengganti nama TracksInfo menjadi Tracks dan TracksInfo.TrackGroupInfo menjadi Tracks.Group. Player.getCurrentTracksInfo dan Player.Listener.onTracksInfoChanged juga diganti namanya menjadi Player.getCurrentTracks dan Player.Listener.onTracksChanged. Ini termasuk 'un-deprecating' (membatalkan penghentian penggunaan) nama metode Player.Listener.onTracksChanged, tetapi dengan jenis parameter yang berbeda.
    • Mengubah DefaultTrackSelector.buildUponParameters dan DefaultTrackSelector.Parameters.buildUpon untuk menampilkan DefaultTrackSelector.Parameters.Builder, bukan DefaultTrackSelector.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 UI television dikecualikan dari batasan ini dan format dengan jumlah saluran tertinggi akan diutamakan. Untuk mengaktifkan fitur ini, instance DefaultTrackSelector harus dibuat dengan Context.
  • Video:
    • Mengganti nama DummySurface menjadi PlaceholderSurface.
    • Menambahkan dukungan AV1 ke MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Menggunakan dekoder audio LG AC3 yang mengiklankan jenis MIME non-standar.
    • Mengubah jenis nilai yang ditampilkan AudioAttributes.getAudioAttributesV21() dari android.media.AudioAttributes ke class wrapper AudioAttributesV21 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 saluran AudioFormat.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 menampilkan CueGroup, bukan List<Cue>.
    • SSA: Mendukung setelan gaya OutlineColour saat BorderStyle == 3 (yaitu OutlineColour 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.
  • Ekstraktor:
    • Menambahkan dukungan untuk AVI (#2092).
    • Matroska: Mengurai DiscardPadding untuk trek Opus.
    • MP4: Mengurai kecepatan bit dari kotak esds.
    • Ogg: Mengizinkan ID Opus duplikat dan header komentar (#10038).
  • UI:
    • Memperbaiki pengiriman peristiwa ke OnClickListener yang ditetapkan pada PlayerView jika useController=false (#9605). Juga memperbaiki pengiriman peristiwa ke OnLongClickListener untuk semua konfigurasi tampilan.
    • Memperbaiki salah perlakuan pada urutan peristiwa sentuh yang keluar dari batas PlayerView sebelum ACTION_UP sebagai sebuah klik (#9861).
    • Memperbaiki masalah aksesibilitas PlayerView saat mengetuk dapat mengalihkan pemutaran, bukan menyembunyikan kontrol (#8627).
    • Menulis ulang TrackSelectionView dan TrackSelectionDialogBuilder agar berfungsi dengan antarmuka Player, bukan ExoPlayer. Dengan begitu, tampilan dapat digunakan dengan implementasi Player 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).
  • DASH:
    • Mengurai jumlah saluran dari elemen AudioChannelConfiguration DTS. Tindakan ini akan mengaktifkan kembali passthrough audio untuk streaming DTS (#10159).
    • Tidak mengizinkan penerusan null ke DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Instance DefaultCompositeSequenceableLoaderFactory dapat diteruskan secara eksplisit jika diperlukan.
  • HLS:
    • Kembali ke persiapan dengan potongan jika atribut CODECS playlist tidak berisi codec audio (#10065).
    • Tidak mengizinkan penerusan null ke HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory, dan HlsMediaSource.Factory.setPlaylistTrackerFactory. Instance DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory, atau referensi ke DefaultHlsPlaylistTracker.FACTORY dapat diteruskan secara eksplisit jika diperlukan.
  • Streaming Lancar:
    • Tidak mengizinkan penerusan null ke SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Instance DefaultCompositeSequenceableLoaderFactory dapat diteruskan secara eksplisit jika diperlukan.
  • 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 menjadi PlaceholderDataSource.
    • Mengatasi penanganan gangguan OkHttp.
  • Sesi:
    • Mengganti MediaSession.MediaItemFiller dengan MediaSession.Callback.onAddMediaItems untuk memungkinkan penyelesaian permintaan asinkron.
    • Mendukung metode setMediaItems(s) saat MediaController terhubung ke sesi media lama.
    • Menghapus MediaController.setMediaUri dan MediaSession.Callback.onSetMediaUri. Fungsi yang sama dapat dicapai dengan menggunakan MediaController.setMediaItem dan MediaSession.Callback.onAddMediaItems.
    • Meneruskan panggilan MediaController lama untuk memutar media ke MediaSession.Callback.onAddMediaItems, bukan onSetMediaUri.
    • Menambahkan MediaNotification.Provider dan DefaultMediaNotificationProvider untuk memberikan penyesuaian notifikasi.
    • Menambahkan BitmapLoader dan SimpleBitmapLoader 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 menjadi MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback menjadi MediaLibrarySession.Callback, dan MediaSession.Builder.setSessionCallback menjadi setCallback.
    • Memperbaiki NPE di MediaControllerImplLegacy (#59).
    • Memperbarui info posisi sesi tentang perubahan linimasa (#51).
    • Memperbaiki NPE di MediaControllerImplBase setelah merilis pengontrol (#74).
  • 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).
  • Menghapus simbol yang tidak digunakan lagi:
    • Menghapus Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Sebagai gantinya, gunakan Player.Listener.onTracksChanged(Tracks).
    • Menghapus Player.getCurrentTrackGroups dan Player.getCurrentTrackSelections. Sebagai gantinya, gunakan Player.getCurrentTracks. Anda juga dapat terus menggunakan ExoPlayer.getCurrentTrackGroups dan ExoPlayer.getCurrentTrackSelections, meskipun metode ini tetap tidak digunakan lagi.
    • Menghapus konstanta DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT dan DEFAULT_TRACK_SELECTOR_PARAMETERS DownloadHelper. Gunakan getDefaultTrackSelectorParameters(Context) jika memungkinkan, dan DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT jika sebaliknya.
    • Menghapus konstruktor DefaultTrackSelector(ExoTrackSelection.Factory). Sebagai gantinya, gunakan DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • Menghapus Transformer.Builder.setContext. Sebagai gantinya, Context harus diteruskan ke konstruktor Transformer.Builder.

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 dan MediaItem.SubtitleConfiguration.Builder.setId untuk memprioritaskan kolom SubtitleConfiguration dan kembali ke nilai Factory jika belum ditetapkan (#10016).
  • 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 subclass DefaultRenderersFactory yang mengganti buildVideoRenderers() atau buildAudioRenderers() dapat mengakses factory adaptor codec dan meneruskannya ke instance MediaCodecRenderer yang mereka buat.
    • Memperluas kolom header ICY name dan genre masing-masing ke MediaMetadata.station dan MediaMetadata.genre agar mencapai aplikasi melalui Player.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 dari MediaCodec. (#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 menjadi queuedInputBufferCount.
    • Menjadikan SimpleExoPlayer.renderers pribadi. Perender dapat diakses melalui ExoPlayer.getRenderer.
    • Memperbarui beberapa nilai konstanta AnalyticsListener.EventFlags agar cocok dengan nilai di Player.EventFlags.
    • Membagi AnalyticsCollector menjadi antarmuka dan implementasi default untuk memungkinkannya dihilangkan oleh R8 jika aplikasi tidak memerlukannya.
  • 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 di TrackGroupArray. TrackGroup dapat selalu dibedakan dengan menetapkan id dalam konstruktor TrackGroup. 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 penerusan AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES secara eksplisit, bukan null.
    • Mengizinkan penyesuaian penghitungan ukuran buffer AudioTrack dengan memasukkan AudioTrackBufferSizeProvider ke DefaultAudioSink. (#8891).
    • Mencoba lagi pembuatan AudioTrack jika ukuran buffer yang diminta > 1 MB. (#9712).
  • Ekstraktor:
    • WAV: Menambahkan dukungan untuk streaming RF64 (#9543).
    • Memperbaiki penguraian unit H.265 SPS NAL yang salah (#9719).
    • Menguraikan Komentar Vorbis (termasuk METADATA_BLOCK_PICTURE) di file Ogg Opus dan Ogg Vorbis.
  • Teks:
    • Menambahkan kolom MediaItem.SubtitleConfiguration.id yang diperluas ke kolom Format.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.
  • DRM:
    • Menghapus playbackLooper dari DrmSessionManager.(pre)acquireSession. Saat DrmSessionManager digunakan oleh aplikasi di MediaSource kustom, playbackLooper harus diteruskan ke DrmSessionManager.setPlayer.
  • 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:
    • Memperbaiki warna angka di tombol mundur dan maju StyledPlayerView saat menggunakan tema tertentu (#9765).
    • Menerjemahkan string kecepatan pemutaran dengan benar (#9811).
  • DASH:
    • Menambahkan properti penting dan tambahan yang diuraikan ke Representation (#9579).
    • Mendukung peran trek forced-subtitle (#9727).
    • Berhenti menafsirkan peran trek main sebagai C.SELECTION_FLAG_DEFAULT.
    • Memperbaiki logika pengecualian URL dasar untuk manifes yang tidak mendeklarasikan namespace DVB (#9856).
    • Mendukung URL MPD.Location relatif (#9939).
  • 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).
  • 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).
  • 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 memanggil setClearMediaItemsOnStop(false) di konektor.
  • Ektensi transmisi:
    • Memperbaiki bug yang mencegah CastPlayer memanggil onIsPlayingChanged dengan benar (#9792).
    • Mendukung metadata audio termasuk karya seni dengan DefaultMediaItemConverter (#9663).
  • Ekstensi FFmpeg:
    • Membuat build_ffmpeg.sh bergantung pada bin utils LLVM, bukan GNU (#9933).
  • Kompatibilitas Android 12:
    • Mengupgrade ekstensi Transmisi agar bergantung pada com.google.android.gms:play-services-cast-framework:20.1.0. Versi play-services-cast-framework sebelumnya tidak kompatibel dengan aplikasi yang menargetkan Android 12, dan akan error dengan IllegalArgumentException saat membuat PendingIntent (#9528).
  • Menghapus simbol yang tidak digunakan lagi:
    • Menghapus Player.EventListener. Menggunakan Player.Listener sebagai gantinya.
    • Menghapus MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory, dan MediaSourceFactory#setDrmUserAgent. Menggunakan MediaSourceFactory#setDrmSessionManagerProvider sebagai gantinya.
    • Menghapus MediaSourceFactory#setStreamKeys. Menggunakan MediaItem.Builder#setStreamKeys sebagai gantinya.
    • Menghapus MediaSourceFactory#createMediaSource(Uri). Menggunakan MediaSourceFactory#createMediaSource(MediaItem) sebagai gantinya.
    • Menghapus setTag dari DashMediaSource, HlsMediaSource dan SsMediaSource. Menggunakan MediaItem.Builder#setTag sebagai gantinya.
    • Menghapus DashMediaSource#setLivePresentationDelayMs(long, boolean). Menggunakan MediaItem.Builder#setLiveConfiguration dan MediaItem.LiveConfiguration.Builder#setTargetOffsetMs untuk mengganti manifes, atau DashMediaSource#setFallbackTargetLiveOffsetMs untuk memberikan nilai penggantian.
    • Menghapus (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Anda tidak lagi dapat memilih untuk tidak menerapkan thread.
    • Menghapus ActionFile dan ActionFileUpgradeUtil. Menggunakan ExoPlayer 2.16.1 atau sebelum menggunakan ActionFileUpgradeUtil untuk menggabungkan file tindakan lama ke DefaultDownloadIndex.
    • Menghapus ProgressiveMediaSource#setExtractorsFactory. Menggunakan konstruktor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) sebagai gantinya.
    • Menghapus ProgressiveMediaSource.Factory#setTag dan ProgressiveMediaSource.Factory#setCustomCacheKey. Menggunakan MediaItem.Builder#setTag dan MediaItem.Builder#setCustomCacheKey sebagai gantinya.
    • Menghapus konstruktor DefaultRenderersFactory(Context, @ExtensionRendererMode int) dan DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Menggunakan konstruktor DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode, dan DefaultRenderersFactory#setAllowedVideoJoiningTimeMs sebagai gantinya.
    • Menghapus semua konstruktor CronetDataSource publik. Sebagai gantinya, gunakan CronetDataSource.Factory.
  • 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 paket com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (dalam paket com.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.