Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Media3

Support library untuk kasus penggunaan media.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
21 Juli 2022 - - 1.0.0-beta02 -

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 {
    val media3_version = "1.0.0-beta02"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.0.0-beta02"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

Untuk mengetahui informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Anda dapat menggunakan Issue tracker media3 untuk menemukan jawaban atas pertanyaan, masalah umum dan permintaan fitur, serta mengajukan masalah baru.

Versi 1.0.0

Versi 1.0.0-beta02

21 Juli 2022

androidx.media3:media3-*:1.0.0-beta02 dirilis. Versi 1.0.0-beta02 berisi commit ini.

Rilis ini sesuai dengan rilis ExoPlayer 2.18.1.

  • Library Core:
    • Memastikan bahwa mengubah ShuffleOrder dengan ExoPlayer.setShuffleOrder akan menghasilkan panggilan ke Player.Listener#onTimelineChanged dengan reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Untuk media progresif, hanya sertakan lagu yang dipilih dalam posisi buffering (#10361).
    • Mengizinkan logger kustom untuk semua output log ExoPlayer (#9752).
    • Memperbaiki implementasi setDataSourceFactory di DefaultMediaSourceFactory, yang dalam kasus tertentu tidak berfungsi (#116).
  • Ekstraktor:
    • Memperbaiki penguraian kumpulan gambar referensi jangka pendek H265 (#10316).
    • Memperbaiki penguraian kecepatan bit dari kotak esds (#10381).
  • DASH:
    • Menguraikan URL lisensi ClearKey dari manifes (#10246).
  • UI:
    • Memastikan TalkBack mengumumkan opsi kecepatan yang saat ini aktif di menu kontrol pemutaran (#10298).
  • RTSP:
    • Menambahkan penanganan paket terpisah-pisah VP8 (#110).
  • Ekstensi Leanback:
    • Memproses perubahan playWhenReady di LeanbackAdapter (10420).
  • Cast:
    • Menggunakan MediaItem yang telah diteruskan ke metode playlist sebagai Window.mediaItem di CastTimeline (#25, #8212).
    • Mendukung Player.getMetadata() dan Listener.onMediaMetadataChanged() dengan CastPlayer (#25).

Versi 1.0.0-beta01

16 Juni 2022

androidx.media3:media3-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Ini sama dengan rilis ExoPlayer 2.18.0.

  • Library Core:
    • Mengaktifkan dukungan untuk diagnostik platform Android melalui MediaMetricsManager. ExoPlayer akan meneruskan peristiwa pemutaran dan data performa ke platform, yang membantu memberikan informasi performa dan proses debug sistem di perangkat. Data ini juga dapat dikumpulkan oleh Google jika berbagi data penggunaan dan diagnostik diaktifkan oleh pengguna perangkat. Aplikasi dapat memilih untuk tidak berkontribusi pada diagnostik platform untuk ExoPlayer dengan ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Memperbaiki bug yang menyebabkan trek terlalu sering direset saat menggunakan MergingMediaSource, misalnya saat melakukan sideload subtitel dan mengubah subtitel yang dipilih di tengah pemutaran (#10248).
    • Menghentikan deteksi jenis jaringan 5G-NSA di API 29 dan 30. Pemutaran ini akan menggunakan jaringan 4G.
    • Tidak mengizinkan penerusan null ke MediaSource.Factory.setDrmSessionManagerProvider dan MediaSource.Factory.setLoadErrorHandlingPolicy. Instance DefaultDrmSessionManagerProvider dan DefaultLoadErrorHandlingPolicy dapat diteruskan secara eksplisit jika diperlukan.
    • Menambahkan MediaItem.RequestMetadata untuk merepresentasikan metadata yang diperlukan untuk memutar media saat LocalConfiguration yang tepat tidak diketahui. Juga menghapus MediaMetadata.mediaUrl karena kini telah disertakan dalam RequestMetadata.
    • Menambahkan Player.Command.COMMAND_SET_MEDIA_ITEM agar pemutar dapat mengizinkan penyetelan satu item.
  • Pemilihan trek:
    • Menggabungkan class TrackSelectionOverrides ke dalam TrackSelectionParameters, dan mempromosikan TrackSelectionOverride ke class level atas.
    • Mengganti nama TracksInfo menjadi Tracks dan TracksInfo.TrackGroupInfo menjadi Tracks.Group. Player.getCurrentTracksInfo dan Player.Listener.onTracksInfoChanged juga diganti namanya menjadi Player.getCurrentTracks dan Player.Listener.onTracksChanged. Ini termasuk 'un-deprecating' (membatalkan penghentian penggunaan) nama metode Player.Listener.onTracksChanged, tetapi dengan jenis parameter yang berbeda.
    • Mengubah DefaultTrackSelector.buildUponParameters dan DefaultTrackSelector.Parameters.buildUpon untuk menampilkan DefaultTrackSelector.Parameters.Builder, bukan DefaultTrackSelector.ParametersBuilder yang tidak digunakan lagi.
    • Menambahkan DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities yang diaktifkan secara default. Jika diaktifkan, DefaultTrackSelector akan memilih trek audio yang jumlah salurannya tidak melebihi kemampuan output perangkat. Pada perangkat genggam, DefaultTrackSelector akan lebih memilih stereo/mono dibandingkan format audio multisaluran, kecuali jika format multisaluran dapat Dispasialisasi (Android 12L+) atau berupa format suara surround Dolby. Selain itu, pada perangkat yang mendukung spasialisasi audio, DefaultTrackSelector akan memantau perubahan di properti Spatializer dan memicu pemilihan trek baru berdasarkan perubahan tersebut. Perangkat dengan mode UI television dikecualikan dari batasan ini dan format dengan jumlah saluran tertinggi akan diutamakan. Untuk mengaktifkan fitur ini, instance DefaultTrackSelector harus dibuat dengan Context.
  • Video:
    • Mengganti nama DummySurface menjadi PlaceholderSurface.
    • Menambahkan dukungan AV1 ke MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Menggunakan decoder 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 diupdate 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.
    • Mengupdate 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 yang dipercepat hardware (#4835).
    • Memilih preferensi konten audio (misalnya, trek audio "default" atau trek yang cocok dengan bahasa lokal sistem) daripada batasan pemilihan trek teknis (misalnya, jenis MIME yang disukai, atau jumlah channel maksimum).
    • Memperbaiki masalah pemilihan trek saat mengganti 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.