Releases: androidx/media
Releases · androidx/media
1.8.0-beta01
This release includes the following changes since the 1.8.0-alpha01 release:
- Common Library:
- Add support for replacing the player in
ForwardingSimpleBasePlayer.
- Add support for replacing the player in
- ExoPlayer:
- Add support for using the virtual device ID from the
Contextpassed toExoPlayer.Builder. - Enable dynamic scheduling by default in scrubbing mode.
- Avoid unnecessary reload of a source when seeking to the end of an item.
- Use
MediaCodec.BUFFER_FLAG_DECODE_ONLYby default in scrubbing mode. - Throw
IllegalStateExceptionwhenPreloadMediaSourceis played by anExoPlayerwith a playback thread that is different than the preload thread (#2495). - Add
cloneAndMovetoShuffleModewith a default implementation (#2226). - Change default behavior of
Renderer.getMinDurationToProgressUsto return a larger value if no call torenderis required. - Fix bug where internal scheduling delayed last frame when seeking to the end while paused. For now, the bug fix only takes effect if
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledis enabled.
- Add support for using the virtual device ID from the
- Transformer:
- Add
CodecDbLitethat enables chipset specific optimizations of video encoding settings. - Add
setEnableCodecDbLiteflag to theDefaultEncoderFactoryto enable CodecDB Lite settings optimization. By default, this flag is set to false.
- Add
- Extractors:
- Add support for seeking in fragmented MP4 with multiple
sidxatoms. This behavior can be enabled using theFLAG_MERGE_FRAGMENTED_SIDXflag onFragmentedMp4Extractor(#9373). - Ignore empty seek tables in FLAC files (including those containing only placeholder seek points), and fall back to binary search seeking if the duration of the file is known (#2327).
- Fix parsing of H.265 SEI units to fully skip unrecognized SEI types (#2456).
- Update
WavExtractorto use the header extension's SubFormat data for the audio format when parsing aWAVE_FORMAT_EXTENSIBLEtype file. - MP4: Add support for
ipcmandfpcmboxes defining raw PCM audio tracks (64-bit floating point PCM is not supported). - MP4: Handle the rotation part of
tkhdtransformation matrices that both 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).
- Add support for seeking in fragmented MP4 with multiple
- Audio:
- Add support for all linear PCM sample formats in
ChannelMappingAudioProcessorandTrimmingAudioProcessor. - Add support for audio gaps in
CompositionPlayer. - Remove spurious call to
BaseAudioProcessor#flush()fromBaseAudioProcessor#reset().
- Add support for all linear PCM sample formats in
- Video:
- Improve smooth video frame release at startup when audio samples don't start at exactly the requested position.
- Extend detached surface workaround to "realme" devices (#2059).
- Text:
- Fix a playback stall when a subtitle segment initially fails to load and later loads successfully, followed by several empty subtitle segments (#2517).
- Metadata:
- Added support for retrieving media duration and
TimelinetoMetadataRetrieverand migrated it to an instance-based,AutoCloseableAPI. Use the newBuilderto create an instance for aMediaItem, then callretrieveTrackGroups(),retrieveTimeline(), andretrieveDurationUs()to getListenableFutures for the metadata. The previous static methods are now deprecated (#2462).
- Added support for retrieving media duration and
- Image:
- Limit decoded bitmaps to the display size in
BitmapFactoryImageDecoder, to avoid an app crashing withCanvas: trying to draw too large bitmap.fromPlayerViewwhen trying to display very large (e.g. 50MP) images. - Change the signature of
DefaultRenderersFactory.getImageDecoderFactory()to take aContextparameter. - Align the max bitmap output size used in
CompositionPlayerwith that already used inTransformer(meaningCompositionPlayerdoes not consider the display size when decoding bitmaps, unlikeExoPlayer).
- Limit decoded bitmaps to the display size in
- Muxers:
- Fix a bug where correct sample flags were not set for audio samples in fragmented MP4.
- Session:
- Fix bug where calling
setSessionExtrasfrom the main thread when running the player from a different application thread then the main thread caused anIllegalStateException(#2265). - Don't automatically show a notification if a player is set up with media items without preparing or playing them (#2423#2423). This behavior is configurable via
MediaSessionService.setShowNotificationForIdlePlayer. - Add custom
PlaybackExceptionfor all or selected controllers. - Fix bug where seeking in a live stream on a
MediaControllercan cause anIllegalArgumentException. - For live streams, stop publishing a playback position and the ability to 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).
- Fix bug where calling
- Cronet extension:
- Add automatic cookie handling (#5975).
- HLS extension:
- Fix playlist parsing to accept
\f(form feed) in quoted string attribute values (#2420). - Support updating interstitials with the same ID (#2427).
- Fix bug where playlist load errors are sometimes not propagated once a live stream runs out of segments to load (#2401#2401).
- Group subtitle renditions by NAME tag, similar to how audio renditions are grouped already (#1666).
- Fix playlist parsing to accept
- DASH extension:
- RTSP extension:
- Fix
RtspClientto use the location uri as provided when processing an HTTP 302 response (#2398).
- Fix
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Fix bug where
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangehas no effect for audio decoder extensions (#2258).
- Fix bug where
- Cast extension:
- Add support for
setVolume(), andgetVolume()(#2279). - Prevent CastPlayer from entering STATE_BUFFERING while the timeline is empty.
- Add support for
- Test Utilities:
- Add
advance(player).untilPositionAtLeastanduntilMediaItemIndextoTestPlayerRunHelperin order to advance the player until a specified position is reached. In most cases, these methods are more reliable than the existinguntilPositionanduntilStartOfMediaItemmethods. - Move
FakeDownloadertotest-utils-robolectricmodule for reuse in other tests.
- Add
1.8.0-alpha01
This release includes the following changes since 1.6.1:
- ExoPlayer:
- Add
ExoPlayer.setScrubbingModeEnabled(boolean)method. This optimizes the player for many frequent seeks (for example, from a user dragging a scrubber bar around). The behavior of scrubbing mode can be customized withsetScrubbingModeParameters(..)onExoPlayerandExoPlayer.Builder. - Allow customizing fractional seek tolerance in scrubbing mode.
- Increase codec operating rate in scrubbing mode.
- Fix bug where prepare errors in the content of
AdsMediaSourcemay be never reported (#2337). - Fix memory leak in
MergingMediaSource, for example used when sideloading subtitles (#2338). - Allow
CmcdConfiguration.Factoryto returnnullto disable CMCD logging for specific media items (#2386). - Increase default image buffer size from 128kB (copy-paste mistake from text tracks) to 26MB, which is large enough for 50MP Ultra HDR images (#2417).
- Add
PreCacheHelperthat allows apps to pre-cache a single media with specified start position and duration.
- Add
- Transformer:
- Filling an initial gap (added via
addGap()) with silent audio now requires explicitly settingexperimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builder. If the gap is in the middle of the sequence, then this flag is not required. - Move
Muxerinterface frommedia3-transformertomedia3-muxer. - Make setting
MediaItem.Builder().setImageDuration(long)mandatory to import a media item as an image. - Add
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. - Update Composition Demo app to use Kotlin and Jetpack Compose, and add a custom
VideoCompositorSettingsto arrange sequences into a 2x2 or PiP layout.
- Filling an initial gap (added via
- Extractors:
- MP3: Use duration and data size from unseekable Xing, VBRI and similar variable bitrate metadata when falling back to constant bitrate seeking due to
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- MP3: Use duration and data size from unseekable Xing, VBRI and similar variable bitrate metadata when falling back to constant bitrate seeking due to
- Audio:
- Allow constant power upmixing/downmixing in DefaultAudioMixer.
- Make
ChannelMappingAudioProcessor,TrimmingAudioProcessorandToFloatPcmAudioProcessorpublic (#2339). - Use
AudioTrack#getUnderrunCount()inAudioTrackPositionTrackerto detect underruns inDefaultAudioSinkinstead of best-effort estimation. - Improve audio timestamp smoothing for unexpected position drift from the audio output device.
- Fix bug where A/V sync is broken for the first 10 seconds after resuming from pause when connected to Bluetooth devices.
- Fix bug that
AnalyticsListener.onAudioPositionAdvancingwas not reporting the time when the audio started advancing but the time of the first measurement.
- Video:
- Add experimental
ExoPlayerAPI to include theMediaCodec.BUFFER_FLAG_DECODE_ONLYflag when queuing decode-only input buffers. This flag will signal the decoder to skip the decode-only buffers thereby resulting in faster seeking. Enable it withDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Improve codec performance checks for software video codecs. This may lead to some additional tracks being marked as
EXCEEDS_CAPABILITIES. - Fix VP9 Widevine playback errors on some devices (#2408).
- Add experimental
- Text:
- Fix SSA and SubRip to display an in-progress cue when enabling subtitles (#2309).
- Fix playback getting stuck when switching from a stream with a subtitle error to a live stream with an empty subtitle track (#2328).
- Fix garbled CEA-608 subtitles when playing H.262 streams containing B-frames (#2372).
- Add support for SSA subtitles with
CodecId = S_TEXT/SSAin Matroska files. PreviouslyMatroskaExtractoronly supportedCodecId = S_TEXT/ASSwhich is meant to represent the 'advanced' (v4+) variant of SubStation Alpha subtitles (but ExoPlayer's parsing logic is the same for both variants) (#2384). - Add support for the
layerproperty in SubStation Alpha (SSA) subtitle files which is used to define the z-order of cues when more than one is shown on screen at the same time (#2124).
- Effect:
- Add
Presentation.createForShortSide(int)that creates aPresentationthat ensures the shortest side always matches the given value, regardless of input orientation.
- Add
- Muxers:
writeSampleData()API now uses muxer specificBufferInfoclass instead ofMediaCodec.BufferInfo.- Add
Muxer.Factory#supportsWritingNegativeTimestampsInEditListwhich defaults to false.
- IMA extension:
- Fix a bug where a load error in one ad may accidentally invalidate another ad group.
- Fix bug where ad groups after the end of a VOD window stalled playback. Ads groups with a start time after the window are not enqueued into the
MediaPeriodQueueanymore (#2215).
- Session:
- Fix a bug where passing null into
getLibraryRootof aMediaBrowserconnected to a legacyMediaBrowserServiceCompatproduced aNullPointerException. - Fix a bug where where sending custom actions, a search result or a getItem request crashed the legacy session app with a
ClassNotFoundException. - Fix a bug where
MediaItem.LocalConfiguration.uriwas shared to the platform sessions'sMediaMetadata. To intentionally share a URI to allow controllers to re-request the media, setMediaItem.RequestMetadata.mediaUriinstead.
- Fix a bug where passing null into
- UI:
- Fix a Compose bug which resulted in a gap between setting the initial 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).
- Add state holders and composables to the
media3-ui-composemodule forSeekBackButtonStateandSeekForwardButtonState. - Make
PlayerSurfaceaccept a nullablePlayerargument. - Add support for ExoPlayer's scrubbing mode to
PlayerControlView. When enabled, this puts the player into scrubbing mode when the user starts dragging the scrubber bar, issues aplayer.seekTocall for every movement, and then exits scrubbing mode when the touch is lifted from the screen. This integration can be enabled with eithertime_bar_scrubbing_enabled = truein XML or thesetTimeBarScrubbingEnabled(boolean)method from Java/Kotlin.
- Downloads:
- Add partial download support for progressive streams. Apps can prepare a progressive stream with
DownloadHelper, and request aDownloadRequestfrom the helper with specifying the time-based media start and end positions that the download should cover. The returnedDownloadRequestcarries the resolved byte range, with which aProgressiveDownloadercan be created and download the content correspondingly. - Add
DownloadHelper.Factorywith which the staticDownloadHelper.forMediaItem()methods are replaced. - Add
FactoryforSegmentDownloaderimplementations. - Add partial download support for adaptive streams. Apps can prepare an 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 returnedDownloadRequestcarries the resolved time range, with which a concreteSegmentDownloadercan be created and download the content correspondingly.
- Add partial download support for progressive streams. Apps can prepare a progressive stream with
- HLS extension:
- Support X-ASSET-LIST and live streams with
HlsInterstitialsAdsLoader.
- Support X-ASSET-LIST and live streams with
- RTSP extension:
- Add parsing support for SessionDescriptions containing lines with trailing whitespace characters (#2357).
- Cast extension:
- Add support for
getDeviceVolume(),setDeviceVolume(),getDeviceMuted(), andsetDeviceMuted()(#2089).
- Add support for
- Test Utilities:
- Removed
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...), andtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). UseShadowMediaCodecConfigto configure shadow encoders and decoders instead. - Replaced the "exotest" prefix with "media3" in codec names reported by
ShadowMediaCodecConfig.
- Removed
- Remove deprecated symbols:
- Removed deprecated
SegmentDownloaderconstructorSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)and the corresponding constructors in its subclassesDashDownloader,HlsDownloaderandSsDownloader. - Removed deprecated
Player.hasNext(),Player.hasNextWindow(). UsePlayer.hasNextMediaItem()instead. - Removed deprecated
Player.next(). UsePlayer.seekToNextMediaItem()instead. - Removed deprecated
Player.seekToPreviousWindow(). UsePlayer.seekToPreviousMediaItem()instead. - Removed deprecated
Player.seekToNextWindow(). UsePlayer.seekToNextMediaItem()instead. - Removed deprecated
BaseAudioProcessorinexoplayermodule. UseBaseAudioProcessorundercommonmodule. - Remove deprecated
MediaCodecVideoRendererconstructor `...
- Removed deprecated
1.7.1
1.7.0
This release should have been 1.7.0-alpha01, but was accidentally tagged
1.7.0 (i.e. stable) on maven.google.com.
Please do not use it. Stay on 1.6.1 or upgrade to 1.7.1 (which has the same code as 1.6.1).
1.6.1
- Common Library:
- Add
PlaybackParameters.withPitch(float)method for easily copying aPlaybackParameterswith a newpitchvalue (#2257).
- Add
- ExoPlayer:
- Fix issue where media item transition fails due to recoverable renderer error during initialization of the next media item (#2229).
- Fix issue where
ProgressiveMediaPeriodthrows anIllegalStateExceptionasPreloadMediaSourceattempts to call itsgetBufferedDurationUs()before it is prepared (#2315). - Fix sending
CmcdDatain manifest requests for DASH, HLS, and SmoothStreaming (#2253). - Ensure
AdPlaybackState.withAdDurationsUs(long[][])can be used after ad groups have been removed. The user still needs to pass in an array of durations for removed ad groups which can be empty or null (#2267).
- Extractors:
- MP4: Parse
alternate_groupfrom thetkhdbox and expose it as anMp4AlternateGroupDataentry in each track'sFormat.metadata(#2242).
- MP4: Parse
- Audio:
- Fix offload issue where the position might get stuck when playing a playlist of short content (#1920).
- Session:
- Lower aggregation timeout for platform
MediaSessioncallbacks from 500 to 100 milliseconds and add an experimental setter to allow apps to configure this value. - Fix issue where notifications reappear after they have been dismissed by the user (#2302).
- Fix a bug where the session returned a single-item timeline when the wrapped player is actually empty. This happened when the wrapped player doesn't have
COMMAND_GET_TIMELINEavailable whileCOMMAND_GET_CURRENT_MEDIA_ITEMis available and the wrapped player is empty (#2320). - Fix a bug where calling
MediaSessionService.setMediaNotificationProvideris silently ignored after other interactions with the service likesetForegroundServiceTimeoutMs(#2305).
- Lower aggregation timeout for platform
- UI:
- Enable
PlayerSurfaceto work withExoPlayer.setVideoEffectsandCompositionPlayer. - Fix bug where
PlayerSurfacecan't be recomposed with a newPlayer.
- Enable
- HLS extension:
- Fix issue where chunk duration wasn't set in
CmcdDatafor HLS media, causing an assertion failure when processing encrypted media segments (#2312).
- Fix issue where chunk duration wasn't set in
- RTSP extension:
- Add support for URI with RTSPT scheme as a way to configure the RTSP session to use TCP (#1484).
- Cast extension:
- Add support for playlist metadata (#2235).
1.6.0
This release includes the following changes since the
1.5.1 release:
- Common Library:
- Add
AudioManagerCompatandAudioFocusRequestCompatto replace the equivalent classes inandroidx.media. - Upgrade Kotlin from 1.9.20 to 2.0.20 and use Compose Compiler Gradle plugin. Upgrade KotlinX Coroutines library from 1.8.1 to 1.9.0.
- Remove
Format.toBundle(boolean excludeMetadata)method, useFormat.toBundle()instead. - Fix bug in
SimpleBasePlayerwhere setting a newcurrentMediaItemIndexinStateaftersetPlaylistwithnullMediaMetadatadoes not reevaluate the metadata (#1940). - Change
SimpleBasePlayer.Stateaccess from protected to public to make it easier to handle updates in other classes(#2128).
- Add
- ExoPlayer:
- Add
MediaExtractorCompat, a new class that provides equivalent features to platformMediaExtractor. - Add experimental 'ExoPlayer' pre-warming support for playback using
MediaCodecVideoRenderer. You can configureDefaultRenderersFactorythroughexperimentalSetEnableMediaCodecVideoRendererPrewarmingto provide a secondaryMediaCodecVideoRenderertoExoPlayer. If enabled,ExoPlayerpre-processes the video of consecutive media items during playback to reduce media item transition latency. - Reduce default values for
bufferForPlaybackMsandbufferForPlaybackAfterRebufferMsinDefaultLoadControlto 1000 and 2000 ms respectively. - Initialize
DeviceInfoand device volume asynchronously (if enabled usingsetDeviceVolumeControlEnabled). These values aren't available instantly afterExoPlayer.Builder.build(), andPlayer.Listenernotifies changes throughonDeviceInfoChangedandonDeviceVolumeChanged. - Initial audio session id is no longer immediately available after creating the player. You can use
AnalyticsListener.onAudioSessionIdChangedto listen to the initial update if required. - Consider language when selecting a video track. By default, select a 'main' video track that matches the language of the selected audio track, if available. Explicit video language preferences can be expressed with
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Add
selectedAudioLanguageparameter toDefaultTrackSelector.selectVideoTrack()method. - Add
retryCountparameter toMediaSourceEventListener.onLoadStartedand correspondingMediaSourceEventListener.EventDispatchermethods. - Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (#1698).
- Move
BasePreloadManager.Listenerto a top-levelPreloadManagerListener. RenderersFactory.createSecondaryRenderercan be implemented to provide secondary renderers for pre-warming. Pre-warming enables quicker media item transitions during playback.- Enable sending
CmcdDatafor manifest requests in adaptive streaming formats DASH, HLS, and SmoothStreaming (#1951). - Provide
MediaCodecInfoof the codec that will be initialized inMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Change
AdsMediaSourceto allow theAdPlaybackStatesto grow by appending ad groups. Invalid modifications are detected and throw an exception. - Fix issue where additional decode-only frames may be displayed in quick succession when transitioning to content media after a mid-roll ad.
- Make
DefaultRenderersFactoryadd twoMetadataRendererinstances to enable apps to receive two different schemes of metadata by default. - Reevaluate whether the ongoing load of a chunk should be cancelled when playback is paused (#1785).
- Add option to
ClippingMediaSourceto allow clipping in unseekable media. - Fix bug where seeking with pre-warming could block following media item transition.
- Fix a bug where
ExoPlayer.isLoading()remainstruewhile it has transitioned toSTATE_IDLEorSTATE_ENDED(#2133). - Add
lastRebufferRealtimeMstoLoadControl.Parameter(#2113).
- Add
- Transformer:
- Add support for transmuxing into alternative backward compatible formats.
- Add support for transcoding and transmuxing Dolby Vision (profile 8) format.
- Update parameters of
VideoFrameProcessor.registerInputStreamandVideoFrameProcessor.Listener.onInputStreamRegisteredto useFormat. - Generate HDR static metadata when using
DefaultEncoderFactory. - Enable support for Android platform diagnostics using
MediaMetricsManager. Transformer forwards editing events and performance data to the platform, which helps to provide system performance and debugging information on the device. This data may also be collected by Google if sharing usage and diagnostics data is enabled by the user of the device. Apps can opt-out of contributing to platform diagnostics for Transformer withTransformer.Builder.setUsePlatformDiagnostics(false). - Split
InAppMuxerintoInAppMp4MuxerandInAppFragmentedMp4Muxer. You useInAppMp4Muxerto produce a non-fragmented MP4 file, whileInAppFragmentedMp4Muxeris for producing a fragmented MP4 file. - Move
Muxerinterface frommedia3-muxertomedia3-transformer. - Add
MediaProjectionAssetLoader, which provides media from aMediaProjectionfor screen recording, and add support for screen recording to the Transformer demo app. - Add
#getInputFormat()toCodecinterface. - Shift the responsibility to release the
GlObjectsProvideronto the caller inDefaultVideoFrameProcessorandDefaultVideoCompositorwhen possible.
- Extractors:
- AVI: Fix handling of files with constant bitrate compressed audio where the stream header stores the number of bytes instead of the number of chunks.
- Fix handling of NAL units with lengths expressed in 1 or 2 bytes (rather than 4).
- Fix
ArrayIndexOutOfBoundsExceptionin MP4 edit lists when the edit list starts at a non-sync frame with no preceding sync frame (#2062). - Fix issue where TS streams can get stuck on some devices (#2069).
- FLAC: Add support for 32-bit FLAC files. Previously these would fail to play with
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio:
- Fix
onAudioPositionAdvancingto be called when playback resumes (previously it was called when playback was paused). - Don't bypass
SonicAudioProcessorwhenSpeedChangingAudioProcessoris configured with default parameters. - Fix underflow in
Sonic#getOutputSize()that could causeDefaultAudioSinkto stall. - Fix
MediaCodecAudioRenderer.getDurationToProgressUs()andDecoderAudioRenderer.getDurationToProgressUs()so that seeks correctly reset the provided durations. - Make
androidx.media3.common.audio.SonicAudioProcessorfinal. - Add support for float PCM to
ChannelMappingAudioProcessorandTrimmingAudioProcessor.
- Fix
- Video:
- Change
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceto protected so that applications can override to block usage of placeholder surfaces (#1905). - Add experimental
ExoPlayerAV1 sample dependency parsing to speed up seeking. Enable it with the newDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI. - Add experimental
ExoPlayerAPI to drop lateMediaCodecVideoRendererdecoder input buffers that are not depended on. Enable it withDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - Fix issue where a player without a surface was ready immediately and very slow decoding any pending frames (#1973).
- Exclude Xiaomi and OPPO devices from detached surface mode to avoid screen flickering (#2059).
- Change
- Text:
- Add support for VobSub subtitles (#8260).
- Stop eagerly loading all subtitle files configured with
MediaItem.Builder.setSubtitleConfigurations, and instead only load one if it is selected by track selection (#1721). - TTML: Add support for referencing
tts:originandtts:extentusingstyle(#2953). - Restrict WebVTT and SubRip timestamps to exactly 3 decimal places. Previously we incorrectly parsed any number of decimal places but always assumed the value was in milliseconds, leading to incorrect timestamp (#1997).
- Fix playback hanging when a playlist contains clipped items with CEA-608 or CEA-708 captions.
- Fix
IllegalStateExceptionwhen an SSA file contains a cue with zero duration (...
1.6.0-rc02
This release includes the following changes since 1.6.0-rc01 release:
- Extractors:
- FLAC: Add support for 32-bit FLAC files. Previously these would fail to play with
IllegalStateException: Playback stuck buffering and not loading(#2197).
- FLAC: Add support for 32-bit FLAC files. Previously these would fail to play with
- Audio:
- Add support for float PCM to
ChannelMappingAudioProcessor. - Add support for float PCM to
TrimmingAudioProcessor.
- Add support for float PCM to
- Video:
- Session:
- Fix bug where a stale notification stays visible when the playlist is cleared (#2211).
- UI:
- Add
PlaybackSpeedStateclass and the correspondingrememberPlaybackSpeedStateComposable tomedia3-ui-composemodule.
- Add
- DASH extension:
- Fix issue where adaptation sets marked with
adaptation-set-switchingbut different languages or role flags are merged together (#2222).
- Fix issue where adaptation sets marked with
- HLS extension:
- Loosen the condition for seeking to sync positions in an HLS stream (#2209).
1.6.0-rc01
- Common Library:
- Change
SimpleBasePlayer.Stateaccess from protected to public to make it easier to handle updates in other classes (#2128).
- Change
- ExoPlayer:
- Extractors:
- Fix issue where TS streams can get stuck on some devices (#2069).
- Text:
- Fix handling of multi-byte UTF-8 characters in WebVTT files using CR line endings (#2167).
- DRM:
- Fix
MediaCodec$CryptoException: Operation not supported in this configurationerror when playing ClearKey content on API < 27 devices (#1732).
- Fix
- Muxers:
- Fix a bug in
FragmentedMp4Muxerthat creates a lot of fragments when only audio track is written.
- Fix a bug in
- Downloads:
- Fix bug in
CacheWriterthat leaves data sources open and cache areas locked in case the data source throws anExceptionother thanIOException(#9760).
- Fix bug in
- MIDI extension:
- Plumb custom
AudioSinkandAudioRendererEventListenerinstances intoMidiRenderer.
- Plumb custom
- Cast extension:
- Bump the
play-services-cast-frameworkdependency to 21.5.0 to fix aFLAG_MUTABLEcrash in apps targeting API 34+ on devices with Google Play services installed but disabled (#2178).
- Bump the
1.6.0-beta01
- Common Library:
- Upgrade Kotlin from 1.9.20 to 2.0.20 and use Compose Compiler Gradle
plugin. Upgrade KotlinX Coroutines library from 1.8.1 to 1.9.0.
- Upgrade Kotlin from 1.9.20 to 2.0.20 and use Compose Compiler Gradle
- ExoPlayer:
- Initial audio session id is no longer immediately available after
creating the player. You can use
AnalyticsListener.onAudioSessionIdChangedto listen to the initial
update if required.
- Initial audio session id is no longer immediately available after
- Transformer:
- Add
MediaProjectionAssetLoader, which provides media from a
MediaProjectionfor screen recording, and add support for screen
recording to the Transformer demo app. - Add
#getInputFormat()toCodecinterface. - Shift the responsibility to release the
GlObjectsProvideronto the
caller inDefaultVideoFrameProcessorandDefaultVideoCompositorwhen
possible.
- Add
- Video:
- Add experimental
ExoPlayerAPI to drop lateMediaCodecVideoRenderer
decoder input buffers that are not depended on. Enable it with
DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs.
- Add experimental
- Session:
- Keep foreground service state for an additional 10 minutes when playback
pauses, stops or fails. This allows users to resume playback within this
timeout without risking foreground service restrictions on various
devices. Note that simply callingplayer.pause()can no longer be used
to stop the foreground service beforestopSelf()when overriding
onTaskRemoved, useMediaSessionService.pauseAllPlayersAndStopSelf()
instead. - Make
MediaSession.setSessionActivity(PendingIntent)accept null
(#2109). - Keep notification visible when playback enters an error or stopped
state. The notification is only removed if the playlist is cleared or
the player is released. - Improve handling of Android platform MediaSession actions ACTION_PLAY
and ACTION_PAUSE to only set one of them according to the available
commands and also accept if only one of them is set.
- Keep foreground service state for an additional 10 minutes when playback
- Remove deprecated symbols:
- Removed the following deprecated
DownloadHelpermethods:- Constructor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), use
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)instead. getRendererCapabilities(RenderersFactory), equivalent
functionality can be achieved by creating a
DefaultRendererCapabilitiesListwith aRenderersFactory, and
callingDefaultRendererCapabilitiesList.getRendererCapabilities().
- Constructor
- Removed
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
method. Use
PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)and
pass in(MediaSession.Token) compatToken.getToken()instead.
- Removed the following deprecated
1.6.0-alpha03
- ExoPlayer:
- Add option to
ClippingMediaSourceto allow clipping in unseekable media. - Fix bug where seeking with pre-warming could block following media item transition.
- Add option to
- Audio:
- Make
androidx.media3.common.audio.SonicAudioProcessorfinal.
- Make
- Video:
- Change
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceto protected so that applications can override to block usage of placeholder surfaces (#1905). - Add experimental
ExoPlayerAV1 sample dependency parsing to speed up seeking. Enable it with the newDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI.
- Change
- Muxers:
- Disable
Mp4Muxersample batching and copying by default.
- Disable
- Remove deprecated symbols:
- Removed
androidx.media3.exoplayer.audio.SonicAudioProcessor.
- Removed