Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update media3 to v1.4.1 #425

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Update media3 to v1.4.1 #425

wants to merge 1 commit into from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jul 25, 2024

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
androidx.media3:media3-datasource 1.3.1 -> 1.4.1 age adoption passing confidence
androidx.media3:media3-database 1.3.1 -> 1.4.1 age adoption passing confidence
androidx.media3:media3-common 1.3.1 -> 1.4.1 age adoption passing confidence
androidx.media3:media3-exoplayer 1.3.1 -> 1.4.1 age adoption passing confidence

Release Notes

androidx/media (androidx.media3:media3-datasource)

v1.4.1

Compare Source

This release includes the following changes since the
1.4.0 release:

  • ExoPlayer:
    • Handle preload callbacks asynchronously in PreloadMediaSource
      (#​1568).
    • Allow playback regardless of buffered duration when loading fails
      (#​1571).
  • Extractors:
    • MP3: Fix Searched too many bytes error by correctly ignoring trailing
      non-MP3 data based on the length field in an Info frame
      (#​1480).
  • Text:
    • TTML: Fix handling of percentage tts:fontSize values to ensure they
      are correctly inherited from parent nodes with percentage tts:fontSize
      values.
    • Fix IndexOutOfBoundsException in LegacySubtitleUtil due to
      incorrectly handling the case of the requested output start time being
      greater than or equal to the final event time in the Subtitle
      (#​1516).
  • DRM:
    • Fix android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE error on API 31+ devices
      playing L1 Widevine content. This error is caused by an incomplete
      implementation of the framework
      MediaDrm.requiresSecureDecoder
      method (#​1603).
  • Effect:
    • Add a release() method to GlObjectsProvider.
  • Session:
    • Transform a double-tap of KEYCODE_HEADSETHOOK into a 'seek to next'
      action, as
      documented
      (#​1493).
    • Handle KEYCODE_HEADSETHOOK as a 'play' command in
      MediaButtonReceiver when deciding whether to ignore it to avoid a
      ForegroundServiceDidNotStartInTimeException
      (#​1581).
  • RTSP Extension:
    • Skip invalid Media Descriptions in SDP parsing
      (#​1087).

v1.4.0

Compare Source

This release includes the following changes since the
1.3.1 release:

  • Common Library:
    • Forward presumed no-op seek calls to the protected BasePlayer.seekTo()
      and SimpleBasePlayer.handleSeek() methods instead of ignoring them. If
      you are implementing these methods in a custom player, you may need to
      handle these additional calls with mediaItemIndex == C.INDEX_UNSET.
    • Remove compile dependency on enhanced Java 8 desugaring
      (#​1312).
    • Ensure the duration passed to MediaItem.Builder.setImageDurationMs()
      is ignored for a non-image MediaItem (as documented).
    • Add Format.customData to store app-provided custom information about
      Format instances.
  • ExoPlayer:
    • Add BasePreloadManager which coordinates the preloading for multiple
      sources based on the priorities defined by their rankingData.
      Customization is possible by extending this class. Add
      DefaultPreloadManager which uses PreloadMediaSource to preload media
      samples of the sources into memory, and uses an integer rankingData
      that indicates the index of an item on the UI.
    • Add PlayerId to most methods of LoadControl to enable LoadControl
      implementations to support multiple players.
    • Remove Buffer.isDecodeOnly() and C.BUFFER_FLAG_DECODE_ONLY. There is
      no need to set this flag as renderers and decoders will decide to skip
      buffers based on timestamp. Custom Renderer implementations should
      check if the buffer time is at least
      BaseRenderer.getLastResetPositionUs() to decide whether a sample
      should be shown. Custom SimpleDecoder implementations can check
      isAtLeastOutputStartTimeUs() if needed or mark other buffers with
      DecoderOutputBuffer.shouldBeSkipped to skip them.
    • Allow a null value to be returned by
      TargetPreloadStatusControl.getTargetPreloadStatus(T) to indicate not
      to preload a MediaSource with the given rankingData.
    • Add remove(MediaSource) to BasePreloadManager.
    • Add reset() to BasePreloadManager to release all the holding sources
      while keep the preload manager instance.
    • Add ExoPlayer.setPriority() (and Builder.setPriority()) to define
      the priority value used in PriorityTaskManager and for MediaCodec
      importance from API 35.
    • Fix issue with updating the last rebuffer time which resulted in
      incorrect bs (buffer starvation) key in CMCD
      (#​1124).
    • Add
      PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
      to indicate that the source has loaded to the end. This allows the
      DefaultPreloadManager and the custom
      PreloadMediaSource.PreloadControl implementations to preload the next
      source or take other actions.
    • Fix bug where silence skipping at the end of items can trigger a
      playback exception.
    • Add clear to PreloadMediaSource to discard the preloading period.
    • Add new error code
      PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED that is used
      when codec resources are reclaimed for higher priority tasks.
    • Let AdsMediaSource load preroll ads before initial content media
      preparation completes
      (#​1358).
    • Fix bug where playback moved to STATE_ENDED when re-preparing a
      multi-period DASH live stream after the original period was already
      removed from the manifest.
    • Rename onTimelineRefreshed() to onSourcePrepared() and
      onPrepared() to onTracksSelected() in
      PreloadMediaSource.PreloadControl. Also rename the IntDefs in
      DefaultPreloadManager.Stage accordingly.
    • Add experimental support for dynamic scheduling to better align work
      with CPU wake-cycles and delay waking up to when renderers can progress.
      You can enable this using experimentalSetDynamicSchedulingEnabled()
      when setting up your ExoPlayer instance.
    • Add Renderer.getDurationToProgressUs(). A Renderer can implement
      this method to return to ExoPlayer the duration that playback must
      advance for the renderer to progress. If ExoPlayer is set with
      experimentalSetDynamicSchedulingEnabled() then ExoPlayer will call
      this method when calculating the time to schedule its work task.
    • Add MediaCodecAdapter#OnBufferAvailableListener to alert when input
      and output buffers are available for use by MediaCodecRenderer.
      MediaCodecRenderer will signal ExoPlayer when receiving these
      callbacks and if ExoPlayer is set with
      experimentalSetDynamicSchedulingEnabled(), then ExoPlayer will
      schedule its work loop as renderers can make progress.
    • Use data class for LoadControl methods instead of individual
      parameters.
    • Add ExoPlayer.isReleased() to check whether Exoplayer.release() has
      been called.
    • Add ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() to configure
      the maximum position for which seekToPrevious() seeks to the previous
      item (#​1425).
    • Fix some audio focus inconsistencies, e.g. not reporting full or
      transient focus loss while the player is paused
      (#​1436).
    • Fix potential IndexOutOfBoundsException caused by extractors reporting
      additional tracks after the initial preparation step
      (#​1476).
    • Effects in ExoPlayer.setVideoEffect() will receive the timestamps
      with the renderer offset removed
      (#​1098).
    • Fix potential IllegalArgumentException when handling player error that
      happened while reading ahead into another playlist item
      (#​1483).
  • Transformer:
    • Add audioConversionProcess and videoConversionProcess to
      ExportResult indicating how the respective track in the output file
      was made.
    • Relax trim optimization H.264 level checks.
    • Add support for changing between SDR and HDR input media in a sequence.
    • Add support for composition-level audio effects.
    • Add support for transcoding Ultra HDR images into HDR videos.
    • Fix issue where the DefaultAudioMixer does not output the correct
      amount of bytes after being reset and reused.
    • Work around a decoder bug where the number of audio channels was capped
      at stereo when handling PCM input.
    • When selecting tracks in ExoPlayerAssetLoader, ignore audio channel
      count constraints as they only apply for playback.
    • Replace androidx.media3.transformer.Muxer interface with
      androidx.media3.muxer.Muxer and remove
      androidx.media3.transformer.Muxer.
    • Fix HEIC image loading from content URI schemes.
      (#​1373).
    • Adjust audio track duration in AudioGraphInput to improve AV sync.
    • Remove ExportResult.processedInputs field. If you use this field for
      codec details, then use DefaultDecoderFactory.listener instead. In
      case of a codec exception, codec details will be available in the
      ExportException.codecInfo.
  • Extractors:
    • MPEG-TS: Roll forward the change ensuring the last frame is rendered by
      passing the last access unit of a stream to the sample queue
      (#​7909).
      Incorporating fixes to resolve the issues that emerged in I-frame only
      HLS streams(#​1150) and
      H.262 HLS streams
      (#​1126).
    • MP3: Prefer the data size from an Info frame over the size reported by
      the underlying stream (e.g. file size, or HTTP Content-Length header).
      This helps to exclude non-playable trailer data (e.g. album artwork)
      from constant bitrate seeking calculations, making seeks more accurate
      (#​1376).
    • MP3: Use the frame count and other data in an Info frame (if present)
      to compute an average bitrate for constant bitrate seeking, rather than
      extrapolating from the bitrate of the frame after the Info frame,
      which may be artificially small, e.g. PCUT frame
      (#​1376).
    • Fix PCM audio format extraction in AVI containers.
  • Audio:
    • Fix DTS:X Profile 2 encoding attributes for passthrough playback
      (#​1299).
    • For offloaded playback, reset the tracking field for stream completion
      in DefaultAudioSink prior to calling AudioTrack.stop() so that
      AudioTrack.StreamEventCallback#onPresentationEnded correctly
      identifies when all pending data has been played.
    • Fix bug in SilenceSkippingAudioProcessor where transitions between
      different audio formats (for example stereo to mono) can cause the
      processor to throw an exception
      (#​1352).
    • Implement MediaCodecAudioRenderer.getDurationToProgressUs() so that
      ExoPlayer will dynamically schedule its main work loop to when the
      MediaCodecAudioRenderer can make progress.
  • Video:
    • Fix issue where Listener.onRenderedFirstFrame() arrives too early when
      switching surfaces mid-playback.
    • Fix decoder fallback logic for Dolby Vision to use a compatible AV1
      decoder if needed
      (#​1389).
    • Fix codec exception that may be caused by enabling a video renderer
      mid-playback.
  • Text:
    • Fix issue where subtitles starting before a seek position are skipped.
      This issue was only introduced in Media3 1.4.0-alpha01.
    • Change default subtitle parsing behavior so it happens during extraction
      instead of during rendering (see
      ExoPlayer's architecture diagram
      for the difference between extraction and rendering).
      • This change can be overridden by calling both
        MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
        and TextRenderer.experimentalSetLegacyDecodingEnabled(true). See
        the
        docs on customization
        for how to plumb these components into an ExoPlayer instance.
        These methods (and all support for legacy subtitle decoding) will be
        removed in a future release.
      • Apps with custom SubtitleDecoder implementations need to update
        them to implement SubtitleParser instead (and
        SubtitleParser.Factory instead of SubtitleDecoderFactory).
    • PGS: Fix run-length decoding to resolve 0 as a color index, instead of
      a literal color value
      (#​1367).
    • CEA-708: Ignore rowLock value. The CEA-708-E S-2023 spec states that
      rowLock and columnLock should both be assumed to be true, regardless
      of the values present in the stream (columnLock support is not
      implemented, so it's effectively assumed to always be false).
      • This was originally included in the 1.3.0-alpha01 release notes,
        but the change was accidentally reverted before the 1.3.0-rc01
        release. This is now fixed, so the change is present again.
    • CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive
      handling of the 'set pen location' command
      (#​1315).
    • Fix an IllegalArgumentException from LegacySubtitleUtil when a
      WebVTT subtitle sample contains no cues, e.g. as part of a DASH stream
      (#​1516).
  • Metadata:
    • Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort'
      (soal), 'artist sort' (soar) and 'album artist sort' (soaa) MP4
      tags were wrongly mapped to the TSO2, TSOA and TSOP ID3 tags
      (#​1302).
    • Fix reading of MP4 (/iTunes) numeric gnre (genre) and tmpo (tempo)
      tags when the value is more than one byte long.
    • Propagate ID3 TCON frame to MediaMetadata.genre
      (#​1305).
  • Image:
    • Add support for non-square DASH thumbnail grids
      (#​1300).
    • Add support for AVIF for API 34+.
    • Allow null as parameter for ExoPlayer.setImageOutput() to clear a
      previously set ImageOutput.
  • DataSource:
    • Implement support for android.resource://package/id raw resource URIs
      where package is different to the package of the current application.
      This wasn't previously documented to work, but is a more efficient way
      of accessing resources in another package than by name.
    • Eagerly check url is non-null in the DataSpec constructors. This
      parameter was already annotated to be non-null.
    • Allow ByteArrayDataSource to resolve a URI to a byte array during
      open(), instead of being hard-coded at construction
      (#​1405).
  • DRM:
    • Allow setting a LoadErrorHandlingPolicy on
      DefaultDrmSessionManagerProvider
      (#​1271).
  • Effect:
    • Support multiple speed changes within the same EditedMediaItem or
      Composition in SpeedChangeEffect.
    • Support for HLG and PQ output from ultra HDR bitmap input.
    • Add support for EGL_GL_COLORSPACE_BT2020_HLG_EXT, which improves HLG
      surface output in ExoPlayer.setVideoEffect and Transformer's Debug
      SurfaceView.
    • Update Overlay matrix implementation to make it consistent with the
      documentation by flipping the x and y values applied in
      setOverlayFrameAnchor(). If using
      OverlaySettings.Builder.setOverlayFrameAnchor(), flip their x and y
      values by multiplying them by -1.
    • Fix bug where TimestampWrapper crashes when used with
      ExoPlayer#setVideoEffects
      (#​821).
    • Change default SDR color working space from linear colors to electrical
      BT 709 SDR video. Also provide third option to retain the original
      colorspace.
    • Allow defining indeterminate z-order of EditedMediaItemSequences
      (#​1055).
    • Maintain a consistent luminance range across different pieces of HDR
      content (uses the HLG range).
    • Add support for Ultra HDR (bitmap) overlays on HDR content.
    • Allow SeparableConvolution effects to be used before API 26.
    • Remove unused OverlaySettings.useHdr since dynamic range of overlay
      and frame must match.
    • Add HDR support for TextOverlay. Luminance of the text overlay can be
      adjusted with OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • IMA extension:
    • Promote API that is required for apps to play
      DAI ad streams
      to stable.
    • Add replaceAdTagParameters(Map <String, String>) to
      ImaServerSideAdInsertionMediaSource.AdLoader that allows replacing ad
      tag parameters at runtime.
    • Fix bug where VideoAdPlayer.VideoAdPlayerCallback.onError() was not
      called when a player error happened during ad playback
      (#​1334).
    • Bump IMA SDK version to 3.33.0 to fix a NullPointerException when
      using data:// ad tag URIs
      (#​700).
  • Session:
    • Change default of CommandButton.enabled to true and ensure the value
      can stay false for controllers even if the associated command is
      available.
    • Add icon constants for CommandButton that should be used instead of
      custom icon resources.
    • Add MediaSessionService.isPlaybackOngoing() to let apps query whether
      the service needs to be stopped in onTaskRemoved()
      (#​1219).
    • Add MediaSessionService.pauseAllPlayersAndStopSelf() that conveniently
      allows to pause playback of all sessions and call stopSelf() to
      terminate the lifecycle of the MediaSessionService.
    • Override MediaSessionService.onTaskRemoved(Intent) to provide a safe
      default implementation that keeps the service running in the foreground
      if playback is ongoing or stops the service otherwise.
    • Hide seekbar in the media notification for live streams by not setting
      the duration into the platform session metadata
      (#​1256).
    • Align conversion of MediaMetadata to MediaDescriptionCompat, to use
      the same preferred order and logic when selecting metadata properties as
      in media1.
    • Add MediaSession.sendError() that allows sending non-fatal errors to
      Media3 controller. When using the notification controller (see
      MediaSession.getMediaNotificationControllerInfo()), the custom error
      is used to update the PlaybackState of the platform session to an
      error state with the given error information
      (#​543).
    • Add MediaSession.Callback.onPlayerInteractionFinished() to inform
      sessions when a series of player interactions from a specific controller
      finished.
    • Add SessionError and use it in SessionResult and LibraryResult
      instead of the error code to provide more information about the error
      and how to resolve the error if possible.
    • Publish the code for the media3 controller test app that can be used to
      test interactions with apps publishing a media session.
    • Propagate extras passed to media3's
      MediaSession[Builder].setSessionExtras() to a media1 controller's
      PlaybackStateCompat.getExtras().
    • Map fatal and non-fatal errors to and from the platform session. A
      PlaybackException is mapped to a fatal error state of the
      PlaybackStateCompat. A SessionError sent to the media notification
      controller with MediaSession.sendError(ControllerInfo, SessionError)
      is mapped to a non-fatal error in PlaybackStateCompat which means that
      error code and message are set but the state of the platform session
      remains different to STATE_ERROR.
    • Allow the session activity to be set per controller to override the
      global session activity. The session activity can be defined for a
      controller at connection time by creating a ConnectionResult with
      AcceptedResultBuilder.setSessionActivivty(PendingIntent). Once
      connected, the session activity can be updated with
      MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • Improve error replication of calls to MediaLibrarySession.Callback.
      Error replication can now be configured by using
      MediaLibrarySession.Builder.setLibraryErrorReplicationMode() for
      choosing the error type or opt-ing out of error replication which is on
      by default.
  • UI:
    • Add image display support to PlayerView when connected to an
      ExoPlayer (#​1144).
    • Add customization of various icons in PlayerControlView through xml
      attributes to allow different drawables per PlayerView instance,
      rather than global overrides
      (#​1200).
    • Work around a platform bug causing stretched/cropped video when using
      SurfaceView inside a Compose AndroidView on API 34
      (#​1237).
  • Downloads:
    • Ensure that DownloadHelper does not leak unreleased Renderer
      instances, which can eventually result in an app crashing with
      IllegalStateException: Too many receivers, total of 1000, registered for pid (#​1224).
  • Cronet Extension:
    • Fix SocketTimeoutException in CronetDataSource. In some versions of
      Cronet, the request provided by the callback is not always the same.
      This leads to callback not completing and request timing out
      (https://issuetracker.google.com/328442628).
  • HLS Extension:
    • Fix bug where pending EMSG samples waiting for a discontinuity were
      delegated in HlsSampleStreamWrapper with an incorrect offset causing
      an IndexOutOfBoundsException or an IllegalArgumentException
      (#​1002).
    • Fix bug where non-primary playlists keep reloading for LL-HLS streams
      (#​1240).
    • Fix bug where enabling CMCD for HLS with initialization segments
      resulted in Source Error and IllegalArgumentException.
    • Fix bug where non-primary playing playlists are not refreshed during
      live playback (#​1240).
    • Fix bug where enabling CMCD for HLS live streams causes
      ArrayIndexOutOfBoundsException
      (#​1395).
  • DASH Extension:
    • Fix bug where re-preparing a multi-period live stream can throw an
      IndexOutOfBoundsException
      (#​1329).
    • Add support for dashif:Laurl license urls
      (#​1345).
  • Cast Extension:
    • Fix bug that converted the album title of the MediaQueueItem to the
      artist in the Media3 media item
      (#​1255).
  • Test Utilities:
    • Implement onInit() and onRelease() in FakeRenderer.
    • Change TestPlayerRunHelper.runUntil()/playUntil() methods to fail on
      nonfatal errors (e.g. those reported to
      AnalyticsListener.onVideoCodecError()). Use the new
      TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
      method chain to disable this behavior.
  • Demo app:
    • Use DefaultPreloadManager in the short form demo app.
    • Allow setting repeat mode with Intent arguments from command line
      (#​1266).
    • Use HttpEngineDataSource as the HttpDataSource when supported by the
      device.
  • Remove deprecated symbols:
    • Remove CronetDataSourceFactory. Use CronetDataSource.Factory
      instead.
    • Remove some DataSpec constructors. Use DataSpec.Builder instead.
    • Remove setContentTypePredicate(Predicate) method from
      DefaultHttpDataSource, OkHttpDataSource and CronetDataSource. Use
      the equivalent method on each XXXDataSource.Factory instead.
    • Remove OkHttpDataSource constructors and OkHttpDataSourceFactory.
      Use OkHttpDataSource.Factory instead.
    • Remove PlayerMessage.setHandler(Handler). Use setLooper(Looper)
      instead.
    • Remove Timeline.Window.isLive field. Use the isLive() method
      instead.
    • Remove DefaultHttpDataSource constructors. Use
      DefaultHttpDataSource.Factory instead.
    • Remove DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Use
      DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS instead.
    • Remove MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Use MediaCodecInfo.canReuseCodec(Format, Format) instead.
    • Remove DrmSessionManager.DUMMY and getDummyDrmSessionManager()
      method. Use DrmSessionManager.DRM_UNSUPPORTED instead.
    • Remove AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),
      AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),
      AudioRendererEventListener.onAudioInputFormatChanged(Format),
      VideoRendererEventListener.onVideoInputFormatChanged(Format). Use the
      overloads that take a DecoderReuseEvaluation instead.
    • Remove RendererSupport.FormatSupport IntDef and FORMAT_HANDLED,
      FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM,
      FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE constants. Use
      the equivalent IntDef and constants in androidx.media3.common.C
      instead (e.g. C.FORMAT_HANDLED).
    • Remove Bundleable interface. This includes removing all
      Bundleable.Creator<Foo> CREATOR constant fields. Callers should use
      the Bundle toBundle() and static Foo fromBundle(Bundle) methods on
      each type instead.

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot changed the title Update media3 to v1.4.0 Update media3 to v1.4.1 Aug 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants