Skip to content

Releases: androidx/media

1.8.0-alpha01

19 May 15:25
Compare
Choose a tag to compare
1.8.0-alpha01 Pre-release
Pre-release

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 with setScrubbingModeParameters(..) on ExoPlayer and ExoPlayer.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 AdsMediaSource may be never reported (#2337).
    • Fix memory leak in MergingMediaSource, for example used when sideloading subtitles (#2338).
    • Allow CmcdConfiguration.Factory to return null to 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 PreCacheHelper that allows apps to pre-cache a single media with specified start position and duration.
  • Transformer:
    • Filling an initial gap (added via addGap()) with silent audio now requires explicitly setting experimentalSetForceAudioTrack(true) in EditedMediaItemSequence.Builder. If the gap is in the middle of the sequence, then this flag is not required.
    • Move Muxer interface from media3-transformer to media3-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 VideoCompositorSettings to arrange sequences into a 2x2 or PiP layout.
  • 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).
  • Audio:
    • Allow constant power upmixing/downmixing in DefaultAudioMixer.
    • Make ChannelMappingAudioProcessor, TrimmingAudioProcessor and ToFloatPcmAudioProcessor public (#2339).
    • Use AudioTrack#getUnderrunCount() in AudioTrackPositionTracker to detect underruns in DefaultAudioSink instead 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.onAudioPositionAdvancing was not reporting the time when the audio started advancing but the time of the first measurement.
  • Video:
    • Add experimental ExoPlayer API to include the MediaCodec.BUFFER_FLAG_DECODE_ONLY flag 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 with DefaultRenderersFactory.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).
  • 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/SSA in Matroska files. Previously MatroskaExtractor only supported CodecId = S_TEXT/ASS which 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 layer property 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 a Presentation that ensures the shortest side always matches the given value, regardless of input orientation.
  • Muxers:
    • writeSampleData() API now uses muxer specific BufferInfo class instead of MediaCodec.BufferInfo.
    • Add Muxer.Factory#supportsWritingNegativeTimestampsInEditList which 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 MediaPeriodQueue anymore (#2215).
  • Session:
    • Fix a bug where passing null into getLibraryRoot of a MediaBrowser connected to a legacy MediaBrowserServiceCompat produced a NullPointerException.
    • 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.uri was shared to the platform sessions's MediaMetadata. To intentionally share a URI to allow controllers to re-request the media, set MediaItem.RequestMetadata.mediaUri instead.
  • 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-compose module for SeekBackButtonState and SeekForwardButtonState.
    • Make PlayerSurface accept a nullable Player argument.
    • 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 a player.seekTo call for every movement, and then exits scrubbing mode when the touch is lifted from the screen. This integration can be enabled with either time_bar_scrubbing_enabled = true in XML or the setTimeBarScrubbingEnabled(boolean) method from Java/Kotlin.
  • Downloads:
    • Add partial download support for progressive streams. Apps can prepare a progressive stream with DownloadHelper, and request a DownloadRequest from the helper with specifying the time-based media start and end positions that the download should cover. The returned DownloadRequest carries the resolved byte range, with which a ProgressiveDownloader can be created and download the content correspondingly.
    • Add DownloadHelper.Factory with which the static DownloadHelper.forMediaItem() methods are replaced.
    • Add Factory for SegmentDownloader implementations.
    • Add partial download support for adaptive streams. Apps can prepare an adaptive stream with DownloadHelper, and request a DownloadRequest from the helper with specifying the time-based media start and end positions that the download should cover. The returned DownloadRequest carries the resolved time range, with which a concrete SegmentDownloader can be created and download the content correspondingly.
  • HLS extension:
    • Support X-ASSET-LIST and live streams with HlsInterstitialsAdsLoader.
  • RTSP extension:
    • Add parsing support for SessionDescriptions containing lines with trailing whitespace characters (#2357).
  • Cast extension:
    • Add support for getDeviceVolume(), setDeviceVolume(), getDeviceMuted(), and setDeviceMuted() (#2089).
  • Test Utilities:
    • Removed transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...), and transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). Use ShadowMediaCodecConfig to configure shadow encoders and decoders instead.
    • Replaced the "exotest" prefix with "media3" in codec names reported by ShadowMediaCodecConfig.
  • Remove deprecated symbols:
    • Removed deprecated SegmentDownloader constructor SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) and the corresponding constructors in its subclasses DashDownloader, HlsDownloader and SsDownloader.
    • Removed deprecated Player.hasNext(), Player.hasNextWindow(). Use Player.hasNextMediaItem() instead.
    • Removed deprecated Player.next(). Use Player.seekToNextMediaItem() instead.
    • Removed deprecated Player.seekToPreviousWindow(). Use Player.seekToPreviousMediaItem() instead.
    • Removed deprecated Player.seekToNextWindow(). Use Player.seekToNextMediaItem() instead.
    • Removed deprecated BaseAudioProcessor in exoplayer module. Use BaseAudioProcessor under common module.
    • Remove deprecated MediaCodecVideoRenderer constructor `...
Read more

1.7.1

19 May 09:11
Compare
Choose a tag to compare

This release has the same code as 1.6.1 and is being released to ensure it appears as a 'newer' release than 1.7.0, which was an alpha release accidentally tagged as stable.

1.7.0

16 May 10:49
Compare
Choose a tag to compare
1.7.0 Pre-release
Pre-release

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

14 Apr 12:45
Compare
Choose a tag to compare
  • Common Library:
    • Add PlaybackParameters.withPitch(float) method for easily copying a PlaybackParameters with a new pitch value (#2257).
  • ExoPlayer:
    • Fix issue where media item transition fails due to recoverable renderer error during initialization of the next media item (#2229).
    • Fix issue where ProgressiveMediaPeriod throws an IllegalStateException as PreloadMediaSource attempts to call its getBufferedDurationUs() before it is prepared (#2315).
    • Fix sending CmcdData in 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_group from the tkhd box and expose it as an Mp4AlternateGroupData entry in each track's Format.metadata (#2242).
  • Audio:
    • Fix offload issue where the position might get stuck when playing a playlist of short content (#1920).
  • Session:
    • Lower aggregation timeout for platform MediaSession callbacks 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_TIMELINE available while COMMAND_GET_CURRENT_MEDIA_ITEM is available and the wrapped player is empty (#2320).
    • Fix a bug where calling MediaSessionService.setMediaNotificationProvider is silently ignored after other interactions with the service like setForegroundServiceTimeoutMs (#2305).
  • UI:
    • Enable PlayerSurface to work with ExoPlayer.setVideoEffects and CompositionPlayer.
    • Fix bug where PlayerSurface can't be recomposed with a new Player.
  • HLS extension:
    • Fix issue where chunk duration wasn't set in CmcdData for HLS media, causing an assertion failure when processing encrypted media segments (#2312).
  • 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

27 Mar 13:07
Compare
Choose a tag to compare

This release includes the following changes since the
1.5.1 release:

  • Common Library:
    • Add AudioManagerCompat and AudioFocusRequestCompat to replace the equivalent classes in androidx.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, use Format.toBundle() instead.
    • Fix bug in SimpleBasePlayer where setting a new currentMediaItemIndex in State after setPlaylist with null MediaMetadata does not reevaluate the metadata (#1940).
    • Change SimpleBasePlayer.State access from protected to public to make it easier to handle updates in other classes(#2128).
  • ExoPlayer:
    • Add MediaExtractorCompat, a new class that provides equivalent features to platform MediaExtractor.
    • Add experimental 'ExoPlayer' pre-warming support for playback usingMediaCodecVideoRenderer. You can configure DefaultRenderersFactory through experimentalSetEnableMediaCodecVideoRendererPrewarming to provide a secondary MediaCodecVideoRenderer to ExoPlayer. If enabled, ExoPlayer pre-processes the video of consecutive media items during playback to reduce media item transition latency.
    • Reduce default values for bufferForPlaybackMs and bufferForPlaybackAfterRebufferMs in DefaultLoadControl to 1000 and 2000 ms respectively.
    • Initialize DeviceInfo and device volume asynchronously (if enabled using setDeviceVolumeControlEnabled). These values aren't available instantly after ExoPlayer.Builder.build(), and Player.Listener notifies changes through onDeviceInfoChanged and onDeviceVolumeChanged.
    • Initial audio session id is no longer immediately available after creating the player. You can use AnalyticsListener.onAudioSessionIdChanged to 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 selectedAudioLanguage parameter to DefaultTrackSelector.selectVideoTrack() method.
    • Add retryCount parameter to MediaSourceEventListener.onLoadStarted and corresponding MediaSourceEventListener.EventDispatcher methods.
    • 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.Listener to a top-level PreloadManagerListener.
    • RenderersFactory.createSecondaryRenderer can be implemented to provide secondary renderers for pre-warming. Pre-warming enables quicker media item transitions during playback.
    • Enable sending CmcdData for manifest requests in adaptive streaming formats DASH, HLS, and SmoothStreaming (#1951).
    • Provide MediaCodecInfo of the codec that will be initialized in MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • Change AdsMediaSource to allow the AdPlaybackStates to 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 DefaultRenderersFactory add two MetadataRenderer instances 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 ClippingMediaSource to allow clipping in unseekable media.
    • Fix bug where seeking with pre-warming could block following media item transition.
    • Fix a bug where ExoPlayer.isLoading() remains true while it has transitioned to STATE_IDLE or STATE_ENDED (#2133).
    • Add lastRebufferRealtimeMs to LoadControl.Parameter (#2113).
  • 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.registerInputStream and VideoFrameProcessor.Listener.onInputStreamRegistered to use Format.
    • 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 with Transformer.Builder.setUsePlatformDiagnostics(false).
    • Split InAppMuxer into InAppMp4Muxer and InAppFragmentedMp4Muxer. You use InAppMp4Muxer to produce a non-fragmented MP4 file, while InAppFragmentedMp4Muxer is for producing a fragmented MP4 file.
    • Move Muxer interface from media3-muxer to media3-transformer.
    • Add MediaProjectionAssetLoader, which provides media from a MediaProjection for screen recording, and add support for screen recording to the Transformer demo app.
    • Add #getInputFormat() to Codec interface.
    • Shift the responsibility to release the GlObjectsProvider onto the caller in DefaultVideoFrameProcessor and DefaultVideoCompositor when 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 ArrayIndexOutOfBoundsException in 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 onAudioPositionAdvancing to be called when playback resumes (previously it was called when playback was paused).
    • Don't bypass SonicAudioProcessor when SpeedChangingAudioProcessor is configured with default parameters.
    • Fix underflow in Sonic#getOutputSize() that could cause DefaultAudioSink to stall.
    • Fix MediaCodecAudioRenderer.getDurationToProgressUs() and DecoderAudioRenderer.getDurationToProgressUs() so that seeks correctly reset the provided durations.
    • Make androidx.media3.common.audio.SonicAudioProcessor final.
    • Add support for float PCM to ChannelMappingAudioProcessor and TrimmingAudioProcessor.
  • Video:
    • Change MediaCodecVideoRenderer.shouldUsePlaceholderSurface to protected so that applications can override to block usage of placeholder surfaces (#1905).
    • Add experimental ExoPlayer AV1 sample dependency parsing to speed up seeking. Enable it with the new DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API.
    • Add experimental ExoPlayer API to drop late MediaCodecVideoRenderer decoder input buffers that are not depended on. Enable it with DefaultRenderersFactory.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).
  • 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:origin and tts:extent using style (#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 IllegalStateException when an SSA file contains a cue with zero duration (...
Read more

1.6.0-rc02

19 Mar 14:37
Compare
Choose a tag to compare

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).
  • Audio:
    • Add support for float PCM to ChannelMappingAudioProcessor.
    • Add support for float PCM to TrimmingAudioProcessor.
  • Video:
    • 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).
  • Session:
    • Fix bug where a stale notification stays visible when the playlist is cleared (#2211).
  • UI:
    • Add PlaybackSpeedState class and the corresponding rememberPlaybackSpeedState Composable to media3-ui-compose module.
  • DASH extension:
    • Fix issue where adaptation sets marked with adaptation-set-switching but different languages or role flags are merged together (#2222).
  • HLS extension:
    • Loosen the condition for seeking to sync positions in an HLS stream (#2209).

1.6.0-rc01

12 Mar 17:55
Compare
Choose a tag to compare
  • Common Library:
    • Change SimpleBasePlayer.State access from protected to public to make it easier to handle updates in other classes (#2128).
  • ExoPlayer:
    • Fix a bug where ExoPlayer.isLoading() remains true while it has transitioned to STATE_IDLE or STATE_ENDED (#2133).
    • Add lastRebufferRealtimeMs to LoadControl.Parameter (#2113).
  • 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 configuration error when playing ClearKey content on API < 27 devices (#1732).
  • Muxers:
    • Fix a bug in FragmentedMp4Muxer that creates a lot of fragments when only audio track is written.
  • Downloads:
    • Fix bug in CacheWriter that leaves data sources open and cache areas locked in case the data source throws an Exception other than IOException (#9760).
  • MIDI extension:
    • Plumb custom AudioSink and AudioRendererEventListener instances into MidiRenderer.
  • Cast extension:
    • Bump the play-services-cast-framework dependency to 21.5.0 to fix a FLAG_MUTABLE crash in apps targeting API 34+ on devices with Google Play services installed but disabled (#2178).

1.6.0-beta01

26 Feb 12:02
Compare
Choose a tag to compare
1.6.0-beta01 Pre-release
Pre-release
  • 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.
  • ExoPlayer:
    • Initial audio session id is no longer immediately available after
      creating the player. You can use
      AnalyticsListener.onAudioSessionIdChanged to listen to the initial
      update if required.
  • Transformer:
    • Add MediaProjectionAssetLoader, which provides media from a
      MediaProjection for screen recording, and add support for screen
      recording to the Transformer demo app.
    • Add #getInputFormat() to Codec interface.
    • Shift the responsibility to release the GlObjectsProvider onto the
      caller in DefaultVideoFrameProcessor and DefaultVideoCompositor when
      possible.
  • Video:
    • Add experimental ExoPlayer API to drop late MediaCodecVideoRenderer
      decoder input buffers that are not depended on. Enable it with
      DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs.
  • 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 calling player.pause() can no longer be used
      to stop the foreground service before stopSelf() when overriding
      onTaskRemoved, use MediaSessionService.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.
  • Remove deprecated symbols:
    • Removed the following deprecated DownloadHelper methods:
      • 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
        DefaultRendererCapabilitiesList with a RenderersFactory, and
        calling DefaultRendererCapabilitiesList.getRendererCapabilities().
    • Removed
      PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
      method. Use
      PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) and
      pass in (MediaSession.Token) compatToken.getToken()instead.

1.6.0-alpha03

06 Feb 13:14
Compare
Choose a tag to compare
1.6.0-alpha03 Pre-release
Pre-release
  • ExoPlayer:
    • Add option to ClippingMediaSource to allow clipping in unseekable media.
    • Fix bug where seeking with pre-warming could block following media item transition.
  • Audio:
    • Make androidx.media3.common.audio.SonicAudioProcessor final.
  • Video:
    • Change MediaCodecVideoRenderer.shouldUsePlaceholderSurface to protected so that applications can override to block usage of placeholder surfaces (#1905).
    • Add experimental ExoPlayer AV1 sample dependency parsing to speed up seeking. Enable it with the new DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API.
  • Muxers:
    • Disable Mp4Muxer sample batching and copying by default.
  • Remove deprecated symbols:
    • Removed androidx.media3.exoplayer.audio.SonicAudioProcessor.

1.6.0-alpha02

31 Jan 17:12
Compare
Choose a tag to compare
1.6.0-alpha02 Pre-release
Pre-release
  • Common Library:
    • Fix bug in SimpleBasePlayer where setting a new currentMediaItemIndex in State after setPlaylist with null MediaMetadata does not reevaluate the metadata (#1940).
  • ExoPlayer:
    • Add experimental 'ExoPlayer' pre-warming support for playback using MediaCodecVideoRenderer. You can configure DefaultRenderersFactory through experimentalSetEnableMediaCodecVideoRendererPrewarming to provide a secondary MediaCodecVideoRenderer to ExoPlayer. If enabled, ExoPlayer pre-processes the video of consecutive media items during playback to reduce media item transition latency.
    • Fix issue where additional decode-only frames may be displayed in quick succession when transitioning to content media after a mid-roll ad.
    • Make DefaultRenderersFactory add two MetadataRenderer instances to enable apps to receive two different schemes of metadata by default.
    • Initialize DeviceInfo and device volume asynchronously (if enabled using setDeviceVolumeControlEnabled). These values aren't available instantly after ExoPlayer.Builder.build(), and Player.Listener notifies changes through onDeviceInfoChanged and onDeviceVolumeChanged.
    • Reevaluate whether the ongoing load of a chunk should be cancelled when playback is paused (#1785).
  • Transformer:
    • 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 with Transformer.Builder.setUsePlatformDiagnostics(false).
    • Split InAppMuxer into InAppMp4Muxer and InAppFragmentedMp4Muxer. You use InAppMp4Muxer to produce a non-fragmented MP4 file, while InAppFragmentedMp4Muxer is for producing a fragmented MP4 file.
    • Move Muxer interface from media3-muxer to media3-transformer.
    • Add support for transcoding and transmuxing Dolby Vision (profile 8) format.
  • Extractors:
    • Fix handling of NAL units with lengths expressed in 1 or 2 bytes (rather than 4).
    • Fix ArrayIndexOutOfBoundsException in MP4 edit lists when the edit list starts at a non-sync frame with no preceding sync frame (#2062).
  • Audio:
    • Don't bypass SonicAudioProcessor when SpeedChangingAudioProcessor is configured with default parameters.
    • Fix underflow in Sonic#getOutputSize() that could cause DefaultAudioSink to stall.
    • Fix MediaCodecAudioRenderer.getDurationToProgressUs() and DecoderAudioRenderer.getDurationToProgressUs() so that seeks correctly reset the provided durations.
  • Text:
    • TTML: Add support for referencing tts:origin and tts:extent using style (#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 timestamps (#1997).
    • Add support for VobSub subtitles (#8260).
    • Fix playback hanging when a playlist contains clipped items with CEA-608 or CEA-708 captions.
    • Fix IllegalStateException when an SSA file contains a cue with zero duration (start and end time equal) (#2052).
    • Suppress (and log) subtitle parsing errors when subtitles are muxed into the same container as audio and video (#2052).
  • Muxers:
    • Renamed setSampleCopyEnabled() method to setSampleCopyingEnabled() in both Mp4Muxer.Builder and FragmentedMp4Muxer.Builder.
    • Mp4Muxer.addTrack() and FragmentedMp4Muxer.addTrack() now return an int track ID instead of a TrackToken.
    • Mp4Muxer and FragmentedMp4Muxer no longer implement Muxer interface.
  • Session:
    • Fix bug where calling a Player method on a MediaController connected to a legacy session dropped changes from a pending update.
  • UI:
    • Add PresentationState state holder class and the corresponding rememberPresentationState Composable to media3-ui-compose.
  • HLS Extension:
    • Parse SUPPLEMENTAL-CODECS tag from HLS playlist to detect Dolby Vision formats (#1785).
  • DASH Extension:
    • Fix issue when calculating the update interval for ad insertion in multi-period live streams (#1698).
    • Parse scte214:supplementalCodecs attribute from DASH manifest to detect Dolby Vision formats (#1785).
    • Improve handling of period transitions in live streams where the period contains media samples beyond the declared period duration (#1698).
  • Demo app:
    • Use PresentationState to control the aspect ratio of PlayerSurface Composable. This depends on the ContentScale type and covers it with a shutter-overlay before the first frame is rendered.
  • Remove deprecated symbols:
    • Removed ExoPlayer.VideoComponent, ExoPlayer.AudioComponent, ExoPlayer.TextComponent and ExoPlayer.DeviceComponent.