Skip to content

1.5.0-beta01

Pre-release
Pre-release
Compare
Choose a tag to compare
@shahdDaghash shahdDaghash released this 30 Oct 18:44
· 673 commits to release since this release

This release includes the following changes since the
1.5.0-alpha01 release:

  • Common Library:
    • Remove @DoNotInline annotations from manually out-of-lined inner classes designed to avoid runtime class verification failures. Recent versions of R8 now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, due to compileSdk = 35. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has already been done in other AndroidX libraries.
  • ExoPlayer:
    • Fix MediaCodec.CryptoException sometimes being reported as an "unexpected runtime error" when MediaCodec is operated in asynchronous mode (default behaviour on API 31+).
    • Pass bufferedDurationUs instead of bufferedPositionUs with PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Also changes DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS to DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position.
    • Add ForwardingRenderer implementation that forwards all method calls to another renderer (1703).
    • Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling ExoPlayer.setPreloadConfiguration(PreloadConfiguration) accordingly. By default preloading is disabled. When opted-in and to not interfere with playback, DefaultLoadControl restricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementing LoadControl.shouldContinuePreloading() accordingly (like when overriding this method in DefaultLoadControl). The default implementation of LoadControl disables preloading in case an app is using a custom implementation of LoadControl.
    • Add method MediaSourceEventListener.EventDispatcher.dispatchEvent() to allow invoking events of subclass listeners (1736).
    • Add DefaultPreloadManager.Builder that builds the DefaultPreloadManager and ExoPlayer instances with consistently shared configurations.
    • Remove Renderer[] parameter from LoadControl.onTracksSelected() as DefaultLoadControl implementation can retrieve the stream types from ExoTrackSelection[].
    • Deprecated DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) and marked method as final to prevent overrides. The new DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) should be used instead.
    • Report MediaSourceEventListener events from secondary sources in MergingMediaSource. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added with MediaItem.LocalConfiguration.subtitleConfigurations), which may appear as duplicate load events emitted from AnalyticsListener.
    • Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (#1722).
      • In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via onLoadError callbacks.
      • In legacy subtitle handling (during rendering), only associated load errors are emitted via onLoadError callbacks while parse errors are silently ignored (this is pre-existing behaviour).
  • Transformer:
    • Make setting the image duration using MediaItem.Builder.setImageDurationMs mandatory for image export.
    • Add export support for gaps in sequences of audio EditedMediaItems.
  • Track Selection:
    • DefaultTrackSelector: Prefer object-based audio over channel-based audio when other factors are equal.
  • Extractors:
    • Fix preroll sample handling for non-keyframe media start positions when processing edit lists in MP4 files (#1659).
    • Improved frame rate calculation by using media duration from the mdhd box in Mp4Extractor and FragmentedMp4Extractor (#1531).
    • Fix incorrect scaling of media_time in MP4 edit lists. While segment_duration was already correctly scaled using the movie timescale, media_time is now properly scaled using the track timescale, as specified by the MP4 format standard (#1792).
    • Handle out-of-order frames in endIndices calculation for MP4 with edit list (#1797).
  • Audio:
    • Fix pop sounds that may occur during seeks.
    • Fix truncation error accumulation for Sonic's time-stretching/pitch-shifting algorithm.
    • Fix bug in SpeedChangingAudioProcessor that causes dropped output frames.
  • Video:
    • Add workaround for a device issue on Galaxy Tab S7 FE that causes 60fps secure H264 streams to be marked as unsupported (#1619).
    • Add workaround for codecs that get stuck after the last sample without returning an end-of-stream signal.
  • Text:
    • Ensure WebVTT in HLS with very large subtitle timestamps (which overflow a 64-bit long when represented as microseconds and multiplied by the 90,000 MPEG timebase) are displayed (#1763).
  • Metadata:
    • Assign the C.TRACK_TYPE_METADATA type to tracks containing icy or vnd.dvb.ait content.
  • DRM:
    • Fix IllegalStateException from DefaultDrmSession.requiresSecureDecoder after opening a DRM session failed. This issue was introduced in 1.5.0-alpha01.
  • IMA extension:
    • Fix bug where server-side inserted DAI streams without a preroll can result in an ArrayIndexOutOfBoundsException when playing past the last midroll (#1741).
  • Session:
    • Fix bug that caused custom commands sent from a MediaBrowser being dispatched to the MediaSessionCompat.Callback instead of the MediaBrowserServiceCompat variant of the method when connected to a legacy service. This prevented the MediaBrowser to receive the actual return value sent back by the legacy service (#1474).
    • Handle IllegalArgumentException thrown by devices of certain manufacturers when setting the broadcast receiver for media button intents (#1730).
    • Add command buttons for media items. This adds the Media3 API for what was known as Custom browse actions with the legacy library with MediaBrowserCompat. Note that with Media3 command buttons for media items are available for both, MediaBrowser and MediaController. See Custom Browse actions of AAOS.
    • Fix bug where a Media3 controller was sometimes unable to let a session app start a foreground service after requesting play().
    • Restrict CommandButton.Builder.setIconUri to only accept content Uris.
    • Pass connection hints of a Media3 browser to the initial MediaBrowserCompat when connecting to a legacy MediaBrowserCompat. The service can receive the connection hints passed in as root hints with the first call to onGetRoot().
    • Fix bug where a MediaBrowser connected to a legacy browser service, didn't receive an error sent by the service after the browser has subscribed to a parentid.
    • Improve interoperability behavior, so that a Media3 browser that is connected to a legacy MediaBrowserService doesn't request the children of a parentId twice when subscribing to a parent.
  • UI:
    • Make the stretched/cropped video in PlayerView-in-Compose-AndroidView workaround opt-in, due to issues with XML-based shared transitions. Apps using PlayerView inside AndroidView need to call PlayerView.setEnableComposeSurfaceSyncWorkaround in order to opt-in (#1237, #1594).
    • Add setFullscreenButtonState to PlayerView to allow updates of fullscreen button's icon on demand, i.e. out-of-band and not reactively to a click interaction (#1590, #184).
    • Fix bug where the "None" choice in the text selection is not working if there are app-defined text track selection preferences.
  • Smooth Streaming Extension:
    • Fix a Bad magic number for Bundle error when playing SmoothStreaming streams with text tracks (#1779).
  • RTSP Extension:
    • Fix user info removal for URLs that contain encoded @ characters (#1138).
  • Decoder Extensions (FFmpeg, VP9, AV1, etc.):
    • Add 16 KB page support for decoder extensions on Android 15 (#1685).
  • Cast Extension:
    • Stop cleaning the timeline after the CastSession disconnects, which enables the sender app to resume playback locally after a disconnection.
    • Populate CastPlayer's DeviceInfo when a Context is provided. This enables linking the MediaSession to a RoutingSession, which is necessary for integrating Output Switcher (#1056).
  • Remove deprecated symbols:
    • Remove deprecated DefaultEncoderFactory constructors. Use DefaultEncoderFactory.Builder instead.
    • Remove deprecated SingleFrameGlShaderProgram. Use BaseGlShaderProgram instead.