Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThe Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Poem
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Join our Discord community for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
a46f681 to
851f266
Compare
851f266 to
2788634
Compare
2788634 to
08fa14f
Compare
08fa14f to
6017716
Compare
6017716 to
0087027
Compare
8e1f0fd to
864233d
Compare
07e918a to
c22721f
Compare
c22721f to
0acb946
Compare
6df765b to
a4160af
Compare
a4160af to
dda1ea5
Compare
This PR contains the following updates:
1.7.1→1.10.01.7.1→1.10.01.7.1→1.10.01.7.1→1.10.0Release Notes
androidx/media (androidx.media3:media3-ui)
v1.10.0Compare Source
This release includes the following changes since
1.9.1 release:
Player.mute()andPlayer.unmute()fromUnstableApitostable.
Format.pcmEncodingandC.PcmEncodingfromUnstableApitostable.
Format.primaryTrackGroupIdto identify the primary group ofembedded
Formatinstances(#294).
AdsMediaSource.MediaCodecVideoRenderertobetter align scheduling work and CPU wake-cycles to when video frames
can be processed. You can enable this using
experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()inthe
DefaultRenderersFactory.DataSource.FactoryinDefaultPreloadManager.Builder.ExoPlayerto be mocked without Robolectric by moving somedefault constants to
ExoPlayer.Builder. Mocking this complex interfaceis not generally encouraged - only when the usage is
minimal/simple/incidental
(#2985).
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSfrom
ExoPlayertoExoPlayer.Builder(without deprecation).ProgressiveMediaSourcepropagates out-of-date timelineinfo to the player, and the queued periods unexpectedly get removed
(#3016).
playback is requested during phone calls.
re-buffers at the end of the on-demand content
(#3052).
(#2830).
ArrayIndexOutOfBoundsException(#3125).
EditedMediaItem.removeVideo.EditedMediaItem.Builder.setFrameRate()can now set a maximum outputframe rate for video, which is particularly helpful when increasing
media speed with
setSpeed().DefaultTrackSelector.selectAllTracksto includethe output array as a parameter, pre-populated with track overrides.
whether the corresponding primary track is selected
(#294).
TrackSelectionParametersoptions forpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsandselectTextByDefault.uuidboxes before other boxes likemoov(#3046).containers.
FrameExtractor. Users should now depend on thenew
:media3-inspector-framemodule and update imports toandroidx.media3.inspector.frame.FrameExtractor.frames.
libiamftoiamf_tools.using the IAMF decoder extension) or through the Android Spatializer.
AC4Profile22and other legacy profileswhen assessing AC-4 decoder support in Automotive scenarios
(#2609).
AudioOutputinitialization inDefaultAudioSink(#2905).
AudioOutputinitialization inDefaultAudioSink(#2905).
applicable) when decoding IAMF, both with the IAMF extension and media
codec decoders, supported by new fields and logic in AudioCapabilities
and AudioCapabilitiesReceiver.
audio in compressed offload mode.
STARTandSTOPSPU control commands to derive cueduration instead of always defaulting to 5 seconds
(#2935).
potential metadata tracks published by HLS variants and renditions
(#3043).
LottieOverlayto a new:media3-effect-lottiemodule (which alsoinvolved renaming it from
androidx.media3.effect.LottieOverlaytoandroidx.media3.effect.lottie.LottieOverlay).:media3-effect-lottiemodule which providesfunctionality for applying lottie effects to video frames.
latest Ad media info API.
the IMA LOADED event. The fix now maps the ad MIME type using the ad
media info provided by IMA.
setEnableCustomTabstoImaAdsLoaderandImaServerSideAdInsertionMediaSource, allowing users to control whetherad click-through URLs are launched using Custom Tabs.
ImaAdTagUriBuilder, a class that offers an alternative way toconstruct an
adTagUri. It contains thesetPreferredLinearOrientationAPI. This is an API in alpha testing that will allow you to set your
preferred orientation for linear ads. If you want to join the alpha
testing group, please reach out to your account partner.
MediaMetadata.artworkDatacan crashthe app.
@Player.Commandargument in theActionFactoryinterface (#2933).
MediaSessionServiceandMediaLibraryServiceaLifecycleService, allowing to attach lifecycle-aware operations to theservice's lifecycle
(#187).
MediaControllerandMediaBrowserfor local playbacks. Apps shouldn't change the localdevice volume, and if required, can use
AudioManagerAPIs for thispurpose.
Intentinstances that started the service as a foregroundservice. This prevents a
ForegroundServiceDidNotStartInTimeExceptionbeing thrown by the system. This is a breaking change on an unstable API
for apps implementing a custom
MediaNotification.Provideras there isa new required method.
PendingIntentinstances to be used with home screenwidgets (#2933).
Intentinstances for Compose-basedhome screen widgets
(#2933).
when playback transitioned from a given media item index to another with
the same media item for discontinuity reason 'AUTO' and 'SEEK'
(#2997).
other UI surface like Android Auto or manufacturers not needing the
workaround (#3041).
(#3056).
particular size can crash SysUI and force the device to reboot
(#3118).
PlaybackSpeedControlComposable tomedia3-ui-composefordisplaying and modifying playback speed.
PlaybackSpeedToggleButtonComposable tomedia3-ui-compose-material3for controlling playback speed.ProgressSliderComposable tomedia3-ui-compose-material3fordisplaying player progress and performing seeks using dragging and
tapping (#2288).
PlayerComposable tomedia3-ui-compose-material3which combinesa
ContentFramewith customizable controls aligned to top, center, andbottom.
continuous announcement update when
PlayerControlViewis visible.(#2484).
QUERYPARAMattribute with#EXT-X-DEFINE(#1854).
(#3008).
(#3043).
streams from different locations are available
(#1988).
and resumption position
(#3013).
or missed samples at the beginning of playback
(#3057).
correctly (#3024).
parse samples of the same access unit that spanned multiple RTP packets.
This resulted in visual artifacts and corruption in the video
(#3121).
(#3066).
RemoteCastPlayer.Builder#setTrackSelectormethod that enables theimplementation of track selection for Cast playbacks.
ExperimentalFrameExtractor. Useandroidx.media3.inspector.frame.FrameExtractorinstead.ChannelMixingMatrix.create(). UseChannelMixingMatrix.createForConstantGain()instead.androidx.media3.extractor.metadata.flac.VorbisComment. Useandroidx.media3.extractor.metadata.vorbis.VorbisCommentinstead.MediaSource.prepareSource(MediaSourceCaller, TransferListener).Use
MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)instead.v1.9.3Compare Source
v1.9.2Compare Source
This release includes the following changes since
1.9.1 release:
ProgressiveMediaSourcepropagates out-of-date timelineinfo to player and the queued periods unexpectedly get removed
(#3016).
other UI surface like Android Auto or manufacturers not needing the
workaround (#3041).
v1.9.1Compare Source
This release includes the following changes since
1.9.0 release:
(#2929).
doSomeWorkinterval only after audiostarts to support smoother A/V sync at beginning of playback.
DefaultLoadErrorHandlingPolicywhereFileNotFoundExceptionand similar exception types were retriedmultiple times.
doSomeWorkwas mistakenly reduced by the elapsed time of the currentiteration of
doSomeWork. Addressing this hopefully extends CPU idletime and saves power.
attempting to use a fallback AVC or HEVC codec.
currently playing item from a playlist
(#2873).
MediaIteminstances when repeatedly usingExoPlayer.replaceMediaItemon the same item(#2993).
(#2979).
(#2840).
AC4Profile22and other legacy profileswhen assessing AC-4 decoder support in Automotive scenarios
(#2609).
changes to avoid stuttering playback
(#2941).
either contain only a single control sequence, or have critical info
split across multiple control sequences
(#2935).
MIME type provided in the IMA LOADED event. The fix now maps the ad MIME
type using the ad pod index and ad position.
getAdsManager()andAdEvent.getAd().MediaControllerconnected to a platformsession crashed the app if stop happened during ad playback
(#2948).
extrasBundleinstances in variousclasses to guard against malformed
Bundleinstances sent from otherprocesses.
COMMAND_SEEK_NEXTorCOMMAND_SEEK_BACKcan cause gaps in the system media notification(#2976).
(#2829).
when converting from legacy
MediaMetadataCompatandMediaDescriptionCompat(#3018).
PriorityTooLowExceptionis handledby
SegmentDownloader(for DASH, HLS and SmoothStreaming). Customoverrides of
SegmentDownloaderusing the protectedexecutemethodneed to provide their task wrapped in a
Supplierso it can berecreated (#2931).
Listener.onAssetListLoadCompletedcallback. This is a breaking changein an unstable API that requires apps that implement this callback to
add an additional argument of type
JSONObject(#2950).
(#2930).
NullPointerExceptionthat can occur when seeking priorto processing the first video frame
(#2965).
RemoteCastPlayertimeline from updatingcorrectly when replacing the playlist.
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.receiver's media queue from "QUEUE_LOAD" to "LOAD"
(CAF docs).
This may affect receiver applications' relying on a specific message
format to load the media queue
(#3080).
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).
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.