fix(deps): update media3version to v1.11.0 #101

Merged
asteriasmaid[bot] merged 1 commit from renovate/media3version into master 2026-08-22 16:28:26 +02:00
asteriasmaid[bot] commented 2026-08-07 11:01:10 +02:00 (Migrated from github.com)

This PR contains the following updates:

Package Change Age Confidence
androidx.media3:media3-ui 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-cast 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-datasource-okhttp 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-exoplayer-ima 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-exoplayer-smoothstreaming 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-exoplayer-hls 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-exoplayer-dash 1.10.1 → 1.11.0 age confidence
androidx.media3:media3-exoplayer 1.10.1 → 1.11.0 age confidence

Release Notes

androidx/media (androidx.media3:media3-ui)

v1.11.0

Compare Source

This release includes the following changes since the
1.10.1 release:

  • Common library:
    • Add Format.channelMask to explicitly represent the audio channel mask,
      and a new Util.getAudioTrackChannelConfig(Format) overload to safely
      resolve it.
    • Upgrade Kotlin from 2.0.20 to 2.2.0.
  • ExoPlayer:
    • Fix a timing-dependent concurrency bug that could cause an
      IllegalStateException or IndexOutOfBoundsException in ExoPlayer.
    • Relax ad group count checks in AdsMediaSource to allow the ad group
      count to decrease when an ad group is fully processed
      (hasUnplayedAds() is false), accommodating dynamic ad group resizing
      during reset workflows.
    • Add getFlags() and FLAG_STRICT_DURATION to SampleStream to allow
      streams to report flags, and update renderers to check these flags
      dynamically.
    • Fall back to the frame rate estimator in MediaCodecVideoRenderer and
      to the codec output format in MediaCodecAudioRenderer to calculate the
      codec operating rate when the stream formats do not provide a valid
      value, and avoid unnecessary codec resets.
    • Remove clipping of content for client-side inserted ads in the core
      player. Instead, AdsMediaSource takes care of the clipping logic.
      Custom client-side inserted ads sources need to be updated to implement
      the content clipping internally.
    • Mark tracks with a well-formed but unrecognized codec profile or level
      as supported=NO_EXCEEDS_CAPABILITIES instead of supported=YES (which
      is how tracks with missing or malformed profile or level info are
      marked). This ensures these tracks (which are unlikely to be supported
      by the device) are not selected when there are better-supported
      alternatives.
    • Add DefaultPreloadManager.SimpleRankingDataComparator, which is a
      RankingDataComparator that compares the ranks of the media items based
      on their distances to the index of the current playing media item. Apps
      can override its compare(Integer, Integer) method if a more fine-tuned
      comparison logic is needed. The custom SimpleRankingDataComparator can
      be injected via a new constructor of DefaultPreloadManager.Builder.
    • Reduce the OOM risk of
      DefaultLoadControl.prioritizeTimeOverSizeThresholds by falling back to
      buffer byte size limits if available heap memory seems tight.
    • Align handling of still images when MediaItem.imageDurationUs is not
      set: JPEG and HEIC still images now 'play' with a very short default
      duration (the same way PNG and other images previously behaved).
    • Add MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter) to plumb BandwidthMeter to MediaSource. The
      deprecated method with custom implementation will still be called by
      default though, it is recommended to implement the new method and use
      BandwidthMeter.getTransferListener() to get parity to the old method.
    • In DefaultBandwidthMeter, add support for a custom
      InitialBitrateSupplier. This allows apps to provide their own logic
      for determining the initial bitrate estimate, which will be used on
      creation of DefaultBandwidthMeter and on network type changes. The
      supplier can be set via
      DefaultBandwidthMeter.Builder.setInitialBitrateSupplier().
    • Enable dynamic scheduling by default. ExoPlayer playback work loop
      will run dynamically as opposed to on a static interval.
    • Remove an unnecessary reset that can occur when joining tracks with
      pre-roll samples to active playback.
    • In DefaultBandwidthMeter, optimize
      getInitialBitrateCountryGroupAssignment to return the country group
      assignments packed into a 32-bit integer instead of an array, reducing
      code size and avoiding allocations.
    • Fix AudioTrack initialization failures on some devices by ensuring the
      retry logic always attempts a minimum of 1 second buffer size if other
      retries (by halving the buffer size) are unsuccessful
      (#​3207).
    • Fix codec issue on some devices where the codec was swallowing all
      samples if previously flushed before receiving input buffers.
    • Add experimental ExoPlayer.Builder.enablePerStreamMediaProgression()
      to allow advancing media processing on a per-stream basis. This reduces
      startup latency between playlist items and avoids playback becoming
      "stuck" with very short content
      (#​3122).
    • Fix race condition related to audio session id usage where the initial
      audio session id auto-generated by ExoPlayer would be used instead of
      the value set by setAudioSessionId
      (#​3241).
    • Add experimental HAGC (ST 2094-50) timed metadata playback support for
      progressive media (e.g. MP4, Matroska). The player automatically merges
      HAGC metadata tracks with the associated video track and delivers the
      metadata out-of-band to the decoder on API 37+ devices. This behavior
      can be disabled via
      DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false).
    • Add Format.selectionPriority representing the relative preference of
      the Format in track selection
      (#​3236).
    • Fix potential scrubbing mode issue where scrubbing could stall when
      seeking to 'end of stream'.
  • CompositionPlayer:
    • Fix an issue where TrackSelector instances were not being released.
  • Transformer:
    • Fix an issue where ExportResult.fileSizeBytes may be over-reported.
  • Track selection:
    • Expose BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR and add
      AdaptiveTrackSelection.Factory.setTrackFormatComparator to allow
      custom format ordering and ABR selection priority beyond bitrate-only
      ordering.
    • Fix a timing-dependent concurrency issue where rapid sequential updates
      to track selection parameters could result in some updates being lost or
      overwritten.
  • Extractors:
    • MP4, MP3, and FLAC: Add FLAG_DISABLE_ARTWORK_METADATA to allow
      discarding attached pictures and cover art metadata during container
      parsing to reduce runtime memory consumption
      (#​2077). This can also
      be enabled centrally via
      DefaultExtractorsFactory.setDisableArtworkMetadata.
    • MP4: Add support for extracting ITU-T T.35 (it35) timed metadata
      tracks.
    • MP4: Add support for extracting chapter metadata (both Nero and
      QuickTime formats). QuickTime chapters are preferred if both are
      present. The extracted chapter information is exposed as Chapter
      entries within the track's Metadata, allowing for native chapter
      navigation in MP4, M4A, and M4B files (such as audiobooks and podcasts)
      (#​2803).
    • WAV, Matroska, and MP4: Add support for 64-bit floating point PCM audio
      (#​3090).
    • Matroska: Use codec bitstream metadata to populate accurate ColorInfo.
    • MP4: Add support for seeking in fragmented MP4 files using the mfra
      box when a sidx box is not present. To enable this, provide
      FLAG_READ_MFRA_FOR_SEEK_MAP to the FragmentedMp4Extractor, which is
      now done by default in DefaultExtractorsFactory
      (#​3088).
    • Ignore av1C data with unsupported version.
    • MP4: Add support for big-endian floating point PCM in fpcm boxes.
    • Matroska: Parse chapter info to Chapter entries in a track's
      Metadata.
    • MPEG-TS: Improve extraction of DTS-HD and DTS Express streams by
      combining the Core and Extension Substream into a single sample, fixing
      playback issues where the two were previously output as separate samples
      (#​3147).
    • MP4: Prevent infinite loops and out-of-bounds reads when parsing empty
      ilst metadata tag items
      (#​3191).
    • MPEG-TS: Ensure the last frame is rendered for streams where the last
      PES packet has a known length
      (#​3206).
    • MP3: Fix bitrate reporting for files with Xing and VBRI header.
    • Matroska: Handle tracks defined in the last cluster
      (#​3250).
    • Matroska: Add support for ALAC
      (#​3268).
    • MP4: Allow variable length sgpd boxes in fragmented MP4 files
      (#​3243).
    • AVI: Fix an issue where playing files without keyframe flags on audio
      tracks caused audio loss and OutOfMemoryError.
    • MP3: Use gapless-aware durations from Xing/Info headers
      (#​3183).
    • MP3: Adjust LAME/Xing encoder delay and padding metadata to match
      decoded PCM trimming
      (#​3200).
  • Audio:
    • Add a 100ms grace period in ExoPlayer's audio renderers when
      transitioning from ready to not-ready state, to debounce transient
      underruns and avoid unexpected buffering states during active playout
      (#​3210).
    • Change the default PCM buffer size logic in
      DefaultAudioTrackBufferSizeProvider to use a fixed 500ms buffer to
      make it less device dependent.
    • Update MediaCodecAudioRenderer to extract the spatial channelMask from
      the platform decoder, allowing DefaultAudioSink to use this explicit
      mask instead of inferring one from the channel count.
    • Convert parameters of AudioSink.configure to data class. Custom
      overrides of ForwardingAudioSink.configure need to be migrated to the
      new method signature.
    • Add support for maintaining pitch when time-stretching an audio stream
      with EditedMediaItem.Builder#setSpeed(SpeedParameters).
    • Enhance ToFloatPcmAudioProcessor to support converting 8-bit PCM,
      16-bit big-endian PCM, and 64-bit floating point PCM to 32-bit floating
      point PCM (#​3090).
    • Change return value of DecoderAudioRenderer.getChannelMapping to
      ImmutableIntArray.
    • Fix bug where playback gets stuck when playing a playlist of gapless
      audio in compressed offload mode.
    • Forward Timeline and period UID to AudioSink.configure and
      AudioProcessor.StreamMetadata to provide playlist context to the audio
      processors (#​418).
    • Set correct AudioProcessor.StreamMetadata.positionOffsetUs to allow
      time-based audio processing
      (#​418).
    • Add support for big endian 32-bit and 64-bit floating point PCM.
    • Remove fallback path of EAC3-JOC to EAC3 for playback on Google Pixel
      devices as their standard EAC3 decoders cannot decode EAC3-JOC streams
      (#​3257).
  • Video:
    • Fix video joining logic to count dropped buffers during joining as
      skipped instead of dropped.
    • Fix immediate rendering decision when setting new surface to avoid frame
      drops on devices that don't support placeholder surfaces.
    • Fix frame rate estimation in MediaCodecVideoRenderer to be more
      accurate by accounting for dropped or skipped frames.
    • Allow configuration of the threshold used to schedule frames early. The
      default is 50ms but one can customize the value through
      MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold().
    • Fix bug in VideoFrameReleaseHelper where display changes could trigger
      redundant Choreographer callbacks and excessive CPU wakeups on the
      main thread.
  • Text:
    • TTML: Fallback to displayAlign from style for regions
      (#​2559).
    • TTML: Inherit cue start time from parent of <p> elements
      (#​3246).
  • Metadata:
    • Add MediaMetadata.discSubtitle field and parse it from ID3v2.4 TSST
      and Vorbis DISCSUBTITLE data.
    • Parse disc number & count from ID3 TPOS frame.
  • Effect:
    • Clear redraw state in FinalShaderProgramWrapper when flushing to
      prevent the player from freezing when seeking.
  • Muxers:
    • Add support for track references (the tref box) in Mp4Muxer via a
      new addTrackReference API. This allows establishing relationships
      between tracks, such as linking a metadata track to the video track it
      describes.
    • Add OggMuxer to allow muxing of OPUS or VORBIS media streams into
      the ogg file format.
    • Add WavMuxer for WAV file generation (supports integer and
      floating-point PCM).
    • Add setAttemptStreamableOutputEnabled to InAppMp4Muxer.Factory to
      allow writing smaller non-streamable files without reserved space.
    • Add support for IAMF audio in Mp4Muxer and FragmentedMp4Muxer.
  • IMA extension:
    • Add
      ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot
      to allow providing an ad slot to use for pause ads.
    • Fix bug where back-to-back skippable VAST ads show the skip button
      immediately on the second ad
      (#​3165).
  • Session:
    • Fix potential deadlocks and IllegalStateException crashes inside
      MediaNotificationManager when using a session with a background thread
      player looper.
    • Enforce stricter threading requirements for MediaSession methods. Void
      methods now automatically post execution to the application looper
      thread, and state accessors (getters) explicitly throw an
      IllegalStateException if called from a thread other than the
      application looper.
    • Fix an out-of-bounds timeline merge crash (IllegalStateException in
      MediaUtils.mergePlayerInfo) by tracking state consistency
      per-controller on the session side.
    • Add androidx.media3.session.MediaSessionManager to provide support for
      querying active media sessions and returning Media3 SessionToken
      instances.
    • Change default behavior of MediaSession.Callback.onConnect if the
      method is not overridden to only provide read access to untrusted
      controllers.
    • Add support to override package name while creating MediaSession via a
      new API MediaSession.Builder#setPackageNameOverride. The caller must
      have android.permission.OVERRIDE_MEDIA_SESSION_OWNER permission to
      override the package name of the session.
    • Add MediaSession.Callback.onConnectAsync(). The new method allows to
      asynchronously process the connection attempt of a controller. Apps can
      return an immediate Future with
      Futures.immediateFuture(ConnectionResult) to achieve the previous
      behaviour. It's recommended to migrate to the new method because
      Callback.onConnect is a candidate to be deprecated.
    • Fix issue where Bluetooth AVRCP browsing didn't recognise
      MediaLibraryService on API 36 and 37.
    • Fix double-downscaling of artwork in MediaSession when the image size
      is close to the platform limit, resolving blurriness in notifications
      (#​3134).
    • Fix ForegroundServiceStartNotAllowedException crash in
      MediaNotificationManager when an asynchronous artwork bitmap load
      callback attempts to start the foreground service while the app is in
      the background (#​3270).
    • Fix an issue where PositionInfo objects received by a
      MediaController were missing their original Timeline UIDs. The
      session now reliably translates and propagates these UIDs during state
      updates.
    • Fix crash by catching ForegroundServiceStartNotAllowedException in
      MediaSessionService.stopSelfSafely()
      (#​3310).
    • Fix unexpected onMediaItemTransition() callback on MediaController
      when seeking inside the same media item
      (#​3248).
  • UI:
    • Fix first frame rendering at the wrong size when ContentFrame is
      recomposed mid-playback
      (#​3238).
    • Add CurrentMediaItemState class and the corresponding
      rememberCurrentMediaItemState Composable to media3-ui-compose
      module. This state holder is used in demo-compose to display various
      metadata information about the currently playing MediaItem.
    • Add PlaylistState class and the corresponding rememberPlaylistState
      Composable to media3-ui-compose module. This state holder is used in
      demo-compose to display various metadata information about the
      MediaItems set on the Player.
    • Add fastforwarding/slow motion API to PlaybackSpeedState. Use this
      functionality in demo-compose to showcase fastforwarding with a long
      press.
    • Add MiniController composable to media3-ui-compose-material3 module.
      It provides a compact affordance to control the Player while
      displaying the title, artist, artwork, and progress of the current media
      item.
    • Add ErrorState class and the corresponding rememberErrorState
      Composable to media3-ui-compose module. Add ErrorText Composable to
      media3-ui-compose-material3 and make it a default overlay on the
      Player.
    • Publish PlayerDefaults object with composables for TopControls,
      CenterControls, BottomControls, and ErrorOverlay.
    • Add FocusRequester to Player Composable and its content slots.
    • Publish PlayerPool (common-ktx) and rememberPooledPlayer
      (ui-compose) to support preloading of MediaItems in sliding window
      UI environments. Showcase this functionality in demo-compose with a
      new ShortFormPlayerScreen.
    • Fix shutter suppression bug in PlayerView and Compose
      PresentationState that caused crashes on timelines that do not support
      period UID lookup
      (#​3264).
  • Downloads:
    • Resolve HLS variables in media playlist when fetched for download
      (#​3258).
  • Ktor extension:
    • Add a new media3-datasource-ktor extension module providing a
      KtorDataSource backed by the Ktor HTTP stack.
    • Fix KtorDataSource loading the entire HTTP response body into memory
      when opening a connection
      (#​3305).
  • HLS extension:
    • Add support for HLS Content Steering and Pathway Cloning
      (#​1689).
    • Add setWithAssetListReset to HlsInterstitialsAdsLoader to allow apps
      to reset fully processed asset list interstitials back to an unavailable
      state for on-demand re-resolution.
    • Parse SCORE attribute of EXT-X-STREAM-INF and
      EXT-X-I-FRAME-STREAM-INF, and populate it to
      Format.selectionPriority
      (#​3236).
    • Fix bug where scheduled HLS playlist refreshes continue even if the
      playlist is no longer primary or active
      (#​3254).
    • Fix calculation of content resume offset when resolving interstitial
      asset lists (#​3322).
    • Fix unexpected audio track timestamp discontinuity when resuming low
      latency live playback after a playlist request failure
      (#​3311).
    • Fix bug in HlsMediaPeriod.getStreamKeys() where the ID3 track in audio
      renditions is considered as subtitles
      (#​3333).
  • DASH extension:
    • Separate CEA closed captions into different TrackGroups based on
      language (#​3113).
    • Add support for parsing multiple Location elements from the manifest
      (MPD) and performing location fallback in DashMediaSource when
      manifest loads fail.
    • Fix crash (IndexOutOfBoundsException) when opening manifests with an
      empty <SegmentTimeline/> element
      (#​3326).
  • RTSP extension:
    • Fix transient playback stalls or failures during RTSP playback
      preparation caused by UDP port binding errors.
  • Cast extension:
    • Add new CastParams class to allow configuration of Cast by calling
      Cast.initialize(CastParams).
    • Add new CastParams.getShowSystemOutputSwitcherOnCastIconClick()
      option, which triggers the use of the SystemUI Output Switcher instead
      of the in-app Cast device picker when available.
    • Add MediaRouteButtonState and rememberMediaRouteButtonState to
      support observing the visibility state of the media route picker, and
      add state parameter to MediaRouteButton
      (#​3172).
    • Fix bug where RemoteCastPlayer could get permanently stuck in a
      track-masking state after a track selection, causing it to ignore
      subsequent track updates from the Cast receiver
      (#​3237).
    • Fix bug where DefaultMediaItemConverter throws a
      NullPointerException when trying to join a cast session started from a
      non-Media3 sender.
    • Prevent CastPlayer from transferring MediaItems that are not
      playable when changing the active player
      (#​3199).
    • Fix bug where unconfigured live streams (liveConfiguration == UNSET)
      were queued as STREAM_TYPE_BUFFERED
      (#​3318).
  • Test utilities:
    • Expand DataSourceContractTest to include support for POST requests
      with headers & bodies, add some POST resources to
      HttpDataSourceTestEnv, and add assertions for the expected HTTP
      method, headers & body in WebServerDispatcher.
    • Tighten assertions in DataSourceContractTest for lengths returned from
      DataSource.open(). Resources that may result in C.LENGTH_UNSET
      should indicate this by using
      TestResource.Builder.setMayResolveToUnknownLength(boolean).
    • Add setPlaybackLooper to TestExoPlayerBuilder.
  • Remove deprecated symbols:
    • Remove androidx.media3.exoplayer.MetadataRetriever. Use
      androidx.media3.inspector.MetadataRetriever instead.
    • Remove androidx.media3.exoplayer.MediaExtractorCompat. Use
      androidx.media3.inspector.MediaExtractorCompat instead.
    • Remove Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. Use
      HeifExtractor to extract motion photo metadata from HEIC files
      instead.
    • Remove androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. Use
      androidx.media3.extractor.metadata.MotionPhotoMetadata instead.
    • Remove androidx.media3.extractor.DummyTrackOutput. Use
      androidx.media3.extractor.DiscardingTrackOutput instead.
    • Remove androidx.media3.extractor.DummyExtractorOutput. Use
      androidx.media3.extractor.NoOpExtractorOutput instead.
    • Remove androidx.media3.common.C.generateAudioSessionIdV21. Use
      androidx.media3.common.util.Util.generateAudioSessionId instead.
  • Build
    • Updated the README.md instructions for depending on Media3 locally to
      use Gradle Composite Builds (includeBuild). The core_settings.gradle
      script has been removed, and the androidxMediaModulePrefix and
      androidxMediaEnableMidiModule properties are no longer used.

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [androidx.media3:media3-ui](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-cast](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-cast/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-cast/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-datasource-okhttp](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-datasource-okhttp/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-exoplayer-ima](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-ima/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-ima/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-exoplayer-smoothstreaming](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-smoothstreaming/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-smoothstreaming/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-exoplayer-hls](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-hls/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-hls/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-exoplayer-dash](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-dash/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-dash/1.10.1/1.11.0?slim=true) | | [androidx.media3:media3-exoplayer](https://redirect.github.com/androidx/media) | `1.10.1` → `1.11.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.11.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.10.1/1.11.0?slim=true) | --- ### Release Notes <details> <summary>androidx/media (androidx.media3:media3-ui)</summary> ### [`v1.11.0`](https://redirect.github.com/androidx/media/blob/HEAD/RELEASENOTES.md#1110-2026-08-05) [Compare Source](https://redirect.github.com/androidx/media/compare/1.10.1...1.11.0) This release includes the following changes since the [1.10.1 release](#&#8203;1101-2026-05-12): - Common library: - Add `Format.channelMask` to explicitly represent the audio channel mask, and a new `Util.getAudioTrackChannelConfig(Format)` overload to safely resolve it. - Upgrade Kotlin from 2.0.20 to 2.2.0. - ExoPlayer: - Fix a timing-dependent concurrency bug that could cause an `IllegalStateException` or `IndexOutOfBoundsException` in ExoPlayer. - Relax ad group count checks in `AdsMediaSource` to allow the ad group count to decrease when an ad group is fully processed (`hasUnplayedAds()` is `false`), accommodating dynamic ad group resizing during reset workflows. - Add `getFlags()` and `FLAG_STRICT_DURATION` to `SampleStream` to allow streams to report flags, and update renderers to check these flags dynamically. - Fall back to the frame rate estimator in `MediaCodecVideoRenderer` and to the codec output format in `MediaCodecAudioRenderer` to calculate the codec operating rate when the stream formats do not provide a valid value, and avoid unnecessary codec resets. - Remove clipping of content for client-side inserted ads in the core player. Instead, `AdsMediaSource` takes care of the clipping logic. Custom client-side inserted ads sources need to be updated to implement the content clipping internally. - Mark tracks with a well-formed but unrecognized codec profile or level as `supported=NO_EXCEEDS_CAPABILITIES` instead of `supported=YES` (which is how tracks with missing or malformed profile or level info are marked). This ensures these tracks (which are unlikely to be supported by the device) are not selected when there are better-supported alternatives. - Add `DefaultPreloadManager.SimpleRankingDataComparator`, which is a `RankingDataComparator` that compares the ranks of the media items based on their distances to the index of the current playing media item. Apps can override its `compare(Integer, Integer)` method if a more fine-tuned comparison logic is needed. The custom `SimpleRankingDataComparator` can be injected via a new constructor of `DefaultPreloadManager.Builder`. - Reduce the OOM risk of `DefaultLoadControl.prioritizeTimeOverSizeThresholds` by falling back to buffer byte size limits if available heap memory seems tight. - Align handling of still images when `MediaItem.imageDurationUs` is not set: JPEG and HEIC still images now 'play' with a very short default duration (the same way PNG and other images previously behaved). - Add `MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)` to plumb `BandwidthMeter` to `MediaSource`. The deprecated method with custom implementation will still be called by default though, it is recommended to implement the new method and use `BandwidthMeter.getTransferListener()` to get parity to the old method. - In `DefaultBandwidthMeter`, add support for a custom `InitialBitrateSupplier`. This allows apps to provide their own logic for determining the initial bitrate estimate, which will be used on creation of `DefaultBandwidthMeter` and on network type changes. The supplier can be set via `DefaultBandwidthMeter.Builder.setInitialBitrateSupplier()`. - Enable dynamic scheduling by default. `ExoPlayer` playback work loop will run dynamically as opposed to on a static interval. - Remove an unnecessary reset that can occur when joining tracks with pre-roll samples to active playback. - In `DefaultBandwidthMeter`, optimize `getInitialBitrateCountryGroupAssignment` to return the country group assignments packed into a 32-bit integer instead of an array, reducing code size and avoiding allocations. - Fix `AudioTrack` initialization failures on some devices by ensuring the retry logic always attempts a minimum of 1 second buffer size if other retries (by halving the buffer size) are unsuccessful ([#&#8203;3207](https://redirect.github.com/androidx/media/issues/3207)). - Fix codec issue on some devices where the codec was swallowing all samples if previously flushed before receiving input buffers. - Add experimental `ExoPlayer.Builder.enablePerStreamMediaProgression()` to allow advancing media processing on a per-stream basis. This reduces startup latency between playlist items and avoids playback becoming "stuck" with very short content ([#&#8203;3122](https://redirect.github.com/androidx/media/issues/3122)). - Fix race condition related to audio session id usage where the initial audio session id auto-generated by `ExoPlayer` would be used instead of the value set by `setAudioSessionId` ([#&#8203;3241](https://redirect.github.com/androidx/media/issues/3241)). - Add experimental HAGC (ST 2094-50) timed metadata playback support for progressive media (e.g. MP4, Matroska). The player automatically merges HAGC metadata tracks with the associated video track and delivers the metadata out-of-band to the decoder on API 37+ devices. This behavior can be disabled via `DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)`. - Add `Format.selectionPriority` representing the relative preference of the `Format` in track selection ([#&#8203;3236](https://redirect.github.com/androidx/media/pull/3236)). - Fix potential scrubbing mode issue where scrubbing could stall when seeking to 'end of stream'. - CompositionPlayer: - Fix an issue where `TrackSelector` instances were not being released. - Transformer: - Fix an issue where `ExportResult.fileSizeBytes` may be over-reported. - Track selection: - Expose `BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR` and add `AdaptiveTrackSelection.Factory.setTrackFormatComparator` to allow custom format ordering and ABR selection priority beyond bitrate-only ordering. - Fix a timing-dependent concurrency issue where rapid sequential updates to track selection parameters could result in some updates being lost or overwritten. - Extractors: - MP4, MP3, and FLAC: Add `FLAG_DISABLE_ARTWORK_METADATA` to allow discarding attached pictures and cover art metadata during container parsing to reduce runtime memory consumption ([#&#8203;2077](https://redirect.github.com/androidx/media/issues/2077)). This can also be enabled centrally via `DefaultExtractorsFactory.setDisableArtworkMetadata`. - MP4: Add support for extracting ITU-T T.35 (`it35`) timed metadata tracks. - MP4: Add support for extracting chapter metadata (both Nero and QuickTime formats). QuickTime chapters are preferred if both are present. The extracted chapter information is exposed as `Chapter` entries within the track's `Metadata`, allowing for native chapter navigation in MP4, M4A, and M4B files (such as audiobooks and podcasts) ([#&#8203;2803](https://redirect.github.com/androidx/media/issues/2803)). - WAV, Matroska, and MP4: Add support for 64-bit floating point PCM audio ([#&#8203;3090](https://redirect.github.com/androidx/media/pull/3090)). - Matroska: Use codec bitstream metadata to populate accurate `ColorInfo`. - MP4: Add support for seeking in fragmented MP4 files using the `mfra` box when a `sidx` box is not present. To enable this, provide `FLAG_READ_MFRA_FOR_SEEK_MAP` to the `FragmentedMp4Extractor`, which is now done by default in `DefaultExtractorsFactory` ([#&#8203;3088](https://redirect.github.com/androidx/media/issues/3088)). - Ignore `av1C` data with unsupported version. - MP4: Add support for big-endian floating point PCM in `fpcm` boxes. - Matroska: Parse chapter info to `Chapter` entries in a track's `Metadata`. - MPEG-TS: Improve extraction of DTS-HD and DTS Express streams by combining the Core and Extension Substream into a single sample, fixing playback issues where the two were previously output as separate samples ([#&#8203;3147](https://redirect.github.com/androidx/media/pull/3147)). - MP4: Prevent infinite loops and out-of-bounds reads when parsing empty `ilst` metadata tag items ([#&#8203;3191](https://redirect.github.com/androidx/media/pull/3191)). - MPEG-TS: Ensure the last frame is rendered for streams where the last PES packet has a known length ([#&#8203;3206](https://redirect.github.com/androidx/media/pull/3206)). - MP3: Fix bitrate reporting for files with Xing and VBRI header. - Matroska: Handle tracks defined in the last cluster ([#&#8203;3250](https://redirect.github.com/androidx/media/issues/3250)). - Matroska: Add support for ALAC ([#&#8203;3268](https://redirect.github.com/androidx/media/pull/3268)). - MP4: Allow variable length `sgpd` boxes in fragmented MP4 files ([#&#8203;3243](https://redirect.github.com/androidx/media/pull/3243)). - AVI: Fix an issue where playing files without keyframe flags on audio tracks caused audio loss and `OutOfMemoryError`. - MP3: Use gapless-aware durations from Xing/Info headers ([#&#8203;3183](https://redirect.github.com/androidx/media/issues/3183)). - MP3: Adjust LAME/Xing encoder delay and padding metadata to match decoded PCM trimming ([#&#8203;3200](https://redirect.github.com/androidx/media/pull/3200)). - Audio: - Add a 100ms grace period in ExoPlayer's audio renderers when transitioning from ready to not-ready state, to debounce transient underruns and avoid unexpected buffering states during active playout ([#&#8203;3210](https://redirect.github.com/androidx/media/issues/3210)). - Change the default PCM buffer size logic in `DefaultAudioTrackBufferSizeProvider` to use a fixed 500ms buffer to make it less device dependent. - Update `MediaCodecAudioRenderer` to extract the spatial channelMask from the platform decoder, allowing `DefaultAudioSink` to use this explicit mask instead of inferring one from the channel count. - Convert parameters of `AudioSink.configure` to data class. Custom overrides of `ForwardingAudioSink.configure` need to be migrated to the new method signature. - Add support for maintaining pitch when time-stretching an audio stream with `EditedMediaItem.Builder#setSpeed(SpeedParameters)`. - Enhance `ToFloatPcmAudioProcessor` to support converting 8-bit PCM, 16-bit big-endian PCM, and 64-bit floating point PCM to 32-bit floating point PCM ([#&#8203;3090](https://redirect.github.com/androidx/media/pull/3090)). - Change return value of `DecoderAudioRenderer.getChannelMapping` to `ImmutableIntArray`. - Fix bug where playback gets stuck when playing a playlist of gapless audio in compressed offload mode. - Forward `Timeline` and period UID to `AudioSink.configure` and `AudioProcessor.StreamMetadata` to provide playlist context to the audio processors ([#&#8203;418](https://redirect.github.com/androidx/media/issues/418)). - Set correct `AudioProcessor.StreamMetadata.positionOffsetUs` to allow time-based audio processing ([#&#8203;418](https://redirect.github.com/androidx/media/issues/418)). - Add support for big endian 32-bit and 64-bit floating point PCM. - Remove fallback path of EAC3-JOC to EAC3 for playback on Google Pixel devices as their standard EAC3 decoders cannot decode EAC3-JOC streams ([#&#8203;3257](https://redirect.github.com/androidx/media/pull/3257)). - Video: - Fix video joining logic to count dropped buffers during joining as skipped instead of dropped. - Fix immediate rendering decision when setting new surface to avoid frame drops on devices that don't support placeholder surfaces. - Fix frame rate estimation in `MediaCodecVideoRenderer` to be more accurate by accounting for dropped or skipped frames. - Allow configuration of the threshold used to schedule frames early. The default is 50ms but one can customize the value through `MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()`. - Fix bug in `VideoFrameReleaseHelper` where display changes could trigger redundant `Choreographer` callbacks and excessive CPU wakeups on the main thread. - Text: - TTML: Fallback to `displayAlign` from `style` for regions ([#&#8203;2559](https://redirect.github.com/androidx/media/issues/2559)). - TTML: Inherit cue start time from parent of `<p>` elements ([#&#8203;3246](https://redirect.github.com/androidx/media/issues/3246)). - Metadata: - Add `MediaMetadata.discSubtitle` field and parse it from ID3v2.4 `TSST` and Vorbis `DISCSUBTITLE` data. - Parse disc number & count from ID3 `TPOS` frame. - Effect: - Clear redraw state in `FinalShaderProgramWrapper` when flushing to prevent the player from freezing when seeking. - Muxers: - Add support for track references (the `tref` box) in `Mp4Muxer` via a new `addTrackReference` API. This allows establishing relationships between tracks, such as linking a metadata track to the video track it describes. - Add `OggMuxer` to allow muxing of `OPUS` or `VORBIS` media streams into the `ogg` file format. - Add `WavMuxer` for WAV file generation (supports integer and floating-point PCM). - Add `setAttemptStreamableOutputEnabled` to `InAppMp4Muxer.Factory` to allow writing smaller non-streamable files without reserved space. - Add support for IAMF audio in `Mp4Muxer` and `FragmentedMp4Muxer`. - IMA extension: - Add `ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot` to allow providing an ad slot to use for pause ads. - Fix bug where back-to-back skippable VAST ads show the skip button immediately on the second ad ([#&#8203;3165](https://redirect.github.com/androidx/media/issues/3165)). - Session: - Fix potential deadlocks and `IllegalStateException` crashes inside `MediaNotificationManager` when using a session with a background thread player looper. - Enforce stricter threading requirements for `MediaSession` methods. Void methods now automatically post execution to the application looper thread, and state accessors (getters) explicitly throw an `IllegalStateException` if called from a thread other than the application looper. - Fix an out-of-bounds timeline merge crash (`IllegalStateException` in `MediaUtils.mergePlayerInfo`) by tracking state consistency per-controller on the session side. - Add `androidx.media3.session.MediaSessionManager` to provide support for querying active media sessions and returning Media3 `SessionToken` instances. - Change default behavior of `MediaSession.Callback.onConnect` if the method is not overridden to only provide read access to untrusted controllers. - Add support to override package name while creating `MediaSession` via a new API `MediaSession.Builder#setPackageNameOverride`. The caller must have `android.permission.OVERRIDE_MEDIA_SESSION_OWNER` permission to override the package name of the session. - Add `MediaSession.Callback.onConnectAsync()`. The new method allows to asynchronously process the connection attempt of a controller. Apps can return an immediate `Future` with `Futures.immediateFuture(ConnectionResult)` to achieve the previous behaviour. It's recommended to migrate to the new method because `Callback.onConnect` is a candidate to be deprecated. - Fix issue where Bluetooth AVRCP browsing didn't recognise `MediaLibraryService` on API 36 and 37. - Fix double-downscaling of artwork in `MediaSession` when the image size is close to the platform limit, resolving blurriness in notifications ([#&#8203;3134](https://redirect.github.com/androidx/media/issues/3134)). - Fix `ForegroundServiceStartNotAllowedException` crash in `MediaNotificationManager` when an asynchronous artwork bitmap load callback attempts to start the foreground service while the app is in the background ([#&#8203;3270](https://redirect.github.com/androidx/media/issues/3270)). - Fix an issue where `PositionInfo` objects received by a `MediaController` were missing their original `Timeline` UIDs. The session now reliably translates and propagates these UIDs during state updates. - Fix crash by catching `ForegroundServiceStartNotAllowedException` in `MediaSessionService.stopSelfSafely()` ([#&#8203;3310](https://redirect.github.com/androidx/media/issues/3310)). - Fix unexpected `onMediaItemTransition()` callback on `MediaController` when seeking inside the same media item ([#&#8203;3248](https://redirect.github.com/androidx/media/issues/3248)). - UI: - Fix first frame rendering at the wrong size when `ContentFrame` is recomposed mid-playback ([#&#8203;3238](https://redirect.github.com/androidx/media/issues/3238)). - Add `CurrentMediaItemState` class and the corresponding `rememberCurrentMediaItemState` Composable to `media3-ui-compose` module. This state holder is used in `demo-compose` to display various metadata information about the currently playing `MediaItem`. - Add `PlaylistState` class and the corresponding `rememberPlaylistState` Composable to `media3-ui-compose` module. This state holder is used in `demo-compose` to display various metadata information about the `MediaItems` set on the Player. - Add fastforwarding/slow motion API to `PlaybackSpeedState`. Use this functionality in `demo-compose` to showcase fastforwarding with a long press. - Add `MiniController` composable to `media3-ui-compose-material3` module. It provides a compact affordance to control the `Player` while displaying the title, artist, artwork, and progress of the current media item. - Add `ErrorState` class and the corresponding `rememberErrorState` Composable to `media3-ui-compose` module. Add `ErrorText` Composable to `media3-ui-compose-material3` and make it a default overlay on the `Player`. - Publish `PlayerDefaults` object with composables for `TopControls`, `CenterControls`, `BottomControls`, and `ErrorOverlay`. - Add `FocusRequester` to `Player` Composable and its content slots. - Publish `PlayerPool` (`common-ktx`) and `rememberPooledPlayer` (`ui-compose`) to support preloading of `MediaItems` in sliding window UI environments. Showcase this functionality in `demo-compose` with a new `ShortFormPlayerScreen`. - Fix shutter suppression bug in `PlayerView` and Compose `PresentationState` that caused crashes on timelines that do not support period UID lookup ([#&#8203;3264](https://redirect.github.com/androidx/media/issues/3264)). - Downloads: - Resolve HLS variables in media playlist when fetched for download ([#&#8203;3258](https://redirect.github.com/androidx/media/issues/3258)). - Ktor extension: - Add a new `media3-datasource-ktor` extension module providing a `KtorDataSource` backed by the [Ktor](https://ktor.io/) HTTP stack. - Fix `KtorDataSource` loading the entire HTTP response body into memory when opening a connection ([#&#8203;3305](https://redirect.github.com/androidx/media/issues/3305)). - HLS extension: - Add support for HLS Content Steering and Pathway Cloning ([#&#8203;1689](https://redirect.github.com/androidx/media/issues/1689)). - Add `setWithAssetListReset` to `HlsInterstitialsAdsLoader` to allow apps to reset fully processed asset list interstitials back to an unavailable state for on-demand re-resolution. - Parse `SCORE` attribute of `EXT-X-STREAM-INF` and `EXT-X-I-FRAME-STREAM-INF`, and populate it to `Format.selectionPriority` ([#&#8203;3236](https://redirect.github.com/androidx/media/pull/3236)). - Fix bug where scheduled HLS playlist refreshes continue even if the playlist is no longer primary or active ([#&#8203;3254](https://redirect.github.com/androidx/media/issues/3254)). - Fix calculation of content resume offset when resolving interstitial asset lists ([#&#8203;3322](https://redirect.github.com/androidx/media/issues/3322)). - Fix unexpected audio track timestamp discontinuity when resuming low latency live playback after a playlist request failure ([#&#8203;3311](https://redirect.github.com/androidx/media/issues/3311)). - Fix bug in `HlsMediaPeriod.getStreamKeys()` where the ID3 track in audio renditions is considered as subtitles ([#&#8203;3333](https://redirect.github.com/androidx/media/issues/3333)). - DASH extension: - Separate CEA closed captions into different `TrackGroup`s based on language ([#&#8203;3113](https://redirect.github.com/androidx/media/issues/3113)). - Add support for parsing multiple `Location` elements from the manifest (MPD) and performing location fallback in `DashMediaSource` when manifest loads fail. - Fix crash (`IndexOutOfBoundsException`) when opening manifests with an empty `<SegmentTimeline/>` element ([#&#8203;3326](https://redirect.github.com/androidx/media/issues/3326)). - RTSP extension: - Fix transient playback stalls or failures during RTSP playback preparation caused by UDP port binding errors. - Cast extension: - Add new `CastParams` class to allow configuration of Cast by calling `Cast.initialize(CastParams)`. - Add new `CastParams.getShowSystemOutputSwitcherOnCastIconClick()` option, which triggers the use of the SystemUI Output Switcher instead of the in-app Cast device picker when available. - Add `MediaRouteButtonState` and `rememberMediaRouteButtonState` to support observing the visibility state of the media route picker, and add `state` parameter to `MediaRouteButton` ([#&#8203;3172](https://redirect.github.com/androidx/media/issues/3172)). - Fix bug where `RemoteCastPlayer` could get permanently stuck in a track-masking state after a track selection, causing it to ignore subsequent track updates from the Cast receiver ([#&#8203;3237](https://redirect.github.com/androidx/media/issues/3237)). - Fix bug where `DefaultMediaItemConverter` throws a `NullPointerException` when trying to join a cast session started from a non-Media3 sender. - Prevent `CastPlayer` from transferring `MediaItems` that are not playable when changing the active player ([#&#8203;3199](https://redirect.github.com/androidx/media/issues/3199)). - Fix bug where unconfigured live streams (`liveConfiguration == UNSET`) were queued as `STREAM_TYPE_BUFFERED` ([#&#8203;3318](https://redirect.github.com/androidx/media/issues/3318)). - Test utilities: - Expand `DataSourceContractTest` to include support for `POST` requests with headers & bodies, add some `POST` resources to `HttpDataSourceTestEnv`, and add assertions for the expected HTTP method, headers & body in `WebServerDispatcher`. - Tighten assertions in `DataSourceContractTest` for lengths returned from `DataSource.open()`. Resources that may result in `C.LENGTH_UNSET` should indicate this by using `TestResource.Builder.setMayResolveToUnknownLength(boolean)`. - Add `setPlaybackLooper` to `TestExoPlayerBuilder`. - Remove deprecated symbols: - Remove `androidx.media3.exoplayer.MetadataRetriever`. Use `androidx.media3.inspector.MetadataRetriever` instead. - Remove `androidx.media3.exoplayer.MediaExtractorCompat`. Use `androidx.media3.inspector.MediaExtractorCompat` instead. - Remove `Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA`. Use `HeifExtractor` to extract motion photo metadata from HEIC files instead. - Remove `androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata`. Use `androidx.media3.extractor.metadata.MotionPhotoMetadata` instead. - Remove `androidx.media3.extractor.DummyTrackOutput`. Use `androidx.media3.extractor.DiscardingTrackOutput` instead. - Remove `androidx.media3.extractor.DummyExtractorOutput`. Use `androidx.media3.extractor.NoOpExtractorOutput` instead. - Remove `androidx.media3.common.C.generateAudioSessionIdV21`. Use `androidx.media3.common.util.Util.generateAudioSessionId` instead. - Build - Updated the `README.md` instructions for depending on Media3 locally to use Gradle Composite Builds (`includeBuild`). The `core_settings.gradle` script has been removed, and the `androidxMediaModulePrefix` and `androidxMediaEnableMidiModule` properties are no longer used. </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIwMi4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->
Sign in to join this conversation.
No description provided.