Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Aug 14, 2025

This PR contains the following updates:

Package Change Age Confidence
androidx.media3:media3-ui 1.7.11.9.0 age confidence
androidx.media3:media3-datasource-okhttp 1.7.11.9.0 age confidence
androidx.media3:media3-exoplayer-rtsp 1.7.11.9.0 age confidence
androidx.media3:media3-exoplayer-hls 1.7.11.9.0 age confidence
androidx.media3:media3-exoplayer-dash 1.7.11.9.0 age confidence
androidx.media3:media3-exoplayer 1.7.11.9.0 age confidence

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

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

v1.9.0

Compare Source

  • Common Library:
    • Update minSdk to 23 in line with other AndroidX libraries.
    • Add PlayerTransferState, which facilitates transferring the playback
      state across Player instances.
    • Add void mute() and void unmute() methods to Player that preserve
      and consequently restore Player's volume before and after setting it to
      zero.
    • Publish utility classes WakeLockManager, WifiLockManager,
      AudioFocusManager, AudioBecomingNoisyManager and
      StuckPlayerDetector previously used by ExoPlayer internally to allow
      reuse for other players
      (#​1893).
    • Fix ForwardingPlayer listener handling when the underlying delegate
      player uses reference equality for comparing listener instances
      (#​2675).
    • Add a Player.listenTo suspending extension function in the
      media3-common-ktx library that specifies the particular
      Player.Events that should be acted upon.
    • Fix a crash in BasePlayer.getBufferedPercentage resulting from integer
      overflow when the reported buffered position is implausibly much larger
      than the reported duration
      (#​2750).
    • Fix auto-detection of TrackGroup track type by not ignoring custom
      sample MIME type and falling back to using the potentially wrong track
      type from the container MIME type
      (#​2860).
  • ExoPlayer:
    • Add a stuck player detection that triggers a StuckPlayerException
      player error if the player seems stuck. This happens in the following
      cases, where each default timeout can be configured in
      ExoPlayer.Builder if required:
      • After 10 minutes of STATE_BUFFERING while trying to play and no
        buffering progress.
      • After 10 seconds of STATE_READY while trying to play and no
        playback progress.
      • After 1 minute of STATE_READY beyond the declared duration without
        reaching the end of the item.
      • After 10 minutes with a playback suppression reason while trying to
        play.
    • Enable wake lock handling by default to fix issues with buffering during
      background playback. This is equivalent to setting
      ExoPlayer.Builder.setWakeMode to C.WAKE_MODE_LOCAL.
    • Add listening logic to automatically update the virtual device ID when a
      change is reported to the Context originally passed to
      ExoPlayer.Builder.
    • Add ExoPlayer.setVirtualDeviceId to manually update the virtual device
      ID obtained from the Context passed to ExoPlayer.Builder.
    • Ensure renderers don't consume data from the next playlist item more
      than 10 seconds before the end of the current item.
    • Add setSeekBackIncrementMs, setSeekForwardIncrementMs and
      setMaxSeekToPreviousPositionMs to ExoPlayer to update these settings
      after construction
      (#​2736).
    • Add pre-caching functionality in DefaultPreloadManager. Apps now can
      return
      DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) or
      DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)
      via TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)
      to indicate that a media item needs to be pre-cached.
    • Use pre-caching functionality of DefaultPreloadManager in shortform
      demo app.
    • Add DefaultLoadControl.Builder setters for local playback and adjust
      default values of DefaultLoadControl to work well with a wide range of
      local files.
    • Fix bug where setting an empty playlist can leave the player in
      STATE_READY or STATE_BUFFERING.
    • Enhance the preload manager APIs:
      • Add addMediaItems(List<MediaItem>, List<T>) and
        addMediaSources(List<MediaSource>, List<T>) that add the media
        items or media sources in batch, and automatically call
        invalidate() afterwards.
      • Add removeMediaItems((List<MediaItem>) and
        removeMediaSources(List<MediaSource>) that remove the media items
        or media sources in batch, and make sure that preload manager does
        not start to preload or continue preloading any of them after
        removal.
      • Allow DefaultPreloadManager.setCurrentPlayingIndex(int) to
        invalidate itself automatically. Apps don't need to call
        invalidate() explicitly anymore after updating the current playing
        index.
    • Add capability to skip keyframe reset for forward seeks within the same
      group of pictures while in scrubbing mode.
    • Add DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)
      for apps to set a value of target buffer bytes for a player with the
      specified playerName. The DefaultLoadControl can now make decisions
      of each player separately based on its own allocated bytes and target
      buffer bytes.
    • Add SkipInfo to the AdPlaybackState.AdGroup to carry skip
      information for each ad in the ad group.
    • Fix bug where calling removeMediaItems(List) during playing a
      post-roll created a crash
      (#​2746).
    • Fix some stuttering in playlist playback where frames were mistakenly
      always set as the last sample and rendered.
    • Enable retry path if player fails to generate audio session ID
      (#​2382,
      #​2678).
    • Add support to control the total buffer bytes for the sources in
      DefaultPreloadManager to avoid total buffer bytes for preloading from
      growing arbitrarily. To use the default control logic, Apps can set the
      target buffer bytes for preloading via
      DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) for
      a playerName of PlayerId.Preload.name ("preload"), and inject the
      created DefaultLoadControl via
      DefaultPreloadManager.Builder.setLoadControl(LoadControl).
    • Add cloneAndSet(int, int) to ShuffleOrder with a default
      implementation (#​2834).
    • Append content resume offset when skipping ad playback after seek
      adjustment or auto transition
      (#​2484).
    • Add API to set and observe codec parameters for audio and video tracks.
      This feature is implemented for MediaCodec based renderers and
      requires API 29+.
      • Use ExoPlayer.setAudioCodecParameters() and
        ExoPlayer.setVideoCodecParameters() to apply parameters.
      • Use ExoPlayer.addAudioCodecParametersChangeListener() and
        ExoPlayer.addVideoCodecParametersChangeListener() to listen for
        changes. Observing vendor-specific keys requires API 31+.
    • Fix IllegalStateException caused by setting an empty media source
      after seeking to a non-zero position and then preparing the player with
      a non-empty media source.
    • Fix bug where seeking into other media items while in scrubbing mode
      could cause IllegalStateException.
    • Fix potential NullPointerException in DefaultPlaybackSessionManager
      (#​2885).
    • Enable improvements in seeking performance for eligible videos.
    • Re-enable use of asynchronous decryption in MediaCodec on API 36+ where
      timeout issues with this platform API have been fixed
      (#​1641).
    • Change the default value of
      MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs
      to 15ms and enable more efficient dropping of video frames before
      decoding for eligible videos.
    • Add maximum memory limit to the automatic memory calculation in
      DefaultLoadControl. This should only take effect if an excessive
      number of tracks get selected
      (#​2860).
    • Fix bug where, if playing in a playlist or repeat mode, seeking in scrub
      mode near the end could cause a seek to the next media item.
  • CompositionPlayer:
    • Publish CompositionPlayer under a new @ExperimentalApi annotation to
      indicate it is available for experimentation, but is still under
      development. Some APIs are likely to change significantly in future
      releases, and there are known issues and limitations with some use-cases
      (some undocumented).
    • Add support for COMMAND_SET_AUDIO_ATTRIBUTES and audio focus handling
      in CompositionPlayer.
    • Add support for speed changing in secondary sequences in
      CompositionPlayer.
    • Add support for EditedMediaItem.removeVideo.
  • Transformer:
    • Use InAppMp4Muxer as default muxer.
    • Add EditedMediaItem.Builder#setSpeed() and deprecate
      Effects#createExperimentalSpeedChangingEffects().
    • Replace forceAudioTrack and forceVideoTrack with trackTypes in
      EditedMediaItemSequence.
  • Track Selection:
    • Add TrackSelectionParameters.selectTextByDefault to prefer the
      selection of any text track without specifying other more specific
      preferences.
    • Add preferredVideoLabels, preferredAudioLabels and
      preferredTextLabels in TrackSelectionParameters to specify a
      preference for tracks with a specific label, for example those read from
      HLS NAME tags (#​1666).
  • Extractors:
    • FLAC: Tighten header detection to reduce the chance of finding spurious
      headers in the encoded FLAC data, resulting in decoding errors
      (#​558).
    • MP3: Allow gaps between (and before) ID3 tags at the beginning of MP3
      files (#​811,
      #​5718).
    • MP3: Increase sniffing limit to 128kB to match the existing search limit
      for a sync byte
      (#​2713).
    • MP3: Change FLAG_ENABLE_INDEX_SEEKING to prefer seeking information
      from metadata headers (like Xing and VBRI) when available, falling back
      to index-based seeking if no other seeking information is present. This
      improves performance for files with seeking metadata
      (#​2839).
    • MP3: Change Mp3Extractor to default to a constant bitrate (CBR)
      assumption when no seeking metadata (e.g., Xing, VBRI) is found, even
      when FLAG_ENABLE_INDEX_SEEKING is set. This is based on the MP3
      specification's history, where CBR was standard and VBR requires
      explicit headers. This improves immediate seekability for files without
      metadata at the cost of potential accuracy for VBR files lacking
      headers. Index seeking is now used as a fallback if the CBR assumption
      is not seekable (e.g., for streams of unknown length)
      (#​2848).
    • MP4: Disambiguate between audio/mpeg (MP3), audio/mpeg-L1 and
      audio/mpeg-L2 MIME types by peeking the layer value of the first
      sample before emitting a track format from the extractor
      (#​2683).
    • MP4: Improve sniffing efficiency of very large files by assuming a
      stbl box larger than 1MB implies the file must be non-fragmented
      (#​2650).
    • MP4: Add support for ©mvn (movement name) and ©mvi (movement index)
      metadata, these are now emitted as TextInformationFrame objects in
      Format.metadata with IDs of MVNM and MVIN respectively
      (#​2754).
    • MP4: Ignore tracks with missing stsd box (instead of failing to parse
      the whole file).
    • Matroska: Add support for DTS-HD detection
      (#​6225).
    • Fix an issue in MatroskaExtractor where seeking could be inaccurate
      for files with multiple tracks. Cue points are now correctly associated
      with their respective tracks, leading to more precise seeking.
    • MPEG-TS: Fix IllegalArgumentException from ReorderingBufferQueue
      caused by PES packets with no timestamp
      (#​2764).
    • Add support for extracting HEIC Motion Photos. The HeifExtractor can
      now parse HEIC files containing embedded video and audio tracks.
  • Inspector:
    • Introduced a new :media3-inspector module to serve as the dedicated
      home for media inspection utilities. This module now houses a new
      androidx.media3.inspector.MetadataRetriever, which will provide a
      unified API for both metadata and frame extraction. The existing
      androidx.media3.exoplayer.MetadataRetriever is now deprecated in favor
      of this new version.
    • Introduced androidx.media3.inspector.FrameExtractor, a new public API
      for frame extraction. This AutoCloseable class provides a way to
      extract frames with support for HDR video, video effects, and custom
      decoder selection. It should be created via its Builder for a specific
      MediaItem.
    • FrameExtractor: Add getThumbnail() to extract a representative
      thumbnail frame from a media file without requiring a specific
      timestamp.
    • Add androidx.media3.inspector.MediaExtractorCompat, a drop-in
      replacement for the platform's android.media.MediaExtractor that
      provides a way to extract raw, encoded media samples from a media file.
      The existing androidx.media3.exoplayer.MediaExtractorCompat is now
      deprecated in favor of this new class.
  • Audio:
    • Make AudioProcessor instances aware of seeking.
    • Allow injecting the new AudioOutputProvider interface into
      DefaultAudioSink.Builder to support custom audio output paths. The
      default is AudioTrackAudioOutputProvider.
    • Handle seeks in GainProcessor.
    • Utilize AC-4 decoder profile and level capabilities in track format
      support assessment
      (#​2580).
    • Avoid potential delays caused by handling routing change callbacks at
      the beginning of playback
      (#​2646).
    • Allow codec reuse for EAC3, EAC3-JOC and AC-4 formats
      (#​1346).
    • Add support for float PCM samples in Sonic.
    • Add support for 16 bit PCM samples in ToFloatPcmAudioProcessor.
  • Video:
    • Disable codec reuse for Dolby-Vision content with different profiles.
    • Re-enable workaround for wrongly reported performance points for secure
      codecs (#​2856).
  • Text:
    • Fix parsing of CEA-6/708 subtitles in Dolby Vision content
      (#​2775).
  • Image:
    • Fix ScrubbingMode issue where player gets stuck while scrubbing a DASH
      thumbnail track
      (#​2815).
  • DRM:
    • Change the return type of MediaDrmCallback methods from byte[] to a
      new MediaDrmCallback.Response type, to allow returning extra optional
      information. This is a source breaking change, but breakages can be
      easily resolved by wrapping the previous byte[] return value with new Response before returning.
    • Add key request info like URL and latency to
      AnalyticsListener.onDrmKeysLoaded
      (#​1001).
    • Move provisioning request data from a URL parameter to the POST body.
  • Effect:
    • Add Presentation.copyWithUnsetSideRoundedTo to round the unset output
      side when Presentation is created with a single side length.
  • Muxers:
    • Add MediaMuxerCompat, a drop-in replacement for framework
      MediaMuxer.
    • Add MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo() to allow
      Motion Photo creation.
    • Add WebmMuxer to allow muxing of OPUS, VORBIS, VP8 and VP9
      media streams into a webm file format.
  • IMA extension:
    • Removal of custom proguard rules, so that apps can use those released in
      IMA android archive instead.
    • Add ImaServerSideAdInsertionUriBuilder.setNetworkCode, a new API for
      setting the Google Ad Manager network code for the IMA SDK to handle ads
      identifiers as specified in Google Ad Manager settings. Network codes
      are optional but recommended for Full service stream requests. To find
      the network code, see
      this article.
    • Bump IMA dependency to 3.37.0 which requires enabling core library
      desugaring. This must also be enabled by dependent apps too. See IMA's
      config notes.
    • Support IMA DAI custom UI options in SSAI URI builder. Custom UI options
      for server side ad insertion include “Skippable” and “About This Ad”
      rendering support. The feature is currently available for selected
      publishers behind an allow list. This change also upgrades the IMA SDK
      version to 3.38.0
      (release notes)
      to access the custom UI options API.
    • Fix issue where content preparation error for content after an ad would
      be wrongly reported as an ad playback error
      (#​2656).
  • Session:
    • Add new parameter to MediaSession.Callback.onPlaybackResumption to
      indicate if the call happens to gather information only or to start
      playback (#​1764).
    • Update MediaSession.ControllerInfo.isTrusted to also declare
      controllers from the own app as trusted
      (#​2542).
    • Add MediaSessionService.triggerNotificationUpdate to manually trigger
      a notification update
      (#​1833).
    • Add ProgressListener to custom command methods.
    • Change the default value for
      MediaLibrarySession.Builder.setLibraryErrorReplicationMode to non
      fatal.
    • Add a Context parameter to
      MediaButtonReceiver.onForegroundServiceStartNotAllowedException
      (#​2625).
    • Read the volume control ID from the platform PlaybackInfo instead of
      fetching it via binder. This ensures that playback type and volume
      control ID are read atomically and do match to each other.
    • Fix bug where ACTION_UP key events were filtered out before passing
      them to the callback for custom handling. This brings parity with what
      media1 did and the platform does
      (#​2637).
    • Fix bug where getCurrentTimeline() was called by PlayerWrapper even
      when the command isn't available
      (#​2665).
    • Fix bug where a message was left in the message queue of the main looper
      which caused a memory leak after the service terminated
      (#​2692).
    • When connected to a legacy session app with a MediaBrowser, custom
      commands are sent to the session only if the custom action is advertised
      as a custom action in PlaybackStateCompat of the legacy session. All
      other custom actions are sent to the service.
    • Implemented onAudioSessionIdChanged to notify media controllers when
      an audio session ID is set by the session
      (#​244).
    • Fix bug where KEYCODE_HEADSETHOOK did not start the player upon and
      media key event Intent arriving in onStartCommand(). This is fixed
      by handling 'KEYCODE_HEADSETHOOK' just like KEYCODE_MEDIA_PLAY_PAUSE
      (#​2816).
    • Fix a bug where Surface size was not communicated between the session
      and the controller, resulting in the failure to apply video effects in
      demo-session. If you are using a controller, this might be a breaking
      change if your player cannot handle a setVideoSurfaceHolder call.
    • Fix propagation of non-String CharSequence metadata values like
      span-styled strings
      (#​2853).
    • Add CommandButton.executeAction so that controllers can more easily
      trigger the intended action. Also allow to specify parameters for some
      player and session commands to define which action to trigger.
    • Add backwards-compatibility for CommandButton instances using
      Player.Command or non-custom SessionCommand to define their action.
      These are now correctly represented in platform media sessions, for
      example for System UI or Android Auto.
    • Fix issue where the same Bitmap is compressed multiple times when
      connecting a MediaController to a platform media session.
  • UI:
    • Add ProgressStateWithTickInterval class and the corresponding
      rememberProgressStateWithTickInterval Composable to
      media3-ui-compose module. This state holder is used in demo-compose
      to display the current position and duration in text form.
    • Add MuteButtonState to ui-compose that handles muting of the
      Player volume. This state holder is used in demo-compose to display
      mute/unmute toggle button.
    • Add ProgressStateWithTickCount classes and the corresponding
      rememberProgressStateWithTickCount Composable to media3-ui-compose
      module. This state holder is used in demo-compose to display progress
      as a horizontal read-only progress bar.
    • Add ContentFrame Composable to media3-ui-compose which combines
      PlayerSurface management with aspect ratio resizing and covering with
      a shutter.
    • Work around a known API 34 platform bug causing stretched/cropped videos
      when using SurfaceView inside a Compose AndroidView and hence
      affecting ContentFrame and PlayerSurface Composables with
      SURFACE_TYPE_SURFACE_VIEW
      (#​1237,
      #​2811).
    • Create a new media3-ui-compose-material3 module and add
      Material3-themed Composables (PlayPauseButton, NextButton,
      PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton,
      ShuffleButton, MuteButton) to it.
    • Add TimeText composable to media3-ui-compose-material3 for
      displaying player progress in a textual form. It can be configured to
      show the current position, duration, or remaining time.
    • Add support for placing a media route button in the PlayerView.
    • Use BidiFormatter to correctly display punctuation in RTL text
      subtitles (#​11214).
  • HLS extension:
    • Parse HLS interstitial skip attributes.
    • Map skip control attributes from the HLS playlist and the asset list
      document into the AdPlaybackState for public access.
    • Fix bug where the start time of the playlist was dropped when the
      EXT-X-PROGRAM-START-DATE tag defining the start time was removed from a
      playlist (#​2760).
    • Use binary search to find the segment index of a given position in the
      playlist (#​2826).
    • Add HlsInterstitialsAdsLoader.skipCurrentAd() and
      skipCurrentAdGroup() and corresponding methods to skip ads and ad
      groups by index.
    • Add HlsInterstitialsAdsLoader.Listener.onAdStarted to report the start
      of an ad period
      (#​2859).
    • Accept space as a date/time separator in ISO 8601 date-time strings.
    • Properly handle fetching the next chunk for an HlsMediaPlaylist with
      no segments (#​2821).
    • Use the default start position for pre rolls with live streams.
  • DASH extension:
    • Fix UnsupportedOperationException when playing DASH streams with a
      non-hierarchical data: URI manifest
      (#​2688).
    • Reset LiveConfiguration to the value provided by the MediaItem of
      the DashMediaSource when released and when the media item is updated
      by the user (#​2606).
    • Avoid crashes caused by invalid manifest updates that were not reported
      as player errors
      (#​2805).
  • RTSP extension:
    • Handle error of missing RTP packets when processing fragmented NAL units
      for H264 and H265
      (#​2613).
  • Decoder extensions (FFmpeg, VP9, AV1, etc.):
    • AV1 Extension: The AV1 software decoder now uses the high-performance
      dav1d library, replacing the previous libgav1 implementation for
      improved decoding speed.
    • FFmpeg extension: Fix an issue that prevented some FLAC files from
      playing by ensuring the STREAMINFO block is correctly parsed and
      passed to the decoder
      (#​2887).
  • Cast extension:
    • Add CastPlayer.Builder, which enables CastPlayer to do both local
      and Cast playback. To keep the old CastPlayer behavior of supporting
      only Cast playback, you can use RemoteCastPlayer. The pre-existing
      CastPlayer constructors keep their old behavior, but are deprecated in
      favour of using the CastPlayer or RemoteCastPlayer builders instead.
    • Stop enforcing a non-null mime type in DefaultMediaItemConverter.
    • Use MediaItem.mediaMetadata.mediaType to infer the Cast MEDIA_TYPE to
      use in DefaultCastOptionsProvider#toMediaQueueItem, when available.
    • Enable remote to local transfers in DefaultCastOptionsProvider.
    • Add support for Cast in the Session demo.
    • Add support for displaying a media route button on a Composable UI.
    • Add support for displaying a media route button on an action bar menu.
    • Add support for displaying a media route button as a View UI.
  • Test Utilities:
    • Add maximum time diff for the auto-advancing behavior of FakeClock. It
      defaults to 1 second, but is configurable via FakeClock.Builder.
    • Add maximum time diff between messages for
      RobolectricUtil.runMainLooperUntil (and runLooperUntil). It defaults
      to 1 second, but is configurable via new overloads of these methods.
    • Move CapturingRenderersFactory from test-utils to
      test-utils-robolectric.
  • Remove deprecated symbols:
    • Remove deprecated DefaultPreloadManager constructor. Use
      DefaultPreloadManager.Builder instead.
    • Removed deprecated EditedMediaItemSequence constructors. Use
      EditedMediaItemSequence.Builder instead.
    • Remove BitmapFactoryImageDecoder.BitmapDecoder. Use
      ExternallyLoadedImageDecoder instead.
    • Remove deprecated ShadowMediaCodecConfig.forAllSupportedMimeTypes().
      Use ShadowMediaCodecConfig.withAllDefaultSupportedCodecs() instead.
    • Remove deprecated
      ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(). Use
      ShadowMediaCodecConfig.withNoDefaultSupportedCodecs() instead.

v1.8.0

Compare Source

This release includes the following changes since the
1.7.1 release:

  • Common Library:
    • Add support for replacing the player in ForwardingSimpleBasePlayer.
  • ExoPlayer:
    • Add getter for shuffle mode to the ExoPlayer interface
      (#​2522).
    • More clearly throw an exception if DefaultAudioSink is accessed from
      multiple threads. If this happens due to a call to
      RendererCapabilities.getFormatSupport outside of the player, make sure
      to call this method on the same thread as ExoPlayer's playback thread or
      use a different instance than the one used for playback
      (#​1191).
    • Fix bug where non-stereo audio formats on TVs may be marked as
      unsupported by DefaultTrackSelector.
    • Ensure the last frame is correctly rendered when using MediaCodec's
      DECODE_ONLY flag (which is enabled by default in scrubbing mode).
    • Add support for using the virtual device ID from the Context passed to
      ExoPlayer.Builder.
    • Enable dynamic scheduling by default in scrubbing mode.
    • Avoid unnecessary reload of a source when seeking to the end of an item.
    • Use MediaCodec.BUFFER_FLAG_DECODE_ONLY by default in scrubbing mode.
    • Throw IllegalStateException when PreloadMediaSource is played by an
      ExoPlayer with a playback thread that is different than the preload
      thread (#​2495).
    • Add cloneAndMove to ShuffleMode with a default implementation
      (#​2226).
    • Change default behavior of Renderer.getMinDurationToProgressUs to
      return a larger value if no call to render is required.
    • Fix bug where internal scheduling delayed last frame when seeking to the
      end while paused. For now, the bug fix only takes effect if
      ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled is enabled.
    • Add ExoPlayer.setScrubbingModeEnabled(boolean) method. This optimizes
      the player for many frequent seeks (for example, from a user dragging a
      scrubber bar around). The behavior of scrubbing mode can be customized
      with setScrubbingModeParameters(..) on ExoPlayer and
      ExoPlayer.Builder.
    • Allow customizing fractional seek tolerance in scrubbing mode.
    • Increase codec operating rate in scrubbing mode.
    • Fix bug where prepare errors in the content of AdsMediaSource may be
      never reported (#​2337).
    • Fix memory leak in MergingMediaSource, for example used when
      sideloading subtitles
      (#​2338).
    • Allow CmcdConfiguration.Factory to return null to disable CMCD
      logging for specific media items
      (#​2386).
    • Increase default image buffer size from 128kB (copy-paste mistake from
      text tracks) to 26MB, which is large enough for 50MP Ultra HDR images
      (#​2417).
    • Add PreCacheHelper that allows apps to pre-cache a single media with
      specified start position and duration.
    • Add support of preloading from specified position in
      DefaultPreloadManager.
  • Transformer:
    • Add CodecDbLite that enables chipset specific optimizations of video
      encoding settings.
    • Add setEnableCodecDbLite flag to the DefaultEncoderFactory to enable
      CodecDB Lite settings optimization. By default, this flag is set to
      false.
    • Filling an initial gap (added via addGap()) with silent audio now
      requires explicitly setting experimentalSetForceAudioTrack(true) in
      EditedMediaItemSequence.Builder. If the gap is in the middle of the
      sequence, then this flag is not required.
    • Move Muxer interface from media3-transformer to media3-muxer.
    • Make setting MediaItem.Builder().setImageDuration(long) mandatory to
      import a media item as an image.
    • Add
      Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
      which includes an MP4 edit list when trimming to instruct players to
      ignore samples between the key frame before the trim start point, and
      the trim start point.
    • Update Composition Demo app to use Kotlin and Jetpack Compose, and add a
      custom VideoCompositorSettings to arrange sequences into a 2x2 or PiP
      layout.
  • Extractors:
    • Parse metadata from fragmented MP4 files
      (#​2084).
    • JPEG: Support motion photos that don't have an Exif segment at the start
      (#​2552).
    • Add support for seeking in fragmented MP4 with multiple sidx atoms.
      This behavior can be enabled using the FLAG_MERGE_FRAGMENTED_SIDX flag
      on FragmentedMp4Extractor
      (#​9373).
    • Ignore empty seek tables in FLAC files (including those containing only
      placeholder seek points), and fall back to binary search seeking if the
      duration of the file is known
      (#​2327).
    • Fix parsing of H.265 SEI units to fully skip unrecognized SEI types
      (#​2456).
    • Update WavExtractor to use the header extension's SubFormat data for
      the audio format when parsing a WAVE_FORMAT_EXTENSIBLE type file.
    • MP4: Add support for ipcm and fpcm boxes defining raw PCM audio
      tracks (64-bit floating point PCM is not supported).
    • MP4: Handle the rotation part of tkhd transformation matrices that
      both rotate and reflect the video. This ensures that reflected videos
      taken by the iPhone front facing camera display the right way up, but
      incorrectly reflected in the y-axis
      (#​2012).
    • MP3: Use duration and data size from unseekable Xing, VBRI and similar
      variable bitrate metadata when falling back to constant bitrate seeking
      due to FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
      (#​2194).
  • Audio:
    • Fix bug where AnalyticsListener.onAudioPositionAdvancing is not called
      when the audio playback is started very close to the end of the media.
    • Add support for all linear PCM sample formats in
      ChannelMappingAudioProcessor and TrimmingAudioProcessor.
    • Add support for audio gaps in CompositionPlayer.
    • Remove spurious call to BaseAudioProcessor#flush() from
      BaseAudioProcessor#reset().
    • Allow constant power upmixing/downmixing in DefaultAudioMixer.
    • Make ChannelMappingAudioProcessor, TrimmingAudioProcessor and
      ToFloatPcmAudioProcessor public
      (#​2339).
    • Use AudioTrack#getUnderrunCount() in AudioTrackPositionTracker to
      detect underruns in DefaultAudioSink instead of best-effort
      estimation.
    • Improve audio timestamp smoothing for unexpected position drift from the
      audio output device.
    • Fix bug where A/V sync is broken for the first 10 seconds after resuming
      from pause when connected to Bluetooth devices.
    • Fix bug that AnalyticsListener.onAudioPositionAdvancing was not
      reporting the time when the audio started advancing but the time of the
      first measurement.
    • Fix recovery to multichannel audio after fallback to stereo audio on
      some devices (#​2258).
  • Video:
    • Extend detached surface workaround to "lenovo" and "motorola" devices
      (#​2059).
    • Improve smooth video frame release at startup when audio samples don't
      start at exactly the requested position.
    • Extend detached surface workaround to "realme" devices
      (#​2059).
    • Add experimental ExoPlayer API to include the
      MediaCodec.BUFFER_FLAG_DECODE_ONLY flag when queuing decode-only input
      buffers. This flag will signal the decoder to skip the decode-only
      buffers thereby resulting in faster seeking. Enable it with
      DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag.
    • Improve codec performance checks for software video codecs. This may
      lead to some additional tracks being marked as EXCEEDS_CAPABILITIES.
    • Fix VP9 Widevine playback errors on some devices
      (#​2408).
  • Text:
    • Add support for VobSub tracks in MP4 files
      (#​2510).
    • Fix a playback stall when a subtitle segment initially fails to load and
      later loads successfully, followed by several empty subtitle segments
      (#​2517).
    • Fix SSA and SubRip to display an in-progress cue when enabling subtitles
      (#​2309).
    • Fix playback getting stuck when switching from a stream with a subtitle
      error to a live stream with an empty subtitle track
      (#​2328).
    • Fix garbled CEA-608 subtitles when playing H.262 streams containing
      B-frames (#​2372).
    • Add support for SSA subtitles with CodecId = S_TEXT/SSA in Matroska
      files. Previously MatroskaExtractor only supported CodecId = S_TEXT/ASS which is meant to represent the 'advanced' (v4+) variant of
      SubStation Alpha subtitles (but ExoPlayer's parsing logic is the same
      for both variants)
      (#​2384).
    • Add support for the layer property in SubStation Alpha (SSA) subtitle
      files which is used to define the z-order of cues when more than one is
      shown on screen at the same time
      (#​2124).
  • Metadata:
    • Added support for retrieving media duration and Timeline to
      MetadataRetriever and migrated it to an instance-based,
      AutoCloseable API. Use the new Builder to create an instance for a
      MediaItem, then call retrieveTrackGroups(), retrieveTimeline(),
      and retrieveDurationUs() to get ListenableFutures for the metadata.
      The previous static methods are now deprecated
      (#​2462).
  • Image:
    • Limit decoded bitmaps to the display size in
      BitmapFactoryImageDecoder, to avoid an app crashing with Canvas: trying to draw too large bitmap. from PlayerView when trying to
      display very large (e.g. 50MP) images.
    • Change the signature of
      DefaultRenderersFactory.getImageDecoderFactory() to take a Context
      parameter.
    • Align the max bitmap output size used in CompositionPlayer with that
      already used in Transformer (meaning CompositionPlayer does not
      consider the display size when decoding bitmaps, unlike ExoPlayer).
  • DRM:
    • Add new overload of OfflineLicenseHelper.newWidevineInstance accepting
      a MediaItem.DrmConfiguration so that HTTP request headers can be
      applied correctly
      (#​2169).
  • Effect:
    • Add Presentation.createForShortSide(int) that creates a Presentation
      that ensures the shortest side always matches the given value,
      regardless of input orientation.
  • Muxers:
    • Fix a bug where correct sample flags were not set for audio samples in
      fragmented MP4.
    • writeSampleData() API now uses muxer specific BufferInfo class
      instead of MediaCodec.BufferInfo.
    • Add Muxer.Factory#supportsWritingNegativeTimestampsInEditList which
      defaults to false.
  • IMA extension:
    • Fix a bug where a load error in one ad may accidentally invalidate
      another ad group.
    • Fix bug where ad groups after the end of a VOD window stalled playback.
      Ads groups with a start time after the window are not enqueued into the
      MediaPeriodQueue anymore
      (#​2215).
  • Session:
    • Fix bug where connections from third-party non-privileged Media3
      controllers are ignored.
    • Remove check for available commands when sending custom commands to a
      legacy MediaBrowserServiceCompat. This is in parity with the behavior
      of legacy controllers/browsers when connected to a legacy app.
    • Fix a bug that causes a player's first playback error to be incorrectly
      treated as a persistent custom exception. This prevents the application
      from recovering.
    • Fix bug where some controller changes that are not handled by the
      session may cause IllegalStateExceptions.
    • Fix bug where controller actions that are not handled by the session may
      leave the controller in an invalid state.
    • Fix StrictMode unsafe launch violation warning
      (#​2330).
    • Fix bug where calling setSessionExtras from the main thread when
      running the player from a different application thread then the main
      thread caused an IllegalStateException
      (#​2265).
    • Don't automatically show a notification if a player is set up with media
      items without preparing or playing them
      (#​2423#​2423). This behavior
      is configurable via
      MediaSessionService.setShowNotificationForIdlePlayer.
    • Add custom PlaybackException for all or selected controllers.
    • Fix bug where seeking in a live stream on a MediaController can cause
      an IllegalArgumentException.
    • For live streams, stop publishing a playback position and the ability to
      seek in the current item for platform media controllers, to avoid
      position artefacts in the Android Auto UI (and other controllers using
      this information from the platform media session)
      (#​1758).
    • Fix a bug where passing null into getLibraryRoot of a MediaBrowser
      connected to a legacy MediaBrowserServiceCompat produced a
      NullPointerException.
    • Fix a bug where sending custom actions, a search result or a getItem
      request crashed the legacy session app with a ClassNotFoundException.
    • Fix a bug where MediaItem.LocalConfiguration.uri was shared to the
      platform sessions's MediaMetadata. To intentionally share a URI to
      allow controllers to re-request the media, set
      MediaItem.RequestMetadata.mediaUri instead.
  • UI:
    • Fix bug where PlayerSurface inside re-usable components like
      LazyColumn didn't work correctly
      (#​2493).
    • Fix a Compose bug which resulted in a gap between setting the initial
      button states and observing the change in state (e.g. icon shapes or
      being enabled). Any changes made to the Player outside of the
      observation period are now picked up
      (#​2313).
    • Add state holders and composables to the media3-ui-compose module for
      SeekBackButtonState and SeekForwardButtonState.
    • Add support for ExoPlayer's scrubbing mode to PlayerControlView. When
      enabled, this puts the player into scrubbing mode when the user starts
      dragging the scrubber bar, issues a player.seekTo call for every
      movement, and then exits scrubbing mode when the touch is lifted from
      the screen. This integration can be enabled with either
      time_bar_scrubbing_enabled = true in XML or the
      setTimeBarScrubbingEnabled(boolean) method from Java/Kotlin.
    • Make PlayerSurface accept a nullable Player argument.
  • Downloads:
    • Add partial download support for progressive streams. Apps can prepare a
      progressive stream with DownloadHelper, and request a
      DownloadRequest from the helper with specifying the time-based media
      start and end positions that the download should cover. The returned
      DownloadRequest carries the resolved byte range, with which a
      ProgressiveDownloader can be created and download the content
      correspondingly.
    • Add DownloadHelper.Factory with which the static
      DownloadHelper.forMediaItem() methods are replaced.
    • Add Factory for SegmentDownloader implementations.
    • Add partial download support for adaptive streams. Apps can prepare an
      adaptive stream with DownloadHelper, and request a DownloadRequest
      from the helper with specifying the time-based media start and end
      positions that the download should cover. The returned DownloadRequest
      carries the resolved time range, with which a concrete
      SegmentDownloader can be created and download the content
      correspondingly.
  • Cronet extension:
    • Add automatic cookie handling
      (#​5975).
  • HLS extension:
    • Fix bug where HlsSampleStreamWrapper attempts to seek inside buffer
      when there are no chunks available in the buffer
      #​2598.
    • Fix bug where track selection changes after loading low-latency parts
      and preload hints can cause playback to get stuck or freeze
      (#​2299).
    • Prevent excessive reloads by waiting for half the target duration when
      CAN-BLOCK-RELOAD=YES is not honored by the server
      (#​2317).
    • Fix bug where playback was stalled when starting an interstitials stream
      before a mid roll and asset list resolution was attempted for the wrong
      ad (#​2558).
    • Fix playlist parsing to accept \f (form feed) in quoted string
      attribute values
      (#​2420).
    • Support updating interstitials with the same ID
      (#​2427).
    • Fix bug where playlist load errors are sometimes not propagated once a
      live stream runs out of segments to load
      (#​2401#​2401).
    • Group subtitle renditions by NAME tag, similar to how audio renditions
      are grouped already
      (#​1666).
    • Support X-ASSET-LIST and live streams with HlsInterstitialsAdsLoader.
  • DASH extension:
    • Fix issue where trick-play adaptation set is merged with its main
      adaptation set to form an invalid TrackGroup
      (#​2148).
    • Fix bug where shortening a DASH period duration can throw an exception
      when samples beyond the new duration have already been read by the
      rendering pipeline
      (#​2440).
    • Fix bug where redirect wasn't followed when using CMCD query parameters
      (#​2475).
  • RTSP extension:
    • Add support for RTP Aggregation Packet for H265 in accordance with RFC
      7798#4.4.2 (#​2413).
    • Fix RtspClient to use the location uri as provided when processing an
      HTTP 302 response
      (#​2398).
    • Add parsing support for SessionDescriptions containing lines with
      trailing whitespace characters
      (#​2357).
  • Decoder extensions (FFmpeg, VP9, AV1, etc.):
    • Fix bug where
      DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
      has no effect for audio decoder extensions
      (#​2258).
  • Cast extension:
    • Add support for setVolume(), and getVolume()
      (#​2279).
    • Prevent CastPlayer from entering STATE_BUFFERING while the timeline is
      empty.
    • Add support for getDeviceVolume(), setDeviceVolume(),
      getDeviceMuted(), and setDeviceMuted()
      (#​2089).
  • Test Utilities:
    • Add advance(player).untilPositionAtLeast and untilMediaItemIndex to
      TestPlayerRunHelper in order to advance the player until a specified
      position is reached. In most cases, these methods are more reliable than
      the existing untilPosition and untilStartOfMediaItem methods.
    • Move FakeDownloader to test-utils-robolectric module for reuse in
      other tests.
    • Removed transformer.TestUtil.addAudioDecoders(String...),
      transformer.TestUtil.addAudioEncoders(String...), and
      transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). Use ShadowMediaCodecConfig to configure shadow encoders
      and decoders instead.
    • Replaced the "exotest" prefix with "media3" in codec names reported by
      ShadowMediaCodecConfig.
  • Remove deprecated symbols:
    • Removed deprecated SegmentDownloader constructor
      SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) and the corresponding constructors in its subclasses
      DashDownloader, HlsDownloader and SsDownloader.
    • Removed deprecated Player.hasNext(), Player.hasNextWindow(). Use
      Player.hasNextMediaItem() instead.
    • Removed deprecated Player.next(). Use Player.seekToNextMediaItem()
      instead.
    • Removed deprecated Player.seekToPreviousWindow(). Use
      Player.seekToPreviousMediaItem() instead.
    • Removed deprecated Player.seekToNextWindow(). Use
      Player.seekToNextMediaItem() instead.
    • Removed deprecated BaseAudioProcessor in exoplayer module. Use
      BaseAudioProcessor under common module.
    • Remove deprecated MediaCodecVideoRenderer constructor
      MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @&#8203;Nullable Handler, @&#8203;Nullable VideoRendererEventListener, int, float, @&#8203;Nullable VideoSinkProvider).

Configuration

📅 Schedule: 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 was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/androidx.media3 branch from c2224f4 to d025f0c Compare September 8, 2025 12:54
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from d025f0c to cf72f87 Compare September 19, 2025 18:32
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from cf72f87 to 1278f61 Compare September 28, 2025 21:42
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 1278f61 to 99ed019 Compare October 9, 2025 12:28
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 99ed019 to 4f07dda Compare October 21, 2025 11:01
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 4f07dda to 3a0900a Compare October 28, 2025 11:34
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 3a0900a to 7cb422c Compare November 10, 2025 23:31
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 7cb422c to 64ccf50 Compare November 18, 2025 10:06
@renovate renovate bot force-pushed the renovate/androidx.media3 branch 2 times, most recently from ff7529b to e89b423 Compare December 11, 2025 14:37
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from e89b423 to 9972a87 Compare December 17, 2025 21:13
@renovate renovate bot changed the title fix(deps): update androidx.media3 to v1.8.0 fix(deps): update androidx.media3 to v1.9.0 Dec 17, 2025
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 9972a87 to 9873b00 Compare December 30, 2025 12:12
@renovate renovate bot force-pushed the renovate/androidx.media3 branch from 9873b00 to 99c69a7 Compare December 31, 2025 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant