mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Merge release notes for media3 1.4.0 stable release
#cherrypick PiperOrigin-RevId: 653261278
This commit is contained in:
parent
a86b5f065f
commit
68e8d9cb68
370
RELEASENOTES.md
370
RELEASENOTES.md
@ -89,116 +89,10 @@
|
|||||||
|
|
||||||
## 1.4
|
## 1.4
|
||||||
|
|
||||||
### 1.4.0-rc01 (2024-07-11)
|
### 1.4.0 (2024-07-24)
|
||||||
|
|
||||||
This release includes the following changes since the
|
This release includes the following changes since the
|
||||||
[1.4.0-beta01 release](#140-beta01-2024-06-21):
|
[1.3.1 release](#131-2024-04-11):
|
||||||
|
|
||||||
* Common Library:
|
|
||||||
* Add `Format.customData` to store app-provided custom information about
|
|
||||||
`Format` instances.
|
|
||||||
* ExoPlayer:
|
|
||||||
* Fix some audio focus inconsistencies, e.g. not reporting full or
|
|
||||||
transient focus loss while the player is paused
|
|
||||||
([#1436](https://github.com/androidx/media/issues/1436)).
|
|
||||||
* Fix potential `IndexOutOfBoundsException` caused by extractors reporting
|
|
||||||
additional tracks after the initial preparation step
|
|
||||||
([#1476](https://github.com/androidx/media/issues/1476)).
|
|
||||||
* `Effects` in `ExoPlayer.setVideoEffect()` will receive the timestamps
|
|
||||||
with the renderer offset removed
|
|
||||||
([#1098](https://github.com/androidx/media/issues/1098)).
|
|
||||||
* Fix potential `IllegalArgumentException` when handling player error that
|
|
||||||
happened while reading ahead into another playlist item
|
|
||||||
([#1483](https://github.com/androidx/media/issues/1483)).
|
|
||||||
* Text:
|
|
||||||
* Fix an `IllegalArgumentException` from `LegacySubtitleUtil` when a
|
|
||||||
WebVTT subtitle sample contains no cues, e.g. as part of a DASH stream
|
|
||||||
([#1516](https://github.com/androidx/media/issues/1516)).
|
|
||||||
* Session:
|
|
||||||
* 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:
|
|
||||||
* Work around a platform bug causing stretched/cropped video when using
|
|
||||||
`SurfaceView` inside a Compose `AndroidView` on API 34
|
|
||||||
([#1237](https://github.com/androidx/media/issues/1237)).
|
|
||||||
* Demo app:
|
|
||||||
* Use `HttpEngineDataSource` as the `HttpDataSource` when supported by the
|
|
||||||
device.
|
|
||||||
|
|
||||||
### 1.4.0-beta01 (2024-06-21)
|
|
||||||
|
|
||||||
This release includes the following changes since the
|
|
||||||
[1.4.0-alpha02 release](#140-alpha02-2024-06-06):
|
|
||||||
|
|
||||||
* ExoPlayer:
|
|
||||||
* 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](https://github.com/androidx/media/issues/1425)).
|
|
||||||
* Transformer:
|
|
||||||
* 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:
|
|
||||||
* Fix PCM audio format extraction in AVI containers.
|
|
||||||
* Image:
|
|
||||||
* Allow `null` as parameter for `ExoPlayer.setImageOutput` to clear a
|
|
||||||
previously set `ImageOutput`.
|
|
||||||
* Effect:
|
|
||||||
* 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.setHdrLuminanceMultiplier`.
|
|
||||||
* Session:
|
|
||||||
* 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`.
|
|
||||||
* UI:
|
|
||||||
* Add image display support to `PlayerView` when connected to an
|
|
||||||
`ExoPlayer` ([#1144](https://github.com/androidx/media/issues/1144)).
|
|
||||||
* Add customization of various icons in `PlayerControlView` through xml
|
|
||||||
attributes to allow different drawables per `PlayerView` instance,
|
|
||||||
rather than global overrides
|
|
||||||
([#1200](https://github.com/androidx/media/issues/1200)).
|
|
||||||
* HLS Extension:
|
|
||||||
* Fix a bug where non-primary playing playlists are not refreshed during
|
|
||||||
live playback ([#1240](https://github.com/androidx/media/issues/1240)).
|
|
||||||
* Remove deprecated symbols:
|
|
||||||
* 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.
|
|
||||||
|
|
||||||
### 1.4.0-alpha02 (2024-06-06)
|
|
||||||
|
|
||||||
This release includes the following changes since the
|
|
||||||
[1.4.0-alpha01 release](#140-alpha01-2024-04-11):
|
|
||||||
|
|
||||||
* Common Library:
|
* Common Library:
|
||||||
* Forward presumed no-op seek calls to the protected `BasePlayer.seekTo`
|
* Forward presumed no-op seek calls to the protected `BasePlayer.seekTo`
|
||||||
@ -209,7 +103,29 @@ This release includes the following changes since the
|
|||||||
([#1312](https://github.com/androidx/media/issues/1312)).
|
([#1312](https://github.com/androidx/media/issues/1312)).
|
||||||
* Ensure the duration passed to `MediaItem.Builder.setImageDurationMs` is
|
* Ensure the duration passed to `MediaItem.Builder.setImageDurationMs` is
|
||||||
ignored for a non-image `MediaItem` (as documented).
|
ignored for a non-image `MediaItem` (as documented).
|
||||||
|
* Add `Format.customData` to store app-provided custom information about
|
||||||
|
`Format` instances.
|
||||||
* ExoPlayer:
|
* 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
|
* Add `reset` to `BasePreloadManager` to release all the holding sources
|
||||||
while keep the preload manager instance.
|
while keep the preload manager instance.
|
||||||
* Add `ExoPlayer.setPriority` (and `Builder.setPriority`) to define the
|
* Add `ExoPlayer.setPriority` (and `Builder.setPriority`) to define the
|
||||||
@ -259,7 +175,33 @@ This release includes the following changes since the
|
|||||||
* Fix bug where enabling CMCD for HLS live streams causes
|
* Fix bug where enabling CMCD for HLS live streams causes
|
||||||
`ArrayIndexOutOfBoundsException`
|
`ArrayIndexOutOfBoundsException`
|
||||||
([#1395](https://github.com/androidx/media/issues/1395)).
|
([#1395](https://github.com/androidx/media/issues/1395)).
|
||||||
|
* 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](https://github.com/androidx/media/issues/1425)).
|
||||||
|
* Fix some audio focus inconsistencies, e.g. not reporting full or
|
||||||
|
transient focus loss while the player is paused
|
||||||
|
([#1436](https://github.com/androidx/media/issues/1436)).
|
||||||
|
* Fix potential `IndexOutOfBoundsException` caused by extractors reporting
|
||||||
|
additional tracks after the initial preparation step
|
||||||
|
([#1476](https://github.com/androidx/media/issues/1476)).
|
||||||
|
* `Effects` in `ExoPlayer.setVideoEffect()` will receive the timestamps
|
||||||
|
with the renderer offset removed
|
||||||
|
([#1098](https://github.com/androidx/media/issues/1098)).
|
||||||
|
* Fix potential `IllegalArgumentException` when handling player error that
|
||||||
|
happened while reading ahead into another playlist item
|
||||||
|
([#1483](https://github.com/androidx/media/issues/1483)).
|
||||||
* Transformer:
|
* 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
|
* Work around a decoder bug where the number of audio channels was capped
|
||||||
at stereo when handling PCM input.
|
at stereo when handling PCM input.
|
||||||
* When selecting tracks in `ExoPlayerAssetLoader`, ignore audio channel
|
* When selecting tracks in `ExoPlayerAssetLoader`, ignore audio channel
|
||||||
@ -270,6 +212,10 @@ This release includes the following changes since the
|
|||||||
* Fix HEIC image loading from content URI schemes.
|
* Fix HEIC image loading from content URI schemes.
|
||||||
([#1373](https://github.com/androidx/media/issues/1373)).
|
([#1373](https://github.com/androidx/media/issues/1373)).
|
||||||
* Adjust audio track duration in `AudioGraphInput` to improve AV sync.
|
* 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:
|
* Extractors:
|
||||||
* MPEG-TS: Roll forward the change ensuring the last frame is rendered by
|
* 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
|
passing the last access unit of a stream to the sample queue
|
||||||
@ -288,6 +234,7 @@ This release includes the following changes since the
|
|||||||
extrapolating from the bitrate of the frame after the `Info` frame,
|
extrapolating from the bitrate of the frame after the `Info` frame,
|
||||||
which may be artificially small, e.g. `PCUT` frame
|
which may be artificially small, e.g. `PCUT` frame
|
||||||
([#1376](https://github.com/androidx/media/issues/1376)).
|
([#1376](https://github.com/androidx/media/issues/1376)).
|
||||||
|
* Fix PCM audio format extraction in AVI containers.
|
||||||
* Audio:
|
* Audio:
|
||||||
* Fix DTS:X Profile 2 encoding attributes for passthrough playback
|
* Fix DTS:X Profile 2 encoding attributes for passthrough playback
|
||||||
([#1299](https://github.com/androidx/media/pull/1299)).
|
([#1299](https://github.com/androidx/media/pull/1299)).
|
||||||
@ -303,6 +250,8 @@ This release includes the following changes since the
|
|||||||
ExoPlayer will dynamically schedule its main work loop to when the
|
ExoPlayer will dynamically schedule its main work loop to when the
|
||||||
MediaCodecAudioRenderer can make progress.
|
MediaCodecAudioRenderer can make progress.
|
||||||
* Video:
|
* 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
|
* Fix decoder fallback logic for Dolby Vision to use a compatible AV1
|
||||||
decoder if needed
|
decoder if needed
|
||||||
([#1389](https://github.com/androidx/media/pull/1389)).
|
([#1389](https://github.com/androidx/media/pull/1389)).
|
||||||
@ -339,6 +288,9 @@ This release includes the following changes since the
|
|||||||
* CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive
|
* CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive
|
||||||
handling of the 'set pen location' command
|
handling of the 'set pen location' command
|
||||||
([#1315](https://github.com/androidx/media/pull/1315)).
|
([#1315](https://github.com/androidx/media/pull/1315)).
|
||||||
|
* Fix an `IllegalArgumentException` from `LegacySubtitleUtil` when a
|
||||||
|
WebVTT subtitle sample contains no cues, e.g. as part of a DASH stream
|
||||||
|
([#1516](https://github.com/androidx/media/issues/1516)).
|
||||||
* Metadata:
|
* Metadata:
|
||||||
* Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort'
|
* Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort'
|
||||||
(`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4
|
(`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4
|
||||||
@ -352,7 +304,15 @@ This release includes the following changes since the
|
|||||||
* Add support for non-square DASH thumbnail grids
|
* Add support for non-square DASH thumbnail grids
|
||||||
([#1300](https://github.com/androidx/media/pull/1300)).
|
([#1300](https://github.com/androidx/media/pull/1300)).
|
||||||
* Add support for AVIF for API 34+.
|
* Add support for AVIF for API 34+.
|
||||||
|
* Allow `null` as parameter for `ExoPlayer.setImageOutput` to clear a
|
||||||
|
previously set `ImageOutput`.
|
||||||
* DataSource:
|
* 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
|
* Allow `ByteArrayDataSource` to resolve a URI to a byte array during
|
||||||
`open()`, instead of being hard-coded at construction
|
`open()`, instead of being hard-coded at construction
|
||||||
([#1405](https://github.com/androidx/media/issues/1405)).
|
([#1405](https://github.com/androidx/media/issues/1405)).
|
||||||
@ -361,6 +321,17 @@ This release includes the following changes since the
|
|||||||
`DefaultDrmSessionManagerProvider`
|
`DefaultDrmSessionManagerProvider`
|
||||||
([#1271](https://github.com/androidx/media/issues/1271)).
|
([#1271](https://github.com/androidx/media/issues/1271)).
|
||||||
* Effect:
|
* 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
|
* Fix bug where `TimestampWrapper` crashes when used with
|
||||||
`ExoPlayer#setVideoEffects`
|
`ExoPlayer#setVideoEffects`
|
||||||
([#821](https://github.com/androidx/media/issues/821)).
|
([#821](https://github.com/androidx/media/issues/821)).
|
||||||
@ -373,6 +344,10 @@ This release includes the following changes since the
|
|||||||
content (uses the HLG range).
|
content (uses the HLG range).
|
||||||
* Add support for Ultra HDR (bitmap) overlays on HDR content.
|
* Add support for Ultra HDR (bitmap) overlays on HDR content.
|
||||||
* Allow `SeparableConvolution` effects to be used before API 26.
|
* 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.setHdrLuminanceMultiplier`.
|
||||||
* IMA extension:
|
* IMA extension:
|
||||||
* Promote API that is required for apps to play
|
* Promote API that is required for apps to play
|
||||||
[DAI ad streams](https://developers.google.com/ad-manager/dynamic-ad-insertion/full-service)
|
[DAI ad streams](https://developers.google.com/ad-manager/dynamic-ad-insertion/full-service)
|
||||||
@ -387,6 +362,20 @@ This release includes the following changes since the
|
|||||||
using `data://` ad tag URIs
|
using `data://` ad tag URIs
|
||||||
([#700](https://github.com/androidx/media/issues/700)).
|
([#700](https://github.com/androidx/media/issues/700)).
|
||||||
* Session:
|
* 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](https://github.com/androidx/media/issues/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
|
* Hide seekbar in the media notification for live streams by not setting
|
||||||
the duration into the platform session metadata
|
the duration into the platform session metadata
|
||||||
([#1256](https://github.com/androidx/media/issues/1256)).
|
([#1256](https://github.com/androidx/media/issues/1256)).
|
||||||
@ -399,6 +388,50 @@ This release includes the following changes since the
|
|||||||
is used to update the `PlaybackState` of the platform session to an
|
is used to update the `PlaybackState` of the platform session to an
|
||||||
error state with the given error information
|
error state with the given error information
|
||||||
([#543](https://github.com/androidx/media/issues/543)).
|
([#543](https://github.com/androidx/media/issues/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](https://github.com/androidx/media/issues/1144)).
|
||||||
|
* Add customization of various icons in `PlayerControlView` through xml
|
||||||
|
attributes to allow different drawables per `PlayerView` instance,
|
||||||
|
rather than global overrides
|
||||||
|
([#1200](https://github.com/androidx/media/issues/1200)).
|
||||||
|
* Work around a platform bug causing stretched/cropped video when using
|
||||||
|
`SurfaceView` inside a Compose `AndroidView` on API 34
|
||||||
|
([#1237](https://github.com/androidx/media/issues/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](https://github.com/androidx/media/issues/1224)).
|
||||||
* Cronet Extension:
|
* Cronet Extension:
|
||||||
* Fix `SocketTimeoutException` in `CronetDataSource`. In some versions of
|
* Fix `SocketTimeoutException` in `CronetDataSource`. In some versions of
|
||||||
Cronet, the request provided by the callback is not always the same.
|
Cronet, the request provided by the callback is not always the same.
|
||||||
@ -413,6 +446,8 @@ This release includes the following changes since the
|
|||||||
([#1240](https://github.com/androidx/media/issues/1240)).
|
([#1240](https://github.com/androidx/media/issues/1240)).
|
||||||
* Fix bug where enabling CMCD for HLS with initialization segments
|
* Fix bug where enabling CMCD for HLS with initialization segments
|
||||||
resulted in `Source Error` and `IllegalArgumentException`.
|
resulted in `Source Error` and `IllegalArgumentException`.
|
||||||
|
* Fix bug where non-primary playing playlists are not refreshed during
|
||||||
|
live playback ([#1240](https://github.com/androidx/media/issues/1240)).
|
||||||
* DASH Extension:
|
* DASH Extension:
|
||||||
* Fix bug where re-preparing a multi-period live stream can throw an
|
* Fix bug where re-preparing a multi-period live stream can throw an
|
||||||
`IndexOutOfBoundsException`
|
`IndexOutOfBoundsException`
|
||||||
@ -423,10 +458,23 @@ This release includes the following changes since the
|
|||||||
* Fix bug that converted the album title of the `MediaQueueItem` to the
|
* Fix bug that converted the album title of the `MediaQueueItem` to the
|
||||||
artist in the Media3 media item
|
artist in the Media3 media item
|
||||||
([#1255](https://github.com/androidx/media/pull/1255)).
|
([#1255](https://github.com/androidx/media/pull/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:
|
* Demo app:
|
||||||
|
* Use `DefaultPreloadManager` in the short form demo app.
|
||||||
* Allow setting repeat mode with `Intent` arguments from command line
|
* Allow setting repeat mode with `Intent` arguments from command line
|
||||||
([#1266](https://github.com/androidx/media/pull/1266)).
|
([#1266](https://github.com/androidx/media/pull/1266)).
|
||||||
|
* Use `HttpEngineDataSource` as the `HttpDataSource` when supported by the
|
||||||
|
device.
|
||||||
* Remove deprecated symbols:
|
* Remove deprecated symbols:
|
||||||
|
* Remove `CronetDataSourceFactory`. Use `CronetDataSource.Factory`
|
||||||
|
instead.
|
||||||
|
* Remove some `DataSpec` constructors. Use `DataSpec.Builder` instead.
|
||||||
* Remove `setContentTypePredicate(Predicate)` method from
|
* Remove `setContentTypePredicate(Predicate)` method from
|
||||||
`DefaultHttpDataSource`, `OkHttpDataSource` and `CronetDataSource`. Use
|
`DefaultHttpDataSource`, `OkHttpDataSource` and `CronetDataSource`. Use
|
||||||
the equivalent method on each `XXXDataSource.Factory` instead.
|
the equivalent method on each `XXXDataSource.Factory` instead.
|
||||||
@ -454,98 +502,26 @@ This release includes the following changes since the
|
|||||||
`FORMAT_UNSUPPORTED_SUBTYPE`, `FORMAT_UNSUPPORTED_TYPE` constants. Use
|
`FORMAT_UNSUPPORTED_SUBTYPE`, `FORMAT_UNSUPPORTED_TYPE` constants. Use
|
||||||
the equivalent IntDef and constants in `androidx.media3.common.C`
|
the equivalent IntDef and constants in `androidx.media3.common.C`
|
||||||
instead (e.g. `C.FORMAT_HANDLED`).
|
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.
|
||||||
|
|
||||||
|
### 1.4.0-rc01 (2024-07-11)
|
||||||
|
|
||||||
|
Use the 1.4.0 [stable version](#140-2024-07-24).
|
||||||
|
|
||||||
|
### 1.4.0-beta01 (2024-06-21)
|
||||||
|
|
||||||
|
Use the 1.4.0 [stable version](#140-2024-07-24).
|
||||||
|
|
||||||
|
### 1.4.0-alpha02 (2024-06-06)
|
||||||
|
|
||||||
|
Use the 1.4.0 [stable version](#140-2024-07-24).
|
||||||
|
|
||||||
### 1.4.0-alpha01 (2024-04-11)
|
### 1.4.0-alpha01 (2024-04-11)
|
||||||
|
|
||||||
This release includes the following changes since the
|
Use the 1.4.0 [stable version](#140-2024-07-24).
|
||||||
[1.3.1 release](#131-2024-04-11):
|
|
||||||
|
|
||||||
* 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`.
|
|
||||||
* 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.
|
|
||||||
* Video:
|
|
||||||
* Fix issue where `Listener.onRenderedFirstFrame()` arrives too early when
|
|
||||||
switching surfaces mid-playback.
|
|
||||||
* 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.
|
|
||||||
* 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`.
|
|
||||||
* 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](https://github.com/androidx/media/issues/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.
|
|
||||||
* 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](https://github.com/androidx/media/issues/1224)).
|
|
||||||
* 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.
|
|
||||||
* Remove deprecated symbols:
|
|
||||||
* Remove `CronetDataSourceFactory`. Use `CronetDataSource.Factory`
|
|
||||||
instead.
|
|
||||||
* Remove some `DataSpec` constructors. Use `DataSpec.Builder` instead.
|
|
||||||
|
|
||||||
## 1.3
|
## 1.3
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user