fix(deps): update androidx.media3 to v1.9.0 #1724
Open
+1
−1
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:
1.7.1→1.9.01.7.1→1.9.01.7.1→1.9.01.7.1→1.9.01.7.1→1.9.01.7.1→1.9.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
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.v1.8.0Compare Source
This release includes the following changes since the
1.7.1 release:
ForwardingSimpleBasePlayer.ExoPlayerinterface(#2522).
DefaultAudioSinkis accessed frommultiple threads. If this happens due to a call to
RendererCapabilities.getFormatSupportoutside of the player, make sureto call this method on the same thread as ExoPlayer's playback thread or
use a different instance than the one used for playback
(#1191).
unsupported by
DefaultTrackSelector.DECODE_ONLYflag (which is enabled by default in scrubbing mode).Contextpassed toExoPlayer.Builder.MediaCodec.BUFFER_FLAG_DECODE_ONLYby default in scrubbing mode.IllegalStateExceptionwhenPreloadMediaSourceis played by anExoPlayerwith a playback thread that is different than the preloadthread (#2495).
cloneAndMovetoShuffleModewith a default implementation(#2226).
Renderer.getMinDurationToProgressUstoreturn a larger value if no call to
renderis required.end while paused. For now, the bug fix only takes effect if
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledis enabled.ExoPlayer.setScrubbingModeEnabled(boolean)method. This optimizesthe 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(..)onExoPlayerandExoPlayer.Builder.AdsMediaSourcemay benever reported (#2337).
MergingMediaSource, for example used whensideloading subtitles
(#2338).
CmcdConfiguration.Factoryto returnnullto disable CMCDlogging for specific media items
(#2386).
text tracks) to 26MB, which is large enough for 50MP Ultra HDR images
(#2417).
PreCacheHelperthat allows apps to pre-cache a single media withspecified start position and duration.
DefaultPreloadManager.CodecDbLitethat enables chipset specific optimizations of videoencoding settings.
setEnableCodecDbLiteflag to theDefaultEncoderFactoryto enableCodecDB Lite settings optimization. By default, this flag is set to
false.
addGap()) with silent audio nowrequires explicitly setting
experimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builder. If the gap is in the middle of thesequence, then this flag is not required.
Muxerinterface frommedia3-transformertomedia3-muxer.MediaItem.Builder().setImageDuration(long)mandatory toimport a media item as an image.
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.
custom
VideoCompositorSettingsto arrange sequences into a 2x2 or PiPlayout.
(#2084).
(#2552).
sidxatoms.This behavior can be enabled using the
FLAG_MERGE_FRAGMENTED_SIDXflagon
FragmentedMp4Extractor(#9373).
placeholder seek points), and fall back to binary search seeking if the
duration of the file is known
(#2327).
(#2456).
WavExtractorto use the header extension's SubFormat data forthe audio format when parsing a
WAVE_FORMAT_EXTENSIBLEtype file.ipcmandfpcmboxes defining raw PCM audiotracks (64-bit floating point PCM is not supported).
tkhdtransformation matrices thatboth 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).
variable bitrate metadata when falling back to constant bitrate seeking
due to
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
AnalyticsListener.onAudioPositionAdvancingis not calledwhen the audio playback is started very close to the end of the media.
ChannelMappingAudioProcessorandTrimmingAudioProcessor.CompositionPlayer.BaseAudioProcessor#flush()fromBaseAudioProcessor#reset().ChannelMappingAudioProcessor,TrimmingAudioProcessorandToFloatPcmAudioProcessorpublic(#2339).
AudioTrack#getUnderrunCount()inAudioTrackPositionTrackertodetect underruns in
DefaultAudioSinkinstead of best-effortestimation.
audio output device.
from pause when connected to Bluetooth devices.
AnalyticsListener.onAudioPositionAdvancingwas notreporting the time when the audio started advancing but the time of the
first measurement.
some devices (#2258).
(#2059).
start at exactly the requested position.
(#2059).
ExoPlayerAPI to include theMediaCodec.BUFFER_FLAG_DECODE_ONLYflag when queuing decode-only inputbuffers. This flag will signal the decoder to skip the decode-only
buffers thereby resulting in faster seeking. Enable it with
DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag.lead to some additional tracks being marked as
EXCEEDS_CAPABILITIES.(#2408).
(#2510).
later loads successfully, followed by several empty subtitle segments
(#2517).
(#2309).
error to a live stream with an empty subtitle track
(#2328).
B-frames (#2372).
CodecId = S_TEXT/SSAin Matroskafiles. Previously
MatroskaExtractoronly supportedCodecId = S_TEXT/ASSwhich is meant to represent the 'advanced' (v4+) variant ofSubStation Alpha subtitles (but ExoPlayer's parsing logic is the same
for both variants)
(#2384).
layerproperty in SubStation Alpha (SSA) subtitlefiles which is used to define the z-order of cues when more than one is
shown on screen at the same time
(#2124).
TimelinetoMetadataRetrieverand migrated it to an instance-based,AutoCloseableAPI. Use the newBuilderto create an instance for aMediaItem, then callretrieveTrackGroups(),retrieveTimeline(),and
retrieveDurationUs()to getListenableFutures for the metadata.The previous static methods are now deprecated
(#2462).
BitmapFactoryImageDecoder, to avoid an app crashing withCanvas: trying to draw too large bitmap.fromPlayerViewwhen trying todisplay very large (e.g. 50MP) images.
DefaultRenderersFactory.getImageDecoderFactory()to take aContextparameter.
CompositionPlayerwith thatalready used in
Transformer(meaningCompositionPlayerdoes notconsider the display size when decoding bitmaps, unlike
ExoPlayer).OfflineLicenseHelper.newWidevineInstanceacceptinga
MediaItem.DrmConfigurationso that HTTP request headers can beapplied correctly
(#2169).
Presentation.createForShortSide(int)that creates aPresentationthat ensures the shortest side always matches the given value,
regardless of input orientation.
fragmented MP4.
writeSampleData()API now uses muxer specificBufferInfoclassinstead of
MediaCodec.BufferInfo.Muxer.Factory#supportsWritingNegativeTimestampsInEditListwhichdefaults to false.
another ad group.
Ads groups with a start time after the window are not enqueued into the
MediaPeriodQueueanymore(#2215).
controllers are ignored.
legacy
MediaBrowserServiceCompat. This is in parity with the behaviorof legacy controllers/browsers when connected to a legacy app.
treated as a persistent custom exception. This prevents the application
from recovering.
session may cause
IllegalStateExceptions.leave the controller in an invalid state.
(#2330).
setSessionExtrasfrom the main thread whenrunning the player from a different application thread then the main
thread caused an
IllegalStateException(#2265).
items without preparing or playing them
(#2423#2423). This behavior
is configurable via
MediaSessionService.setShowNotificationForIdlePlayer.PlaybackExceptionfor all or selected controllers.MediaControllercan causean
IllegalArgumentException.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).
getLibraryRootof aMediaBrowserconnected to a legacy
MediaBrowserServiceCompatproduced aNullPointerException.request crashed the legacy session app with a
ClassNotFoundException.MediaItem.LocalConfiguration.uriwas shared to theplatform sessions's
MediaMetadata. To intentionally share a URI toallow controllers to re-request the media, set
MediaItem.RequestMetadata.mediaUriinstead.PlayerSurfaceinside re-usable components likeLazyColumndidn't work correctly(#2493).
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).
media3-ui-composemodule forSeekBackButtonStateandSeekForwardButtonState.PlayerControlView. Whenenabled, this puts the player into scrubbing mode when the user starts
dragging the scrubber bar, issues a
player.seekTocall for everymovement, and then exits scrubbing mode when the touch is lifted from
the screen. This integration can be enabled with either
time_bar_scrubbing_enabled = truein XML or thesetTimeBarScrubbingEnabled(boolean)method from Java/Kotlin.PlayerSurfaceaccept a nullablePlayerargument.progressive stream with
DownloadHelper, and request aDownloadRequestfrom the helper with specifying the time-based mediastart and end positions that the download should cover. The returned
DownloadRequestcarries the resolved byte range, with which aProgressiveDownloadercan be created and download the contentcorrespondingly.
DownloadHelper.Factorywith which the staticDownloadHelper.forMediaItem()methods are replaced.FactoryforSegmentDownloaderimplementations.adaptive stream with
DownloadHelper, and request aDownloadRequestfrom the helper with specifying the time-based media start and end
positions that the download should cover. The returned
DownloadRequestcarries the resolved time range, with which a concrete
SegmentDownloadercan be created and download the contentcorrespondingly.
(#5975).
HlsSampleStreamWrapperattempts to seek inside bufferwhen there are no chunks available in the buffer
#2598.
and preload hints can cause playback to get stuck or freeze
(#2299).
CAN-BLOCK-RELOAD=YESis not honored by the server(#2317).
before a mid roll and asset list resolution was attempted for the wrong
ad (#2558).
\f(form feed) in quoted stringattribute values
(#2420).
(#2427).
live stream runs out of segments to load
(#2401#2401).
are grouped already
(#1666).
HlsInterstitialsAdsLoader.adaptation set to form an invalid
TrackGroup(#2148).
when samples beyond the new duration have already been read by the
rendering pipeline
(#2440).
(#2475).
7798#4.4.2 (#2413).
RtspClientto use the location uri as provided when processing anHTTP 302 response
(#2398).
trailing whitespace characters
(#2357).
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangehas no effect for audio decoder extensions
(#2258).
setVolume(), andgetVolume()(#2279).
empty.
getDeviceVolume(),setDeviceVolume(),getDeviceMuted(), andsetDeviceMuted()(#2089).
advance(player).untilPositionAtLeastanduntilMediaItemIndextoTestPlayerRunHelperin order to advance the player until a specifiedposition is reached. In most cases, these methods are more reliable than
the existing
untilPositionanduntilStartOfMediaItemmethods.FakeDownloadertotest-utils-robolectricmodule for reuse inother tests.
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...), andtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). UseShadowMediaCodecConfigto configure shadow encodersand decoders instead.
ShadowMediaCodecConfig.SegmentDownloaderconstructorSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)and the corresponding constructors in its subclassesDashDownloader,HlsDownloaderandSsDownloader.Player.hasNext(),Player.hasNextWindow(). UsePlayer.hasNextMediaItem()instead.Player.next(). UsePlayer.seekToNextMediaItem()instead.
Player.seekToPreviousWindow(). UsePlayer.seekToPreviousMediaItem()instead.Player.seekToNextWindow(). UsePlayer.seekToNextMediaItem()instead.BaseAudioProcessorinexoplayermodule. UseBaseAudioProcessorundercommonmodule.MediaCodecVideoRendererconstructorMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @​Nullable Handler, @​Nullable VideoRendererEventListener, int, float, @​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.
This PR was generated by Mend Renovate. View the repository job log.