Update all dependencies (main) #555
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v5->v61.12.1->1.12.21.12.1->1.12.22025.12.00->2025.12.018.13.1->8.13.28.13.1->8.13.21.8.0->1.9.01.8.0->1.9.08.13.1->8.13.2Release Notes
actions/upload-artifact (actions/upload-artifact)
v6Compare Source
androidx/media (androidx.media3:media3-ui)
v1.9.0Compare Source
minSdkto23in line with other AndroidX libraries.PlayerTransferState, which facilitates transferring the playbackstate across
Playerinstances.void mute()andvoid unmute()methods to Player that preserveand consequently restore Player's volume before and after setting it to
zero.
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerandStuckPlayerDetectorpreviously used byExoPlayerinternally to allowreuse for other players
(#1893).
ForwardingPlayerlistener handling when the underlying delegateplayer uses reference equality for comparing listener instances
(#2675).
Player.listenTosuspending extension function in themedia3-common-ktxlibrary that specifies the particularPlayer.Eventsthat should be acted upon.BasePlayer.getBufferedPercentageresulting from integeroverflow when the reported buffered position is implausibly much larger
than the reported duration
(#2750).
TrackGrouptrack type by not ignoring customsample MIME type and falling back to using the potentially wrong track
type from the container MIME type
(#2860).
StuckPlayerExceptionplayer error if the player seems stuck. This happens in the following
cases, where each default timeout can be configured in
ExoPlayer.Builderif required:STATE_BUFFERINGwhile trying to play and nobuffering progress.
STATE_READYwhile trying to play and noplayback progress.
STATE_READYbeyond the declared duration withoutreaching the end of the item.
play.
background playback. This is equivalent to setting
ExoPlayer.Builder.setWakeModetoC.WAKE_MODE_LOCAL.change is reported to the
Contextoriginally passed toExoPlayer.Builder.ExoPlayer.setVirtualDeviceIdto manually update the virtual deviceID obtained from the
Contextpassed toExoPlayer.Builder.than 10 seconds before the end of the current item.
setSeekBackIncrementMs,setSeekForwardIncrementMsandsetMaxSeekToPreviousPositionMstoExoPlayerto update these settingsafter construction
(#2736).
DefaultPreloadManager. Apps now canreturn
DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)orDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)via
TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)to indicate that a media item needs to be pre-cached.
DefaultPreloadManagerin shortformdemo app.
DefaultLoadControl.Buildersetters for local playback and adjustdefault values of
DefaultLoadControlto work well with a wide range oflocal files.
STATE_READYorSTATE_BUFFERING.addMediaItems(List<MediaItem>, List<T>)andaddMediaSources(List<MediaSource>, List<T>)that add the mediaitems or media sources in batch, and automatically call
invalidate()afterwards.removeMediaItems((List<MediaItem>)andremoveMediaSources(List<MediaSource>)that remove the media itemsor media sources in batch, and make sure that preload manager does
not start to preload or continue preloading any of them after
removal.
DefaultPreloadManager.setCurrentPlayingIndex(int)toinvalidate itself automatically. Apps don't need to call
invalidate()explicitly anymore after updating the current playingindex.
group of pictures while in scrubbing mode.
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)for apps to set a value of target buffer bytes for a player with the
specified
playerName. TheDefaultLoadControlcan now make decisionsof each player separately based on its own allocated bytes and target
buffer bytes.
SkipInfoto theAdPlaybackState.AdGroupto carry skipinformation for each ad in the ad group.
removeMediaItems(List)during playing apost-roll created a crash
(#2746).
always set as the last sample and rendered.
(#2382,
#2678).
DefaultPreloadManagerto avoid total buffer bytes for preloading fromgrowing arbitrarily. To use the default control logic, Apps can set the
target buffer bytes for preloading via
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)fora
playerNameofPlayerId.Preload.name("preload"), and inject thecreated
DefaultLoadControlviaDefaultPreloadManager.Builder.setLoadControl(LoadControl).cloneAndSet(int, int)toShuffleOrderwith a defaultimplementation (#2834).
adjustment or auto transition
(#2484).
This feature is implemented for
MediaCodecbased renderers andrequires API 29+.
ExoPlayer.setAudioCodecParameters()andExoPlayer.setVideoCodecParameters()to apply parameters.ExoPlayer.addAudioCodecParametersChangeListener()andExoPlayer.addVideoCodecParametersChangeListener()to listen forchanges. Observing vendor-specific keys requires API 31+.
IllegalStateExceptioncaused by setting an empty media sourceafter seeking to a non-zero position and then preparing the player with
a non-empty media source.
could cause
IllegalStateException.NullPointerExceptioninDefaultPlaybackSessionManager(#2885).
timeout issues with this platform API have been fixed
(#1641).
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsto 15ms and enable more efficient dropping of video frames before
decoding for eligible videos.
DefaultLoadControl. This should only take effect if an excessivenumber of tracks get selected
(#2860).
mode near the end could cause a seek to the next media item.
CompositionPlayerunder a new@ExperimentalApiannotation toindicate 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).
COMMAND_SET_AUDIO_ATTRIBUTESand audio focus handlingin
CompositionPlayer.CompositionPlayer.EditedMediaItem.removeVideo.InAppMp4Muxeras default muxer.EditedMediaItem.Builder#setSpeed()and deprecateEffects#createExperimentalSpeedChangingEffects().forceAudioTrackandforceVideoTrackwithtrackTypesinEditedMediaItemSequence.TrackSelectionParameters.selectTextByDefaultto prefer theselection of any text track without specifying other more specific
preferences.
preferredVideoLabels,preferredAudioLabelsandpreferredTextLabelsinTrackSelectionParametersto specify apreference for tracks with a specific label, for example those read from
HLS NAME tags (#1666).
headers in the encoded FLAC data, resulting in decoding errors
(#558).
files (#811,
#5718).
for a sync byte
(#2713).
FLAG_ENABLE_INDEX_SEEKINGto prefer seeking informationfrom 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).
Mp3Extractorto default to a constant bitrate (CBR)assumption when no seeking metadata (e.g., Xing, VBRI) is found, even
when
FLAG_ENABLE_INDEX_SEEKINGis set. This is based on the MP3specification'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).
audio/mpeg(MP3),audio/mpeg-L1andaudio/mpeg-L2MIME types by peeking the layer value of the firstsample before emitting a track format from the extractor
(#2683).
stblbox larger than 1MB implies the file must be non-fragmented(#2650).
©mvn(movement name) and©mvi(movement index)metadata, these are now emitted as
TextInformationFrameobjects inFormat.metadatawith IDs ofMVNMandMVINrespectively(#2754).
stsdbox (instead of failing to parsethe whole file).
(#6225).
MatroskaExtractorwhere seeking could be inaccuratefor files with multiple tracks. Cue points are now correctly associated
with their respective tracks, leading to more precise seeking.
IllegalArgumentExceptionfromReorderingBufferQueuecaused by PES packets with no timestamp
(#2764).
HeifExtractorcannow parse HEIC files containing embedded video and audio tracks.
:media3-inspectormodule to serve as the dedicatedhome for media inspection utilities. This module now houses a new
androidx.media3.inspector.MetadataRetriever, which will provide aunified API for both metadata and frame extraction. The existing
androidx.media3.exoplayer.MetadataRetrieveris now deprecated in favorof this new version.
androidx.media3.inspector.FrameExtractor, a new public APIfor frame extraction. This
AutoCloseableclass provides a way toextract frames with support for HDR video, video effects, and custom
decoder selection. It should be created via its
Builderfor a specificMediaItem.getThumbnail()to extract a representativethumbnail frame from a media file without requiring a specific
timestamp.
androidx.media3.inspector.MediaExtractorCompat, a drop-inreplacement for the platform's
android.media.MediaExtractorthatprovides a way to extract raw, encoded media samples from a media file.
The existing
androidx.media3.exoplayer.MediaExtractorCompatis nowdeprecated in favor of this new class.
AudioProcessorinstances aware of seeking.AudioOutputProviderinterface intoDefaultAudioSink.Builderto support custom audio output paths. Thedefault is
AudioTrackAudioOutputProvider.GainProcessor.support assessment
(#2580).
the beginning of playback
(#2646).
(#1346).
Sonic.ToFloatPcmAudioProcessor.codecs (#2856).
(#2775).
thumbnail track
(#2815).
MediaDrmCallbackmethods frombyte[]to anew
MediaDrmCallback.Responsetype, to allow returning extra optionalinformation. This is a source breaking change, but breakages can be
easily resolved by wrapping the previous
byte[]return value withnew Responsebefore returning.AnalyticsListener.onDrmKeysLoaded(#1001).
Presentation.copyWithUnsetSideRoundedToto round the unset outputside when
Presentationis created with a single side length.MediaMuxerCompat, a drop-in replacement for frameworkMediaMuxer.MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()to allowMotion Photo creation.
WebmMuxerto allow muxing ofOPUS,VORBIS,VP8andVP9media streams into a
webmfile format.IMA android archive instead.
ImaServerSideAdInsertionUriBuilder.setNetworkCode, a new API forsetting 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.
desugaring. This must also be enabled by dependent apps too. See IMA's
config notes.
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.
be wrongly reported as an ad playback error
(#2656).
MediaSession.Callback.onPlaybackResumptiontoindicate if the call happens to gather information only or to start
playback (#1764).
MediaSession.ControllerInfo.isTrustedto also declarecontrollers from the own app as trusted
(#2542).
MediaSessionService.triggerNotificationUpdateto manually triggera notification update
(#1833).
ProgressListenerto custom command methods.MediaLibrarySession.Builder.setLibraryErrorReplicationModeto nonfatal.
Contextparameter toMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625).
PlaybackInfoinstead offetching it via binder. This ensures that playback type and volume
control ID are read atomically and do match to each other.
ACTION_UPkey events were filtered out before passingthem to the callback for custom handling. This brings parity with what
media1 did and the platform does
(#2637).
getCurrentTimeline()was called byPlayerWrapperevenwhen the command isn't available
(#2665).
which caused a memory leak after the service terminated
(#2692).
MediaBrowser, customcommands are sent to the session only if the custom action is advertised
as a custom action in
PlaybackStateCompatof the legacy session. Allother custom actions are sent to the service.
onAudioSessionIdChangedto notify media controllers whenan audio session ID is set by the session
(#244).
KEYCODE_HEADSETHOOKdid not start the player upon andmedia key event
Intentarriving inonStartCommand(). This is fixedby handling 'KEYCODE_HEADSETHOOK' just like
KEYCODE_MEDIA_PLAY_PAUSE(#2816).
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
setVideoSurfaceHoldercall.StringCharSequencemetadata values likespan-styled strings
(#2853).
CommandButton.executeActionso that controllers can more easilytrigger the intended action. Also allow to specify parameters for some
player and session commands to define which action to trigger.
CommandButtoninstances usingPlayer.Commandor non-customSessionCommandto define their action.These are now correctly represented in platform media sessions, for
example for System UI or Android Auto.
Bitmapis compressed multiple times whenconnecting a
MediaControllerto a platform media session.ProgressStateWithTickIntervalclass and the correspondingrememberProgressStateWithTickIntervalComposable tomedia3-ui-composemodule. This state holder is used indemo-composeto display the current position and duration in text form.
MuteButtonStatetoui-composethat handles muting of thePlayervolume. This state holder is used indemo-composeto displaymute/unmute toggle button.
ProgressStateWithTickCountclasses and the correspondingrememberProgressStateWithTickCountComposable tomedia3-ui-composemodule. This state holder is used in
demo-composeto display progressas a horizontal read-only progress bar.
ContentFrameComposable tomedia3-ui-composewhich combinesPlayerSurfacemanagement with aspect ratio resizing and covering witha shutter.
when using
SurfaceViewinside a ComposeAndroidViewand henceaffecting
ContentFrameandPlayerSurfaceComposables withSURFACE_TYPE_SURFACE_VIEW(#1237,
#2811).
media3-ui-compose-material3module and addMaterial3-themed Composables (PlayPauseButton, NextButton,
PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton,
ShuffleButton, MuteButton) to it.
TimeTextcomposable tomedia3-ui-compose-material3fordisplaying player progress in a textual form. It can be configured to
show the current position, duration, or remaining time.
PlayerView.BidiFormatterto correctly display punctuation in RTL textsubtitles (#11214).
document into the
AdPlaybackStatefor public access.EXT-X-PROGRAM-START-DATE tag defining the start time was removed from a
playlist (#2760).
playlist (#2826).
HlsInterstitialsAdsLoader.skipCurrentAd()andskipCurrentAdGroup()and corresponding methods to skip ads and adgroups by index.
HlsInterstitialsAdsLoader.Listener.onAdStartedto report the startof an ad period
(#2859).
HlsMediaPlaylistwithno segments (#2821).
UnsupportedOperationExceptionwhen playing DASH streams with anon-hierarchical
data:URI manifest(#2688).
LiveConfigurationto the value provided by theMediaItemofthe
DashMediaSourcewhen released and when the media item is updatedby the user (#2606).
as player errors
(#2805).
for H264 and H265
(#2613).
dav1dlibrary, replacing the previouslibgav1implementation forimproved decoding speed.
playing by ensuring the
STREAMINFOblock is correctly parsed andpassed to the decoder
(#2887).
CastPlayer.Builder, which enablesCastPlayerto do both localand Cast playback. To keep the old
CastPlayerbehavior of supportingonly Cast playback, you can use
RemoteCastPlayer. The pre-existingCastPlayerconstructors keep their old behavior, but are deprecated infavour of using the
CastPlayerorRemoteCastPlayerbuilders instead.DefaultMediaItemConverter.MediaItem.mediaMetadata.mediaTypeto infer the Cast MEDIA_TYPE touse in
DefaultCastOptionsProvider#toMediaQueueItem, when available.DefaultCastOptionsProvider.FakeClock. Itdefaults to 1 second, but is configurable via
FakeClock.Builder.RobolectricUtil.runMainLooperUntil(andrunLooperUntil). It defaultsto 1 second, but is configurable via new overloads of these methods.
CapturingRenderersFactoryfromtest-utilstotest-utils-robolectric.DefaultPreloadManagerconstructor. UseDefaultPreloadManager.Builderinstead.EditedMediaItemSequenceconstructors. UseEditedMediaItemSequence.Builderinstead.BitmapFactoryImageDecoder.BitmapDecoder. UseExternallyLoadedImageDecoderinstead.ShadowMediaCodecConfig.forAllSupportedMimeTypes().Use
ShadowMediaCodecConfig.withAllDefaultSupportedCodecs()instead.ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(). UseShadowMediaCodecConfig.withNoDefaultSupportedCodecs()instead.Configuration
📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), 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.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.