- Common library:
- Promote
Player.mute()andPlayer.unmute()fromUnstableApito stable. - Promote
Format.pcmEncodingandC.PcmEncodingfromUnstableApito stable. - Add
Format.primaryTrackGroupIdto identify the primary group of embeddedFormatinstances (#294).
- 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()in 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 a bug where
ProgressiveMediaSourcepropagates out-of-date timeline info to the player, and the queued periods unexpectedly get removed (#3016). - Fix issue where ExoPlayer would not request delayed audio focus when playback is requested during phone calls.
- Fix bug where transitions from on-demand to live content may cause re-buffers at the end of the on-demand content (#3052).
- Add support for Dolby Vision Profile 10 (#2830).
- Fix bug where an uninitialized pre roll ad produced an
ArrayIndexOutOfBoundsException(#3125).
- 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().
- Track selection:
- Change signature of
DefaultTrackSelector.selectAllTracksto include the output array as a parameter, pre-populated with track overrides. - Fix issue where embedded metadata tracks are selected irrespective of whether the corresponding primary track is selected (#294).
- Stabilize
TrackSelectionParametersoptions forpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsandselectTextByDefault.
- Change signature of
- Extractors:
- MP4: Support files with large
uuidboxes before other boxes likemoov(#3046). - MP4: Add support for Versatile Video Coding (VVC) tracks in MP4 containers.
- MP4: Support files with large
- Inspector:
- Breaking change: remove
FrameExtractor. Users should now depend on the new:media3-inspector-framemodule and update imports toandroidx.media3.inspector.frame.FrameExtractor. - Introduce a new module for extracting and processing decoded video frames.
- Breaking change: remove
- Audio:
- Change underlying decoding library for the 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). - Improve the retry logic of
AudioOutputinitialization inDefaultAudioSink(#2905). - Attempt to match the output layout of the speakers (or Spatializer if applicable) when decoding IAMF, both with the IAMF extension and media codec decoders, supported by new fields and logic in AudioCapabilities and AudioCapabilitiesReceiver.
- Fix bug where playback gets stuck when playing a playlist of gapless audio in compressed offload mode.
- Change underlying decoding library for the IAMF decoder extension from
- Text:
- VobSub: Use
STARTandSTOPSPU control commands to derive cue duration instead of always defaulting to 5 seconds (#2935).
- VobSub: Use
- Metadata:
- Increase default count of metadata renderers to four to cover all potential metadata tracks published by HLS variants and renditions (#3043).
- Effect:
- Move
LottieOverlayto a new:media3-effect-lottiemodule (which also involved renaming it fromandroidx.media3.effect.LottieOverlaytoandroidx.media3.effect.lottie.LottieOverlay).
- Move
- Effect Lottie:
- Introduce a new
:media3-effect-lottiemodule which provides functionality for applying lottie effects to video frames.
- Introduce 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.
- Fix a bug 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.
- Add
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 want to join the alpha testing group, please reach out to your account partner.
- Session:
- Fix a bug where large arrays in
MediaMetadata.artworkDatacan crash the app. - Use type int for
@Player.Commandargument in theActionFactoryinterface (#2933). - Make
MediaSessionServiceandMediaLibraryServiceaLifecycleService, allowing to attach lifecycle-aware operations to the service's lifecycle (#187). - Stop supporting device volume change commands from
MediaControllerandMediaBrowserfor local playbacks. Apps shouldn't 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 a 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 'AUTO' and 'SEEK' (#2997).
- Fix issue where system UI button placement workaround negatively affects other UI surface like Android Auto or manufacturers not needing the workaround (#3041).
- Fix issue where access to subscriptions was not synchronized (#3056).
- Workaround SysUI bug on API 29 where media session artwork in a particular size can crash SysUI and force the device to reboot (#3118).
- Fix a 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
PlayerComposable tomedia3-ui-compose-material3which combines aContentFramewith customizable controls aligned to top, center, and bottom. - Hide playback position from the accessibility service to prevent continuous announcement update when
PlayerControlViewis visible.
- Add
- HLS extension:
- Support X-PLAYOUT-LIMIT with HLS interstitials (#2484).
- Support the
QUERYPARAMattribute with#EXT-X-DEFINE(#1854). - Optimize HLS playlist parsing by caching regular expression matchers (#3008).
- Expose ID3 (EMSG) metadata track in audio renditions (#3043).
- Allow location fallback upon encountering load errors, if redundant streams from different locations are available (#1988).
- Fix X-SNAP behaviour for HLS interstitials to correctly calculate start and resumption position (#3013).
- DASH extension:
- RTSP extension:
- Fixed regression in H.264 and H.265 streaming that would incorrectly parse samples of the same access unit that spanned multiple RTP packets. This resulted in visual artifacts and corruption in the video (#3121).
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Add MPEG-H UI manager support to the MPEG-H decoder extension (#3066).
- Cast extension:
- Add
RemoteCastPlayer.Builder#setTrackSelectormethod that enables the implementation of track selection for Cast playbacks.
- Add
- Remove deprecated symbols:
- Remove
ExperimentalFrameExtractor. Useandroidx.media3.inspector.frame.FrameExtractorinstead. - Remove
ChannelMixingMatrix.create(). UseChannelMixingMatrix.createForConstantGain()instead. - Remove
androidx.media3.extractor.metadata.flac.VorbisComment. Useandroidx.media3.extractor.metadata.vorbis.VorbisCommentinstead. - Remove
MediaSource.prepareSource(MediaSourceCaller, TransferListener). UseMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)instead.
- Remove