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:
8.12.1
->8.13
2.55
->2.56.1
2.55
->2.56.1
2.55
->2.56.1
2.8.7
->2.8.9
1.10.0
->1.10.1
1.10.0
->1.10.1
2025.02.00
->2025.03.01
2.8.7
->2.8.9
2.8.7
->2.8.9
2.2.0
->2.2.1
7.0.2
->7.0.3
2.55
->2.56.1
2.8.7
->2.8.9
8.8.1
->8.9.1
8.8.1
->8.9.1
1.3.3
->1.3.4
1.3.3
->1.3.4
1.5.1
->1.6.0
1.5.1
->1.6.0
2.1.4
->2.1.5
8.8.1
->8.9.1
Release Notes
gradle/gradle (gradle)
v8.13
Compare Source
androidx/media (androidx.media3:media3-ui)
v1.6.0
Compare Source
This release includes the following changes since the
1.5.1 release:
AudioManagerCompat
andAudioFocusRequestCompat
to replace theequivalent classes in
androidx.media
.plugin. Upgrade KotlinX Coroutines library from 1.8.1 to 1.9.0.
Format.toBundle(boolean excludeMetadata)
method, useFormat.toBundle()
instead.SimpleBasePlayer
where setting a newcurrentMediaItemIndex
inState
aftersetPlaylist
withnull
MediaMetadata
does not reevaluate the metadata(#1940).
SimpleBasePlayer.State
access from protected to public to makeit easier to handle updates in other classes
(#2128).
MediaExtractorCompat
, a new class that provides equivalentfeatures to platform
MediaExtractor
.MediaCodecVideoRenderer
. You can configureDefaultRenderersFactory
through
experimentalSetEnableMediaCodecVideoRendererPrewarming
toprovide a secondary
MediaCodecVideoRenderer
toExoPlayer
. Ifenabled,
ExoPlayer
pre-processes the video of consecutive media itemsduring playback to reduce media item transition latency.
bufferForPlaybackMs
andbufferForPlaybackAfterRebufferMs
inDefaultLoadControl
to 1000 and2000 ms respectively.
DeviceInfo
and device volume asynchronously (if enabledusing
setDeviceVolumeControlEnabled
). These values aren't availableinstantly after
ExoPlayer.Builder.build()
, andPlayer.Listener
notifies changes through
onDeviceInfoChanged
andonDeviceVolumeChanged
.creating the player. You can use
AnalyticsListener.onAudioSessionIdChanged
to listen to the initialupdate if required.
'main' video track that matches the language of the selected audio
track, if available. Explicit video language preferences can be
expressed with
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
.selectedAudioLanguage
parameter toDefaultTrackSelector.selectVideoTrack()
method.retryCount
parameter toMediaSourceEventListener.onLoadStarted
and corresponding
MediaSourceEventListener.EventDispatcher
methods.with durations that don't match the actual content could cause frame
freezes at the end of the item
(#1698).
BasePreloadManager.Listener
to a top-levelPreloadManagerListener
.RenderersFactory.createSecondaryRenderer
can be implemented to providesecondary renderers for pre-warming. Pre-warming enables quicker media
item transitions during playback.
CmcdData
for manifest requests in adaptive streamingformats DASH, HLS, and SmoothStreaming
(#1951).
MediaCodecInfo
of the codec that will be initialized inMediaCodecRenderer.onReadyToInitializeCodec
(#1963).
AdsMediaSource
to allow theAdPlaybackStates
to grow byappending ad groups. Invalid modifications are detected and throw an
exception.
succession when transitioning to content media after a mid-roll ad.
DefaultRenderersFactory
add twoMetadataRenderer
instances toenable apps to receive two different schemes of metadata by default.
playback is paused
(#1785).
ClippingMediaSource
to allow clipping in unseekablemedia.
transition.
ExoPlayer.isLoading()
remainstrue
while it hastransitioned to
STATE_IDLE
orSTATE_ENDED
(#2133).
lastRebufferRealtimeMs
toLoadControl.Parameter
(#2113).
formats.
format.
VideoFrameProcessor.registerInputStream
andVideoFrameProcessor.Listener.onInputStreamRegistered
to useFormat
.DefaultEncoderFactory
.MediaMetricsManager
. Transformer forwards editing events andperformance data to the platform, which helps to provide system
performance and debugging information on the device. This data may also
be collected by Google
if sharing usage and diagnostics data is enabled
by the user of the device. Apps can opt-out of contributing to platform
diagnostics for Transformer with
Transformer.Builder.setUsePlatformDiagnostics(false)
.InAppMuxer
intoInAppMp4Muxer
andInAppFragmentedMp4Muxer
.You use
InAppMp4Muxer
to produce a non-fragmented MP4 file, whileInAppFragmentedMp4Muxer
is for producing a fragmented MP4 file.Muxer
interface frommedia3-muxer
tomedia3-transformer
.MediaProjectionAssetLoader
, which provides media from aMediaProjection
for screen recording, and add support for screenrecording to the Transformer demo app.
#getInputFormat()
toCodec
interface.GlObjectsProvider
onto thecaller in
DefaultVideoFrameProcessor
andDefaultVideoCompositor
whenpossible.
the stream header stores the number of bytes instead of the number of
chunks.
than 4).
ArrayIndexOutOfBoundsException
in MP4 edit lists when the editlist starts at a non-sync frame with no preceding sync frame
(#2062).
(#2069).
play with
IllegalStateException: Playback stuck buffering and not loading
(#2197).onAudioPositionAdvancing
to be called when playback resumes(previously it was called when playback was paused).
SonicAudioProcessor
whenSpeedChangingAudioProcessor
isconfigured with default parameters.
Sonic#getOutputSize()
that could causeDefaultAudioSink
to stall.MediaCodecAudioRenderer.getDurationToProgressUs()
andDecoderAudioRenderer.getDurationToProgressUs()
so that seeks correctlyreset the provided durations.
androidx.media3.common.audio.SonicAudioProcessor
final.ChannelMappingAudioProcessor
andTrimmingAudioProcessor
.MediaCodecVideoRenderer.shouldUsePlaceholderSurface
toprotected so that applications can override to block usage of
placeholder surfaces
(#1905).
ExoPlayer
AV1 sample dependency parsing to speed upseeking. Enable it with the new
DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
API.ExoPlayer
API to drop lateMediaCodecVideoRenderer
decoder input buffers that are not depended on. Enable it with
DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
.very slow decoding any pending frames
(#1973).
screen flickering
(#2059).
(#8260).
MediaItem.Builder.setSubtitleConfigurations
, and instead only load oneif it is selected by track selection
(#1721).
tts:origin
andtts:extent
usingstyle
(#2953).Previously we incorrectly parsed any number of decimal places but always
assumed the value was in milliseconds, leading to incorrect timestamps
(#1997).
or CEA-708 captions.
IllegalStateException
when an SSA file contains a cue with zeroduration (start and end time equal)
(#2052).
the same container as audio and video
(#2052).
line endings (#2167).
MediaCodec$CryptoException: Operation not supported in this configuration
error when playing ClearKey content on API < 27 devices(#1732).
OverlaySettings
intoStaticOverlaySettings
.OverlaySettings
can be subclassed to allowdynamic overlay settings.
MuxerException
out ofMuxer
interface to avoid a very longfully qualified name.
setSampleCopyEnabled()
method tosetSampleCopyingEnabled()
in both
Mp4Muxer.Builder
andFragmentedMp4Muxer.Builder
.Mp4Muxer.addTrack()
andFragmentedMp4Muxer.addTrack()
now return anint
track ID instead of aTrackToken
.Mp4Muxer
andFragmentedMp4Muxer
no longer implementMuxer
interface.
Mp4Muxer
sample batching and copying by default.FragmentedMp4Muxer
that creates a lot of fragments whenonly audio track is written.
pauses, stops or fails. This allows users to resume playback within this
timeout without risking foreground service restrictions on various
devices. Note that simply calling
player.pause()
can no longer be usedto stop the foreground service before
stopSelf()
when overridingonTaskRemoved
, useMediaSessionService.pauseAllPlayersAndStopSelf()
instead.
state. The notification is only removed if the playlist is cleared or
the player is released.
and ACTION_PAUSE to only set one of them according to the available
commands and also accept if only one of them is set.
Context
as a parameter toMediaButtonReceiver.shouldStartForegroundService
(#1887).
Player
method on aMediaController
connectedto a legacy session dropped changes from a pending update.
MediaSession.setSessionActivity(PendingIntent)
accept null(#2109).
cleared (#2211).
media3-ui-compose
module forPlayerSurface
,PresentationState
,PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
andPlaybackSpeedState
.CacheWriter
that leaves data sources open and cache areaslocked in case the data source throws an
Exception
other thanIOException
(#9760).
HlsInterstitialsAdsLoader
. The ads loader readsthe HLS interstitials of an HLS media playlist and maps them to the
AdPlaybackState
that is passed to theAdsMediaSource
. This initialversion only supports HLS VOD streams with
X-ASSET-URI
attributes.HlsInterstitialsAdsLoader.AdsMediaSourceFactory
. Apps can use itto create
AdsMediaSource
instances that use anHlsInterstitialsAdsLoader
in a convenient and safe way.SUPPLEMENTAL-CODECS
tag from HLS playlist to detect Dolby Visionformats (#1785).
(#2209).
(#1898).
multi-period live streams
(#1698).
scte214:supplementalCodecs
attribute from DASH manifest todetect Dolby Vision formats
(#1785).
contains media samples beyond the declared period duration
(#1698).
adaptation-set-switching
but different languages or role flags are merged together
(#2222).
module to decode MPEG-H audio
(#1826).
AudioSink
andAudioRendererEventListener
instances intoMidiRenderer
.play-services-cast-framework
dependency to 21.5.0 to fix aFLAG_MUTABLE
crash in apps targeting API 34+ on devices with GooglePlay services installed but disabled
(#2178).
demo-compose
with additional buttons and enhancePlayerSurface
integration with scaling and shutter support.AudioMixer.create()
method. UseDefaultAudioMixer.Factory().create()
instead.Transformer.Builder
methods:setTransformationRequest()
, usesetAudioMimeType()
,setVideoMimeType()
, andsetHdrMode()
instead.setAudioProcessors()
, set the audio processor in anEditedMediaItem.Builder.setEffects()
, and pass it toTransformer.start()
instead.setVideoEffects()
, set video effect in anEditedMediaItem.Builder.setEffects()
, and pass it toTransformer.start()
instead.setRemoveAudio()
, useEditedMediaItem.Builder.setRemoveAudio()
to remove the audio from the
EditedMediaItem
passed toTransformer.start()
instead.setRemoveVideo()
, useEditedMediaItem.Builder.setRemoveVideo()
to remove the video from the
EditedMediaItem
passed toTransformer.start()
instead.setFlattenForSlowMotion()
, useEditedMediaItem.Builder.setFlattenForSlowMotion()
to flatten theEditedMediaItem
passed toTransformer.start()
instead.setListener()
, useaddListener()
,removeListener()
orremoveAllListeners()
instead.Transformer.Listener
methods:onTransformationCompleted(MediaItem)
, useonCompleted(Composition, ExportResult)
instead.onTransformationCompleted(MediaItem, TransformationResult)
, useonCompleted(Composition, ExportResult)
instead.onTransformationError(MediaItem, Exception)
, useonError(Composition, ExportResult, ExportException)
instead.onTransformationError(MediaItem, TransformationException)
, useonError(Composition, ExportResult, ExportException)
instead.onTransformationError(MediaItem, TransformationResult, TransformationException)
, useonError(Composition, ExportResult, ExportException)
instead.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
, useonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
instead.TransformationResult
class. UseExportResult
instead.
TransformationException
class. UseExportException
instead.
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
. UseTransformer.PROGRESS_STATE_NOT_STARTED
instead.Transformer.setListener()
. UseTransformer.addListener()
,Transformer.removeListener()
orTransformer.removeAllListeners()
instead.Transformer.startTransformation()
. UseTransformer.start(MediaItem, String)
instead.SingleFrameGlShaderProgram
. UseBaseGlShaderProgram
instead.Transformer.flattenForSlowMotion
. UseEditedMediaItem.flattenForSlowMotion
instead.ExoPlayer.VideoComponent
,ExoPlayer.AudioComponent
,ExoPlayer.TextComponent
andExoPlayer.DeviceComponent
.androidx.media3.exoplayer.audio.SonicAudioProcessor
.DownloadHelper
methods:DownloadHelper(MediaItem, @​Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
, useDownloadHelper(MediaItem, @​Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
instead.getRendererCapabilities(RenderersFactory)
, equivalentfunctionality can be achieved by creating a
DefaultRendererCapabilitiesList
with aRenderersFactory
, andcalling
DefaultRendererCapabilitiesList.getRendererCapabilities()
.PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
method. Use
PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
andpass in
(MediaSession.Token) compatToken.getToken()
instead.google/desugar_jdk_libs (com.android.tools:desugar_jdk_libs)
v2.1.5
Stream.toList()
, which was added in JDK-16 and Android 14(API level 34).
Configuration
📅 Schedule: Branch creation - "* 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.