- Common Library:
- Promote
Player.mute()andPlayer.unmute()from UnstableApi to stable. - Promote
Format.pcmEncodingandC.PcmEncodingfrom UnstableApi to stable.
- Promote
- ExoPlayer:
- Add clipping capabilities to
AdsMediaSource. - Add support for dynamic scheduling in
MediaCodecVideoRendererto better align scheduling work and CPU wake-cycles to when video frames can be processed. You can enable this usingexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()via theDefaultRenderersFactory. - Allow setting a custom
DataSource.FactoryinDefaultPreloadManager.Builder. - Allow
ExoPlayerto be mocked without Robolectric by moving some default constants toExoPlayer.Builder. Mocking this complex interface is not generally encouraged - only when the usage is minimal/simple/incidental (#2985).- This required moving
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSfromExoPlayertoExoPlayer.Builder(without deprecation).
- This required moving
- Fix bug where
ProgressiveMediaSourcepropagates out-of-date timeline info to player and the queued periods unexpectedly get removed (#3016).
- Add clipping capabilities to
- CompositionPlayer:
- Add support for
EditedMediaItem.removeVideo.
- Add support for
- Transformer:
EditedMediaItem.Builder.setFrameRate()can now set a maximum output frame rate for video, which is particularly helpful when increasing media speed withsetSpeed().
- Inspector:
- Breaking change: Removed
FrameExtractor. Users should now depend on the new:media3-inspector-framemodule and update imports toandroidx.media3.inspector.frame.FrameExtractor.
- Breaking change: Removed
- Inspector Frame:
- Introduced a new module for extracting and processing decoded video frames.
- Audio:
- Change underlying decoding library for IAMF decoder extension from
libiamftoiamf_tools. - IAMF decoding supports binaural output either through the decoder (when using the IAMF decoder extension) or through the Android Spatializer.
- Correctly remove support for
AC4Profile22and other legacy profiles when assessing AC-4 decoder support in Automotive scenarios (#2609). - Improve the retry logic of
AudioOutputinitialization inDefaultAudioSink(#2905).
- Change underlying decoding library for IAMF decoder extension from
- Text:
- VobSub: Use
STARTandSTOPSPU control commands to derive cue duration instead of always defaulting to 5s (#2935).
- VobSub: Use
- Effect:
- Moved
LottieOverlayto a new:media3-effect-lottiemodule (which also involved renaming it fromandroidx.media3.effect.LottieOverlaytoandroidx.media3.effect.lottie.LottieOverlay).
- Moved
- Effect Lottie:
- Introduced a new
:media3-effect-lottiemodule which provides functionality for applying lottie effects to video frames.
- Introduced a new
- IMA extension:
- Update the IMA SDK version to 3.39.0 in order to have access to the latest Ad media info API.
- Bug fix: Corrected an issue where the ad MIME type did not match the MIME type provided in the IMA LOADED event. The fix now maps the ad MIME type using the ad media info provided by IMA.
- Added
setEnableCustomTabstoImaAdsLoaderandImaServerSideAdInsertionMediaSource, allowing users to control whether ad click-through URLs are launched using Custom Tabs. - Add the
ImaAdTagUriBuilder, a class that offers an alternative way to construct anadTagUri. It contains thesetPreferredLinearOrientationAPI. This is an API in alpha testing that will allow you to set your preferred orientation for linear ads. If you wish to join the alpha testing group, please reach out to your account partner.
- Session:
- Fix bug where large arrays in
MediaMetadata.artworkDatacan crash the app. - Use type int for
@Player.Commandargument in theActionFactoryinterface (#2933). - Make
MediaSessionServiceandMediaLibraryServiceaLifecycleService, more easily allowing to attach lifecycle-aware operations to the service's lifecycle (#187). - Stop supporting device volume change commands from
MediaControllerandMediaBrowserfor local playbacks. Apps should not change the local device volume, and if required, can useAudioManagerAPIs for this purpose. - Detect stale
Intentinstances that started the service as a foreground service. This prevents aForegroundServiceDidNotStartInTimeExceptionbeing thrown by the system. This is a breaking change on an unstable API for apps implementing a customMediaNotification.Provideras there is a new required method. - Add builders for
PendingIntentinstances to be used with home screen widgets (#2933). - Add static methods for creating
Intentinstances for Compose-based home screen widgets (#2933). - Fix bug where the media item transition wasn't reported to controllers when playback transitioned from a given media item index to another with the same media item for discontinuity reason
AUTOandSEEK(#2997).
- Fix bug where large arrays in
- UI:
- Add
PlaybackSpeedControlComposable tomedia3-ui-composefor displaying and modifying playback speed. - Add
PlaybackSpeedToggleButtonComposable tomedia3-ui-compose-material3for controlling playback speed. - Add
ProgressSliderComposable tomedia3-ui-compose-material3for displaying player progress and performing seeks using dragging and tapping (#2288). - Avoid large offscreen buffer in animating PlayerControlView.
- Add
- HLS extension:
- Cast extension:
- Add
RemoteCastPlayer.Builder#setTrackSelectormethod that enables the implementation of track selection for Cast playbacks.
- Add
- Remove deprecated symbols:
- Removed
ExperimentalFrameExtractor. Useandroidx.media3.inspector.frame.FrameExtractorinstead. - Removed
ChannelMixingMatrix.create(). UseChannelMixingMatrix.createForConstantGain()instead.
- Removed