Media3
Mendukung library untuk kasus penggunaan media.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
26 Juni 2024 1.3.1 - 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.3.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"
}

Kotlin

dependencies {
    val media3_version = "1.3.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")
}

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-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 apakah Exoplayer.release() telah dipanggil.
    • Menambahkan ExoPlayer.Builder.setMaxSeekToPreviousPositionMs untuk mengonfigurasi posisi maksimum yang dicari seekToPrevious() ke item sebelumnya (#1425).
  • Transformator:
    • Hapus kolom ExportResult.processedInputs. Jika Anda menggunakan kolom ini untuk detail kodec, gunakan DefaultDecoderFactory.listener sebagai gantinya. Jika terjadi pengecualian codec, detail codec akan tersedia di ExportException.codecInfo.
  • Ekstraktor:
    • Memperbaiki ekstraksi format audio PCM dalam penampung AVI.
  • Gambar:
    • Izinkan null sebagai parameter untuk ExoPlayer.setImageOutput guna menghapus ImageOutput yang ditetapkan sebelumnya.
  • 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 dengan OverlaySettings.setHdrLuminanceMultiplier.
  • Sesi:
    • Menambahkan MediaSession.Callback.onPlayerInteractionFinished untuk memberi tahu sesi saat serangkaian interaksi pemain dari pengontrol tertentu selesai.
    • Tambahkan SessionError dan gunakan di SessionResult dan LibraryResult, 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 ke PlaybackStateCompat.getExtras() pengontrol media1.
    • Memetakan error fatal dan non-fatal ke dan dari sesi platform. PlaybackException dipetakan ke status error fatal PlaybackStateCompat. SessionError yang dikirim ke pengontrol notifikasi media dengan MediaSession.sendError(ControllerInfo, SessionError) dipetakan ke error non-fatal di PlaybackStateCompat yang berarti kode dan pesan error ditetapkan, tetapi status sesi platform tetap berbeda dengan STATE_ERROR.
  • UI:
    • Menambahkan dukungan tampilan gambar ke PlayerView saat terhubung ke ExoPlayer (#1144).
    • Menambahkan penyesuaian berbagai ikon di PlayerControlView melalui atribut xml untuk memungkinkan drawable yang berbeda per instance PlayerView, bukan penggantian global (#1200).
  • 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 konstanta Bundleable.Creator<Foo> CREATOR. Pemanggil harus menggunakan metode Bundle toBundle() dan static Foo fromBundle(Bundle) pada setiap jenis.

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 dan SimpleBasePlayer.handleSeek yang dilindungi, bukan mengabaikannya. Jika mengimplementasikan metode ini dalam pemutar kustom, Anda mungkin perlu menangani panggilan tambahan ini dengan mediaItemIndex == C.INDEX_UNSET.
    • Menghapus dependensi kompilasi pada desugaring Java 8 yang ditingkatkan (#1312).
    • Pastikan durasi yang diteruskan ke MediaItem.Builder.setImageDurationMs diabaikan untuk MediaItem non-gambar (seperti yang didokumentasikan).
  • ExoPlayer:
    • Tambahkan reset ke BasePreloadManager untuk merilis semua sumber penyimpanan sekaligus mempertahankan instance pengelola pramuat.
    • Tambahkan ExoPlayer.setPriority (dan Builder.setPriority) untuk menentukan nilai prioritas yang digunakan di PriorityTaskManager 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 implementasi DefaultPreloadManager dan PreloadMediaSource.PreloadControl kustom melakukan pramuat sumber berikutnya atau melakukan tindakan lain.
    • Memperbaiki bug saat melewatkan senyap di akhir item dapat memicu pengecualian pemutaran.
    • Tambahkan clear ke PreloadMediaSource 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 menjadi onSourcePrepared dan onPrepared menjadi onTracksSelected di PreloadMediaSource.PreloadControl. Selain itu, ganti nama IntDef di DefaultPreloadManager.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. Jika ExoPlayer ditetapkan dengan experimentalSetDynamicSchedulingEnabled, 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 oleh MediaCodecRenderer. MediaCodecRenderer akan memberi sinyal ExoPlayer saat menerima callback ini, dan jika ExoPlayer ditetapkan dengan experimentalSetDynamicSchedulingEnabled, ExoPlayer akan menjadwalkan loop kerjanya karena perender dapat melakukan progres.
    • Gunakan class data untuk metode LoadControl, bukan parameter individual.
  • 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 dengan androidx.media3.muxer.Muxer dan hapus androidx.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 header Content-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 frame Info, yang mungkin berukuran kecil secara artifisial, misalnya frame PCUT (#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 memanggil AudioTrack.stop() sehingga AudioTrack.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) dan TextRenderer.experimentalSetLegacyDecodingEnabled(true). Lihat dokumen tentang penyesuaian untuk mengetahui cara menggabungkan komponen ini ke dalam instance ExoPlayer. Metode ini (dan semua dukungan untuk decoding subtitel lama) akan dihapus dalam rilis mendatang.
      • Aplikasi dengan implementasi SubtitleDecoder kustom harus mengupdatenya untuk menerapkan SubtitleParser (dan SubtitleParser.Factory, bukan SubtitleDecoderFactory).
    • 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 bahwa rowLock dan columnLock harus dianggap benar, terlepas dari nilai yang ada dalam aliran data (dukungan columnLock 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 rilis 1.3.0-rc01. Hal ini sekarang telah diperbaiki, sehingga perubahan tersebut muncul kembali.
    • 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 ID3 TSO2, TSOA, dan TSOP (#1302).
    • Memperbaiki pembacaan tag gnre (genre) dan tmpo (tempo) numerik MP4 (/iTunes) jika nilainya lebih dari satu byte.
    • Menerapkan frame ID3 TCON ke MediaMetadata.genre (#1305).
  • 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 selama open(), bukan hard code saat pembuatan (#1405).
  • DRM:
    • Mengizinkan penetapan LoadErrorHandlingPolicy di DefaultDrmSessionManagerProvider (#1271).
  • Efek:
    • Memperbaiki bug saat TimestampWrapper mengalami error saat digunakan dengan ExoPlayer#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.
  • Ekstensi IMA:
    • Mempromosikan API yang diperlukan aplikasi untuk memutar streaming iklan DAI ke stabil.
    • Menambahkan replaceAdTagParameters(Map <String, String>) ke ImaServerSideAdInsertionMediaSource.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 iklan data:// (#700).
  • Sesi:
    • Menyembunyikan pencari di notifikasi media untuk live stream dengan tidak menyetel durasi ke dalam metadata sesi platform (#1256).
    • Selaraskan konversi MediaMetadata ke MediaDescriptionCompat, 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 (lihat MediaSession.getMediaNotificationControllerInfo()), error kustom digunakan untuk mengupdate PlaybackState sesi platform ke status error dengan informasi error yang diberikan (#543).
  • Ekstensi Cronet:
    • Perbaiki SocketTimeoutException di CronetDataSource. 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).
  • Ekstensi HLS:
    • Memperbaiki bug saat sampel EMSG yang tertunda yang menunggu penghentian didelegasikan di HlsSampleStreamWrapper dengan offset yang salah yang menyebabkan IndexOutOfBoundsException atau IllegalArgumentException (#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 dan IllegalArgumentException.
  • Ekstensi DASH:
    • Memperbaiki bug saat menyiapkan ulang live stream multi-periode dapat menampilkan IndexOutOfBoundsException (#1329).
    • Menambahkan dukungan untuk URL lisensi dashif:Laurl (#1345).
  • Ekstensi Cast:
    • Memperbaiki bug yang mengonversi judul album MediaQueueItem ke artis di item media Media3 (#1255).
  • Aplikasi demo:
    • Mengizinkan penyetelan mode pengulangan dengan argumen Intent dari command line (#1266).
  • Menghapus simbol yang tidak digunakan lagi:
    • Menghapus metode setContentTypePredicate(Predicate) dari DefaultHttpDataSource, OkHttpDataSource, dan CronetDataSource. Sebagai gantinya, gunakan metode yang setara di setiap XXXDataSource.Factory.
    • Menghapus konstruktor OkHttpDataSource dan OkHttpDataSourceFactory. Gunakan OkHttpDataSource.Factory sebagai gantinya.
    • Menghapus PlayerMessage.setHandler(Handler). Sebagai gantinya, gunakan setLooper(Looper).
    • Hapus kolom Timeline.Window.isLive. Sebagai gantinya, gunakan metode isLive().
    • Menghapus konstruktor DefaultHttpDataSource. Sebagai gantinya, gunakan DefaultHttpDataSource.Factory.
    • Menghapus DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Menggunakan DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS sebagai gantinya.
    • Menghapus MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Sebagai gantinya, gunakan MediaCodecInfo.canReuseCodec(Format, Format).
    • Hapus metode DrmSessionManager.DUMMY dan getDummyDrmSessionManager(). Gunakan DrmSessionManager.DRM_UNSUPPORTED sebagai gantinya.
    • Hapus AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format), VideoRendererEventListener.onVideoInputFormatChanged(Format). Gunakan overload yang menggunakan DecoderReuseEvaluation.
    • Hapus konstanta IntDef RendererSupport.FormatSupport dan FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE. Gunakan IntDef dan konstanta yang setara di androidx.media3.common.C sebagai gantinya (misalnya, C.FORMAT_HANDLED).

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 oleh rankingData-nya. Penyesuaian dapat dilakukan dengan memperluas class ini. Tambahkan DefaultPreloadManager yang menggunakan PreloadMediaSource untuk melakukan pramuat contoh media sumber ke dalam memori, dan menggunakan rankingData bilangan bulat yang menunjukkan indeks item di UI.
    • Menambahkan PlayerId ke sebagian besar metode LoadControl untuk mengaktifkan implementasi LoadControl guna mendukung beberapa pemain.
    • Menghapus Buffer.isDecodeOnly() dan C.BUFFER_FLAG_DECODE_ONLY. Tanda ini tidak perlu ditetapkan karena perender dan decoder akan memutuskan untuk melewati buffer berdasarkan stempel waktu. Implementasi Renderer kustom harus memeriksa apakah waktu buffer setidaknya BaseRenderer.getLastResetPositionUs() untuk menentukan apakah contoh harus ditampilkan. Implementasi SimpleDecoder kustom dapat memeriksa isAtLeastOutputStartTimeUs jika diperlukan atau menandai buffer lain dengan DecoderOutputBuffer.shouldBeSkipped untuk melewatinya.
    • Mengizinkan nilai null ditampilkan oleh TargetPreloadStatusControl.getTargetPreloadStatus(T) untuk menunjukkan bahwa tidak melakukan pramuat MediaSource dengan rankingData yang diberikan.
    • Menambahkan remove(MediaSource) ke BasePreloadManager.
  • Transformator:
    • Tambahkan audioConversionProcess dan videoConversionProcess ke ExportResult 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.
  • Video:
    • Memperbaiki masalah saat Listener.onRenderedFirstFrame() muncul terlalu awal saat mengganti platform di tengah pemutaran.
  • DataSource:
    • Implementasikan dukungan untuk URI resource mentah android.resource://package/id dengan package 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 konstruktor DataSpec. Parameter ini sudah dianotasi sebagai non-null.
  • Efek:
    • Mendukung beberapa perubahan kecepatan dalam EditedMediaItem atau Composition yang sama dalam SpeedChangeEffect.
    • 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 menggunakan OverlaySettings.Builder.setOverlayFrameAnchor(), balikkan nilai x dan y dengan mengalikannya dengan -1.
  • Sesi:
    • Ubah default CommandButton.enabled menjadi true 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 di onTaskRemoved() (#1219).
    • Tambahkan MediaSessionService.pauseAllPlayersAndStopSelf() yang dengan mudah memungkinkan menjeda pemutaran semua sesi dan memanggil stopSelf untuk menghentikan siklus proses MediaSessionService.
    • 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.
  • Download:
    • Pastikan DownloadHelper tidak membocorkan instance Renderer yang belum dirilis, yang pada akhirnya dapat mengakibatkan aplikasi error dengan IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224).
  • Utilitas Pengujian:
    • Implementasikan onInit() dan onRelease() di FakeRenderer.
    • Ubah metode TestPlayerRunHelper.runUntil/playUntil agar gagal pada error nonfatal (misalnya yang dilaporkan ke AnalyticsListener.onVideoCodecError). Gunakan rantai metode TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() baru untuk menonaktifkan perilaku ini.
  • Aplikasi demo:
    • Gunakan DefaultPreloadManager dalam aplikasi demo singkat.
  • Menghapus simbol yang tidak digunakan lagi:
    • Menghapus CronetDataSourceFactory. Sebagai gantinya, gunakan CronetDataSource.Factory.
    • Hapus beberapa konstruktor DataSpec. Sebagai gantinya, gunakan DataSpec.Builder.

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.
  • 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 untuk DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformator:
    • Menambahkan solusi untuk pengecualian yang ditampilkan karena MediaMuxer tidak mendukung stempel waktu presentasi negatif sebelum API 30.
  • 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 seperti XING dan VBRI.
    • 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 dari WebvttParser.parse (#1177).
  • DRM:
    • Mengatasi NoSuchMethodError yang dapat ditampilkan oleh framework MediaDrm, bukan ResourceBusyException atau NotProvisionedException di beberapa perangkat Android 14 (#1145).
  • Efek:
    • Peningkatan pemetaan warna PQ ke SDR dengan mengonversi ruang warna.
  • Sesi:
    • Memperbaiki masalah saat posisi saat ini melompat kembali saat pengontrol menggantikan item saat ini (#951).
    • Memperbaiki masalah saat MediaMetadata yang hanya berisi extras non-null tidak ditransmisikan antara pengontrol media dan sesi (#1176).
  • UI:
    • Penggantian untuk menyertakan nama bahasa trek audio jika Locale tidak dapat mengidentifikasi nama tampilan (#988).
  • Ekstensi DASH:
    • Mengisi semua elemen Label dari manifes ke dalam Format.labels (#1054).
  • 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 dengan package 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, bukan Uri tunggal di AdPlaybackState.
    • 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 dan artworkData di MediaMetadata.Builder.populate(MediaMetadata) jika setidaknya salah satunya adalah non-null (#964).
  • ExoPlayer:
    • Tambahkan PreloadMediaSource dan PreloadMediaPeriod yang memungkinkan aplikasi melakukan pramuat sumber media konten di posisi awal tertentu sebelum pemutaran. PreloadMediaSource menangani penyiapan sumber media konten untuk menerima Timeline, 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 menerapkan PreloadMediaSource.PreloadControl dan menyetel sumber yang dipramuat ke pemutar untuk diputar.
    • Menambahkan ExoPlayer.setImageOutput yang mengizinkan aplikasi untuk menyetel ImageRenderer.ImageOutput.
    • DefaultRenderersFactory sekarang menyediakan ImageRenderer kepada pemain secara default dengan ImageOutput dan ImageDecoder.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 mengimplementasikan CompositeSequenceableLoaderFactory kustom.
    • Memperbaiki masalah jika pengulangan waktu yang sama menyebabkan metadata dari item ini dihapus (#1007).
    • Ganti nama metode experimentalSetSubtitleParserFactory di BundledChunkExtractor.Factory dan DefaultHlsExtractorFactory menjadi setSubtitleParserFactory, lalu jangan izinkan penerusan null. Gunakan metode experimentalParseSubtitlesDuringExtraction(boolean) baru untuk mengontrol perilaku penguraian.
    • Menambahkan dukungan untuk menyesuaikan SubtitleParser.Factory yang digunakan selama ekstraksi. Hal ini dapat dilakukan dengan MediaSource.Factory.setSubtitleParserFactory().
    • Tambahkan awalan sumber ke semua kolom Format.id yang dihasilkan dari MergingMediaSource. Hal ini membantu mengidentifikasi sumber mana yang menghasilkan Format (#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).
  • 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 adalah false, yang berarti pemilihan trek video diprioritaskan.
  • Ekstraktor:
    • Menambahkan penguraian AV1C tambahan ke pengekstrak MP4 untuk mengambil nilai ColorInfo.colorSpace, ColorInfo.colorTransfer, dan ColorInfo.colorRange (#692).
    • MP3: Gunakan pencarian kecepatan bit konstan (CBR) untuk mencari file dengan header Info (CBR yang setara dengan header Xing). Sebelumnya, kita menggunakan tabel pencarian dari header Info, 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).
  • Audio:
    • Meningkatkan algoritma melewatkan keheningan dengan peningkatan volume yang halus; mempertahankan kesenyapan minimal dan durasi senyap yang lebih alami (#7423).
    • Melaporkan keheningan yang dilewati secara lebih pasti (#1035).
  • Video:
    • Ubah konstruktor MediaCodecVideoRenderer yang menggunakan argumen VideoFrameProcessor.Factory dan ganti dengan konstruktor yang menggunakan argumen VideoSinkProvider. Aplikasi yang ingin memasukkan VideoFrameProcessor.Factory kustom dapat membuat instance CompositingVideoSinkProvider yang menggunakan VideoFrameProcessor.Factory kustom dan meneruskan penyedia sink video ke MediaCodecVideoRenderer.
  • Teks:
    • Memperbaiki serialisasi isyarat bitmap untuk mengatasi error Tried to marshall a Parcel that contained Binder objects saat menggunakan DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: Abaikan nilai rowLock. Spesifikasi CEA-708-E S-2023 menyatakan bahwa rowLock dan columnLock harus dianggap benar, terlepas dari nilai yang ada dalam aliran data (dukungan columnLock tidak diterapkan, sehingga secara efektif diasumsikan selalu salah).
  • Gambar:
    • Menambahkan dukungan untuk thumbnail DASH. Gambar petak akan dipangkas dan thumbnail satu per satu diberikan ke ImageOutput mendekati waktu presentasinya.
  • DRM:
  • 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 menggunakan Context, bukan MediaLibraryService.
  • 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).
  • 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.
  • Aplikasi demo:
    • Tambahkan modul demo singkat untuk mendemonstrasikan penggunaan PreloadMediaSource dengan kasus penggunaan konten pendek.

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 ke min/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 untuk bufferedDurationUs dari sumber potongan, sehingga menghasilkan IllegalArgumentException (#888).
  • 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).
  • Audio:
    • Memperbaiki penanganan EOS untuk SilenceSkippingAudioProcessor saat dipanggil beberapa kali (#712).
  • 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.
  • 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.
  • Sesi:
    • Tempatkan kunci dan nilai kustom dalam MediaMetadataCompat ke MediaMetadata.extras dan MediaMetadata.extras ke MediaMetadataCompat (#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).
  • UI:
    • Memperbaiki masalah saat tombol maju dan mundur tidak terlihat saat digunakan dengan Desain Material di BottomSheetDialogFragment (#511).
    • Memperbaiki masalah saat angka di tombol maju cepat PlayerControlView tidak selaras (#547).
  • Ekstensi DASH:
    • Mengurai "f800" sebagai jumlah saluran 5 untuk Dolby dalam manifes DASH (#688).
  • Ekstensi Decoder (FFmpeg, VP9, AV1, MIDI, dll.):
    • MIDI: Memperbaiki masalah saat pencarian maju akan melewati peristiwa Perubahan Program (#704).
    • Bermigrasi ke FFmpeg 6.0 dan mengupdate NDK yang didukung ke r26b (#707, #867).
  • Ekstensi Cast:
    • Membersihkan pembuatan Timeline agar tidak membuat aplikasi error saat memuat media gagal di perangkat transmisi (#708).

Versi 1.2.0

15 November 2023

  • Perpustakaan Umum:
    • Tambahkan parameter @Nullable Throwable ke metode dalam antarmuka Log.Logger. Parameter message ke metode ini tidak lagi berisi informasi apa pun tentang Throwable yang diteruskan ke metode Log.{d,i,w,e}(), sehingga implementasi harus menambahkan informasi ini secara manual jika diinginkan (mungkin menggunakan Logger.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 dan SimpleDecoder (#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 menggunakan PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) atau MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Upgrade androidx.annotation:annotation-experimental ke 1.3.1 untuk memperbaiki https://issuetracker.google.com/251172715.
    • Pindahkan ExoPlayer.setAudioAttributes ke antarmuka Player.
  • 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 sebagai Player.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 dan MediaSource.updateMediaItem untuk menerima update MediaItem setelah pembuatan melalui Player.replaceMediaItem(s).
    • Mengizinkan update MediaItem untuk semua class MediaSource yang disediakan oleh library melalui Player.replaceMediaItem(s) (#33, #9978).
    • Mengganti nama MimeTypes.TEXT_EXOPLAYER_CUES menjadi MimeTypes.APPLICATION_MEDIA3_CUES.
    • Tambahkan PngExtractor yang mengirim dan membaca seluruh file PNG ke dalam TrackOutput sebagai satu sampel.
    • Meningkatkan kualitas metode SequenceableLoader.continueLoading(long) di antarmuka SequenceableLoader ke SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo berisi parameter tambahan, termasuk playbackSpeed dan lastRebufferRealtimeMs, selain playbackPositionUs yang ada.
    • Meningkatkan metode ChunkSource.getNextChunk(long, long, List, ChunkHolder) di antarmuka ChunkSource ke ChunkSource.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 di ExperimentalBandwidthMeter (#612).
    • Tambahkan parameter MediaPeriodId ke CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Mendukung ClippingMediaSource (dan sumber lainnya dengan offset waktu periode/periode) di ConcatenatingMediaSource2 (#11226).
    • Ubah BaseRenderer.onStreamChanged() agar juga menerima argumen MediaPeriodId.
  • Transformator:
    • Mengurai data rotasi EXIF untuk input gambar.
    • Hapus jenis anotasi TransformationRequest.HdrMode dan konstanta terkaitnya. Gunakan Composition.HdrMode dan konstanta terkaitnya sebagai gantinya.
    • Sederhanakan OverlaySettings untuk memperbaiki masalah rotasi.
    • Mengubah parameter frameRate dan durationUs dari SampleConsumer.queueInputBitmap menjadi TimestampIterator.
  • Pemilihan Trek:
    • Menambahkan DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness untuk secara eksplisit mengizinkan atau melarang adaptasi yang tidak lancar. Defaultnya tetap pada perilaku true saat ini.
  • Ekstraktor:
    • MPEG-TS: Memastikan frame terakhir dirender dengan meneruskan unit akses terakhir aliran ke antrean contoh (#7909).
    • Memperbaiki kesalahan ketik saat menentukan rotationDegrees. Mengubah projectionPosePitch menjadi projectionPoseRoll (#461).
    • Hapus asumsi bahwa instance Extractor dapat langsung diperiksa dengan instanceof. Jika Anda ingin akses runtime ke detail implementasi Extractor, Anda harus memanggil Extractor.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 melalui DefaultAudioOffloadSupportProvider. Metode ini menampilkan AudioOffloadSupport baru yang berisi isFormatSupported, isGaplessSupported, dan isSpeedChangeSupported.
    • Menambahkan AudioSink.setOffloadMode() yang mengonfigurasi konfigurasi pengurangan beban di sink audio. Defaultnya adalah AudioSink.OFFLOAD_MODE_DISABLED.
    • Pengurangan beban dapat diaktifkan melalui setAudioOffloadPreference di TrackSelectionParameters. 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 ke AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, maka DefaultTrackSelector 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 metode DefaultRenderersFactory.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 dan AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • Mengganti nama onExperimentalSleepingForOffloadChanged sebagai onSleepingForOffloadChanged dan onExperimentalOffloadedPlayback sebagai onOffloadedPlayback.
    • Pindahkan antarmuka dan definisi TrackSelectionParameters terkait mode pengurangan beban audio ke class AudioOffloadPreferences bagian dalam.
    • Tambahkan callback onAudioTrackInitialized dan onAudioTrackReleased ke AnalyticsListener, AudioRendererEventListener, dan AudioSink.Listener.
    • Memperbaiki masalah underflow buffer audio DTS Express (#650).
    • Memperbaiki bug saat pemeriksaan kemampuan untuk E-AC3-JOC menampilkan IllegalArgumentException (#677).
  • Video:
    • Izinkan MediaCodecVideoRenderer menggunakan VideoFrameProcessor.Factory kustom.
    • Memperbaiki bug saat frame pertama tidak dapat dirender jika streaming audio dimulai dengan stempel waktu negatif (#291).
  • Teks:
    • Menghapus ExoplayerCuesDecoder. Jalur teks dengan sampleMimeType = application/x-media3-cues kini ditangani langsung oleh TextRenderer tanpa memerlukan instance SubtitleDecoder.
  • 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 mengimplementasikan VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Mengubah parameter frameRate dan durationUs dari VideoFrameProcessor.queueInputBitmap menjadi TimestampIterator.
  • 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 di DefaultMediaNotificationProvider (#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 ke MediaSessionCompat 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 dan notifyChildrenChanged() 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 tombol queue di UI Android Auto tidak ditampilkan (#339).
    • Menggunakan DataSourceBitmapLoader secara default, bukan SimpleBitmapLoader (#271, #327).
    • Menambahkan MediaSession.Callback.onMediaButtonEvent(Intent) yang memungkinkan aplikasi mengganti penanganan peristiwa tombol media default.
  • UI:
    • Tambahkan implementasi Player.Listener untuk perangkat Wear OS yang menangani penghentian pemutaran karena Player.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).
  • Download:
    • Deklarasikan jenis layanan latar depan "sinkronisasi data" untuk DownloadService guna kompatibilitas Android 14. Saat menggunakan layanan ini, aplikasi juga perlu menambahkan dataSync sebagai foregroundServiceType dalam manifes dan menambahkan izin FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • 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).
  • 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 daripada C.BUFFER_FLAG_DECODE_ONLY yang tidak akan digunakan lagi.
    • Tambahkan Decoder.setOutputStartTimeUs dan SimpleDecoder.isAtLeastOutputStartTimeUs untuk memungkinkan decoder menghapus sampel khusus dekode sebelum waktu mulai. Ini harus lebih diutamakan daripada Buffer.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).
  • Utilitas Pengujian:
    • Buat TestExoPlayerBuilder dan FakeClock 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.
  • Menghapus simbol yang tidak digunakan lagi:
    • Hapus TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) dan TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Gunakan Composition.Builder.setHdrMode(int) dan teruskan Composition ke Transformer.start(Composition, String) sebagai gantinya.
    • Hapus metode DownloadNotificationHelper.buildProgressNotification yang tidak digunakan lagi, gunakan metode yang tidak digunakan lagi dan menggunakan parameter notMetRequirements.

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).
  • ExoPlayer:
    • Memperbaiki masalah di PlaybackStatsListener saat PlaybackStats 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).
  • Audio:
    • Memperbaiki bug yang menyebabkan Player.getState() tidak pernah ditransisikan ke STATE_ENDED saat memutar file yang sangat pendek (#538).
  • 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 di MediaSession.Callback.onConnect menggunakan AcceptedResultBuilder untuk memastikan tata letak kustom tersedia bagi pengontrol saat koneksi selesai.
    • Memperbaiki kasus saat MediaLibraryServiceLegacyStub mengirim error ke Result yang tidak mendukung hal ini yang menghasilkan UnsupportedOperationException (#78).
    • Memperbaiki cara PlayerWrapper membuat VolumeProviderCompat dengan menentukan volumeControlType melalui perintah lama (COMMAND_ADJUST_DEVICE_VOLUME dan COMMAND_SET_DEVICE_VOLUME) serta perintah baru (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS dan COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

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 untuk DeviceInfo 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) dan setDeviceVolume(int, int)
      • increaseDeviceVolume(int) dan increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) dan decreaseDeviceVolume(int, int)
    • Tambahkan FilteringMediaSource yang memungkinkan Anda memfilter jenis jalur yang tersedia dari MediaSource.
    • 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, dan sid, 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.
    • Menambahkan tindakan lain ke manifes demo utama untuk mempermudah memulai aplikasi demo dengan file *.exolist.json kustom (#439).
    • Menambahkan ExoPlayer.setVideoEffects() untuk menggunakan Effect selama pemutaran video.
    • Update SampleQueue untuk menyimpan sourceId sebagai long, bukan int. Tindakan ini mengubah tanda tangan metode publik SampleQueue.sourceId dan SampleQueue.peekSourceId.
    • Tambahkan parameter ke metode LoadControl shouldStartPlayback dan onTracksSelected yang memungkinkan pengaitan metode ini dengan MediaPeriod 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) dan BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). Varian metode tanpa mediaTimeOffsetUs dapat dipanggil sebagai gantinya. Perhatikan bahwa meskipun untuk varian yang tidak digunakan lagi, offset tidak lagi ditambahkan ke startTimeUs dan endTimeUs dari objek MediaLoadData yang dikirim oleh dispatcher.
    • Ganti nama ExoTrackSelection.blacklist menjadi excludeTrack dan isBlacklisted menjadi isTrackExcluded.
    • Memperbaiki perilaku yang tidak konsisten antara ExoPlayer.setMediaItem(s) dan addMediaItem(s) saat dipanggil di playlist kosong.
  • Transformator:
    • Menghapus Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Gunakan ExoPlayerAssetLoader.Factory(MediaSource.Factory) dan Transformer.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 utilitas findDecoder/EncoderForFormat, untuk memperluas dukungan.
    • Hapus konfigurasi frame B di DefaultEncoderFactory karena tidak berfungsi di beberapa perangkat.
  • Pemilihan trek:
    • Menambahkan DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange yang dinonaktifkan secara default. Jika diaktifkan, DefaultTrackSelector akan memicu pilihan jalur baru saat kemampuan perender berubah.
  • Ekstraktor:
    • Ogg: Memperbaiki bug saat mencari dalam file dengan durasi yang lama (#391).
    • FMP4: Memperbaiki masalah saat TimestampAdjuster menginisialisasi offset stempel waktu yang salah dengan waktu sampel metadata dari emsg atom (#356).
  • 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() dan AudioSink.release() untuk merilis resource di akhir siklus proses pemain.
    • Dengarkan perubahan kemampuan audio dalam DefaultAudioSink. Tambahkan parameter yang diperlukan context dalam konstruktor DefaultAudioSink, yang akan digunakan untuk mendaftarkan DefaultAudioSink sebagai pemroses ke AudioCapabilitiesReceiver dan memperbarui properti audioCapabilities-nya saat diberi tahu tentang perubahan kemampuan.
    • Terapkan perubahan kemampuan audio melalui peristiwa onAudioCapabilitiesChanged baru di antarmuka AudioSink.Listener, dan antarmuka baru RendererCapabilities.Listener yang memicu peristiwa onRendererCapabilitiesChanged.
    • Menambahkan ChannelMixingAudioProcessor untuk menerapkan penskalaan/pencampuran ke saluran audio.
    • Tambahkan nilai int baru DISCARD_REASON_AUDIO_BYPASS_POSSIBLE ke DecoderDiscardReasons untuk menghapus dekoder audio jika mode pengabaian memungkinkan setelah kemampuan audio berubah.
    • Menambahkan dukungan pemutaran langsung untuk DTS Express dan DTS:X (#335).
  • Video:
    • Buat laporan MediaCodecVideoRenderer sebagai VideoSize dengan lebar dan tinggi 0 saat perender dinonaktifkan. Player.Listener.onVideoSizeChanged dipanggil sebagaimana mestinya saat Player.getVideoSize() berubah. Dengan perubahan ini, ukuran video ExoPlayer dengan MediaCodecVideoRenderer memiliki lebar dan tinggi 0 jika Player.getCurrentTracks tidak mendukung video, atau ukuran trek video yang didukung belum ditentukan.
  • 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)
  • 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 metode Player.
    • 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 memungkinkan MediaItems yang diminta diteruskan ke Player jika memiliki LocalConfiguration (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 memungkinkan MediaItems yang diminta diteruskan ke Player jika memiliki LocalConfiguration (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).
  • UI:
    • Menambahkan metode Utilitas shouldShowPlayButton dan handlePlayPauseButtonAction untuk menulis elemen UI kustom dengan tombol putar/jeda.
  • Ekstensi RTSP:
    • Untuk MPEG4-LATM, gunakan nilai id tingkat-profil default jika tidak ada dalam pesan SDP Explain Respons (#302).
    • Gunakan Uri dasar untuk resolusi jalur relatif dari sesi RTSP jika ada dalam header respons DESCRIBE (#11160).
  • Ekstensi DASH:
    • Hapus offset waktu media dari MediaLoadData.startTimeMs dan MediaLoadData.endTimeMs untuk aliran DASH multi periode.
    • Memperbaiki bug saat menyiapkan ulang sumber media Dash live multi-periode menghasilkan IndexOutOfBoundsException (#10838).
  • Ekstensi HLS:
    • Tambahkan HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) untuk menetapkan waktu tunggu bagi thread pemuatan untuk menunggu TimestampAdjuster 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).
  • Utilitas Pengujian:
    • Memeriksa ketidakpekaan huruf besar/kecil skema URI di DataSourceContractTest.
  • Menghapus simbol yang tidak digunakan lagi:
    • Hapus konstruktor DefaultAudioSink, dan gunakan DefaultAudioSink.Builder sebagai gantinya.
    • Hapus HlsMasterPlaylist, gunakan HlsMultivariantPlaylist sebagai gantinya.
    • Menghapus Player.stop(boolean). Gunakan Player.stop() dan Player.clearMediaItems() (jika reset adalah true).
    • Hapus dua konstruktor SimpleCache yang tidak digunakan lagi, dan gunakan konstruktor yang masih tidak digunakan lagi yang menggunakan DatabaseProvider untuk mendapatkan performa yang lebih baik.
    • Hapus konstruktor DefaultBandwidthMeter, dan gunakan DefaultBandwidthMeter.Builder sebagai gantinya.
    • Hapus konstruktor DefaultDrmSessionManager, dan gunakan DefaultDrmSessionManager.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, dan DownloadHelper.forSmoothStreaming, gunakan DownloadHelper.forMediaItem sebagai gantinya.
    • Hapus konstruktor DownloadService yang tidak digunakan lagi, gunakan konstruktor yang tidak digunakan lagi yang menyertakan opsi untuk memberikan parameter channelDescriptionResourceId.
    • Hapus konstanta String yang tidak digunakan lagi untuk Charset (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME, dan UTF16LE_NAME), gunakan Charset Kotlin dari paket kotlin.text, java.nio.charset.StandardCharsets, atau com.google.common.base.Charsets.
    • Hapus konstruktor WorkManagerScheduler yang tidak digunakan lagi, dan gunakan konstruktor yang masih digunakan dengan opsi untuk memberikan parameter Context.
    • Hapus metode createVideoSampleFormat, createAudioSampleFormat, createContainerFormat, dan createSampleFormat yang tidak digunakan lagi, yang digunakan untuk membuat instance class Format. Sebagai gantinya, gunakan Format.Builder untuk membuat instance Format.
    • Hapus metode copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate dan copyWithVideoSize yang tidak digunakan lagi. Sebagai gantinya, gunakan Format.buildUpon() dan metode penyetel.
    • Hapus ExoPlayer.retry() yang tidak digunakan lagi, gunakan prepare() sebagai gantinya.
    • Hapus konstruktor DefaultTrackSelector zero-arg yang tidak digunakan lagi, dan gunakan DefaultTrackSelector(Context) sebagai gantinya.
    • Hapus konstruktor OfflineLicenseHelper yang tidak digunakan lagi, dan gunakan OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) sebagai gantinya.
    • Hapus konstruktor DownloadManager yang tidak digunakan lagi, gunakan konstruktor yang menggunakan Executor sebagai gantinya.
    • Hapus konstruktor Cue yang tidak digunakan lagi, dan gunakan Cue.Builder sebagai gantinya.
    • Hapus konstruktor OfflineLicenseHelper yang tidak digunakan lagi, dan gunakan OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) sebagai gantinya.
    • Hapus empat metode AnalyticsListener yang tidak digunakan lagi:
      • onDecoderEnabled, gunakan onAudioEnabled dan/atau onVideoEnabled sebagai gantinya.
      • onDecoderInitialized, gunakan onAudioDecoderInitialized dan/atau onVideoDecoderInitialized sebagai gantinya.
      • onDecoderInputFormatChanged, gunakan onAudioInputFormatChanged dan/atau onVideoInputFormatChanged sebagai gantinya.
      • onDecoderDisabled, gunakan onAudioDisabled dan/atau onVideoDisabled sebagai gantinya.
    • Hapus Player.Listener.onSeekProcessed dan AnalyticsListener.onSeekProcessed yang tidak digunakan lagi, dan gunakan onPositionDiscontinuity dengan DISCONTINUITY_REASON_SEEK sebagai gantinya.
    • Hapus ExoPlayer.setHandleWakeLock(boolean), gunakan setWakeMode(int).
    • Hapus DefaultLoadControl.Builder.createDefaultLoadControl() yang tidak digunakan lagi, gunakan build() sebagai gantinya.
    • Hapus MediaItem.PlaybackProperties yang tidak digunakan lagi, gunakan MediaItem.LocalConfiguration sebagai gantinya. Kolom yang tidak digunakan lagi MediaItem.playbackProperties sekarang berjenis MediaItem.LocalConfiguration.

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 apakah Buffer berisi flag C.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).
  • 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 ke MediaSessionCompat lama yang memperbarui tindakannya.
    • Memperbaiki bug yang mencegah MediaLibraryService menampilkan null untuk panggilan dari UI Sistem ke Callback.onGetLibraryRoot dengan params.isRecent == true pada API 30 (#355).
    • Memperbaiki kebocoran memori MediaSessionService atau MediaLibraryService (#346).
    • Memperbaiki bug saat gabungan Timeline dan pembaruan posisi dalam MediaSession dapat menyebabkan MediaController menampilkan IllegalStateException.

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 di MediaController (#290).
    • Menambahkan penerusan MediaSession.broadcastCustomCommand yang hilang ke MediaControllerCompat.Callback.onSessionEvent lama (#293).
    • Memperbaiki bug saat memanggil MediaSession.setPlayer tidak memperbarui perintah yang tersedia.
    • Memperbaiki masalah saat instance TrackSelectionOverride yang dikirim dari MediaController diabaikan jika mereferensikan grup dengan Format.metadata (#296).
    • Perbaiki masalah saat Player.COMMAND_GET_CURRENT_MEDIA_ITEM harus tersedia untuk mengakses metadata melalui MediaSessionCompat lama.
    • Memperbaiki masalah saat instance MediaSession pada thread latar belakang menyebabkan error saat digunakan di MediaSessionService (#318).
    • Memperbaiki masalah saat penerima tombol media dideklarasikan oleh library tanpa dimaksudkan oleh aplikasi (#314).
  • 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:
    • Memperbaiki deteksi jenis jaringan di API 33 (#10970).
    • Memperbaiki NullPointerException saat memanggil ExoPlayer.isTunnelingEnabled (#10977).
  • Download:
    • Membuat perbedaan maksimum waktu mulai dua segmen agar gabungan dapat dikonfigurasi dalam SegmentDownloader dan subclass (#248).
  • Audio:
    • Memperbaiki pemutaran MP3 tanpa jeda yang rusak di perangkat Samsung (#8594).
    • Memperbaiki bug saat kecepatan pemutaran yang disetel langsung setelah menonaktifkan audio dapat digantikan oleh perubahan kecepatan sebelumnya (#10882).
  • Video:
    • Petakan format HEVC HDR10 ke HEVCProfileMain10HDR10, bukan HEVCProfileMain10.
    • 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.
  • Pemeran:
    • Memperbaiki STATE_IDLE sementara saat bertransisi antar-item media (#245).
  • 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.

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 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 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 transmisi:
    • 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).
  • Pemeran:
    • 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.