February 6, 2026
Version 1.9.2 contains the following commits.
ProgressiveMediaSource propagates out-of-date timeline info to player and the queued periods unexpectedly get removed (#3016).February 6, 2026
Version 1.10.0-alpha01 contains the following commits.
Player.mute() and Player.unmute() from UnstableApi to stable.Format.pcmEncoding and C.PcmEncoding from UnstableApi to stable.AdsMediaSource.MediaCodecVideoRenderer to better align scheduling work and CPU wake-cycles to when video frames can be processed. You can enable this using experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs() in the DefaultRenderersFactory.DataSource.Factory in DefaultPreloadManager.Builder.ExoPlayer to be mocked without Robolectric by moving some default constants to ExoPlayer.Builder. Mocking this complex interface is not generally encouraged - only when the usage is minimal/simple/incidental (#2985).
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS from ExoPlayer to ExoPlayer.Builder (without deprecation).ProgressiveMediaSource propagates out-of-date timeline info to the player, and the queued periods unexpectedly get removed (#3016).EditedMediaItem.removeVideo.EditedMediaItem.Builder.setFrameRate() can now set a maximum output frame rate for video, which is particularly helpful when increasing media speed with setSpeed().FrameExtractor. Users should now depend on the new :media3-inspector-frame module and update imports to androidx.media3.inspector.frame.FrameExtractor.libiamf to iamf_tools.AC4Profile22 and other legacy profiles when assessing AC-4 decoder support in Automotive scenarios (#2609).AudioOutput initialization in DefaultAudioSink (#2905).START and STOP SPU control commands to derive cue duration instead of always defaulting to 5 seconds (#2935).LottieOverlay to a new :media3-effect-lottie module (which also involved renaming it from androidx.media3.effect.LottieOverlay to androidx.media3.effect.lottie.LottieOverlay).:media3-effect-lottie module which provides functionality for applying lottie effects to video frames.setEnableCustomTabs to ImaAdsLoader and ImaServerSideAdInsertionMediaSource, allowing users to control whether ad click-through URLs are launched using Custom Tabs.ImaAdTagUriBuilder, a class that offers an alternative way to construct an adTagUri. It contains the setPreferredLinearOrientation API. 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.artworkData can crash the app.@Player.Command argument in the ActionFactory interface (#2933).MediaSessionService and MediaLibraryService a LifecycleService, allowing to attach lifecycle-aware operations to the service's lifecycle (#187).MediaController and MediaBrowser for local playbacks. Apps shouldn't change the local device volume, and if required, can use AudioManager APIs for this purpose.Intent instances that started the service as a foreground service. This prevents a ForegroundServiceDidNotStartInTimeException being thrown by the system. This is a breaking change on an unstable API for apps implementing a custom MediaNotification.Provider as there is a new required method.PendingIntent instances to be used with home screen widgets (#2933).Intent instances for Compose-based home screen widgets (#2933).PlaybackSpeedControl Composable to media3-ui-compose for displaying and modifying playback speed.PlaybackSpeedToggleButton Composable to media3-ui-compose-material3 for controlling playback speed.ProgressSlider Composable to media3-ui-compose-material3 for displaying player progress and performing seeks using dragging and tapping (#2288).RemoteCastPlayer.Builder#setTrackSelector method that enables the implementation of track selection for Cast playbacks.ExperimentalFrameExtractor. Use androidx.media3.inspector.frame.FrameExtractor instead.ChannelMixingMatrix.create(). Use ChannelMixingMatrix.createForConstantGain() instead.