mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Merge release notes for media3 1.2.0 stable release
PiperOrigin-RevId: 580923121
This commit is contained in:
parent
3918d36200
commit
7ee07a5ff5
409
RELEASENOTES.md
409
RELEASENOTES.md
@ -78,95 +78,29 @@
|
|||||||
|
|
||||||
## 1.2
|
## 1.2
|
||||||
|
|
||||||
### 1.2.0-rc01 (2023-11-01)
|
### 1.2.0 (2023-11-15)
|
||||||
|
|
||||||
This release includes the following changes since the
|
This release includes the following changes since the
|
||||||
[1.2.0-beta01 release](#120-beta01-2023-10-18):
|
[1.1.1 release](#111-2023-08-14):
|
||||||
|
|
||||||
* ExoPlayer:
|
|
||||||
* Add luma and chroma bitdepth to `ColorInfo`
|
|
||||||
[#491](https://github.com/androidx/media/pull/491).
|
|
||||||
* Track Selection:
|
|
||||||
* Add `DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness`
|
|
||||||
to explicitly allow or disallow non-seamless adaptation. The default
|
|
||||||
stays at its current behavior of `true`.
|
|
||||||
* Audio:
|
|
||||||
* Fix DTS Express audio buffer underflow issue
|
|
||||||
([#650](https://github.com/androidx/media/pull/650)).
|
|
||||||
* Fix bug where the capabilities check for E-AC3-JOC throws an
|
|
||||||
`IllegalArgumentException`
|
|
||||||
([#677](https://github.com/androidx/media/issues/677)).
|
|
||||||
* Text:
|
|
||||||
* Remove `ExoplayerCuesDecoder`. Text tracks with `sampleMimeType =
|
|
||||||
application/x-media3-cues` are now directly handled by `TextRenderer`
|
|
||||||
without needing a `SubtitleDecoder` instance.
|
|
||||||
* Session:
|
|
||||||
* Do not set the queue of the framework session when
|
|
||||||
`COMMAND_GET_TIMELINE` is not available for the media notification
|
|
||||||
controller. With Android Auto as the client controller reading from the
|
|
||||||
framework session, this has the effect that the `queue` button in the UI
|
|
||||||
of Android Auto is not displayed
|
|
||||||
(([#339](https://github.com/androidx/media/issues/339)).
|
|
||||||
* Use `DataSourceBitmapLoader` by default instead of `SimpleBitmapLoader`
|
|
||||||
([#271](https://github.com/androidx/media/issues/271),[#327](https://github.com/androidx/media/issues/327)).
|
|
||||||
* Add `MediaSession.Callback.onMediaButtonEvent(Intent)` that allows apps
|
|
||||||
to override the default media button event handling.
|
|
||||||
* HLS Extension:
|
|
||||||
* Refresh the HLS live playlist with an interval calculated from the last
|
|
||||||
load start time rather than the last load completed time
|
|
||||||
([#663](https://github.com/androidx/media/issues/663)).
|
|
||||||
* DASH Extension:
|
|
||||||
* Add experimental support for parsing subtitles during extraction. This
|
|
||||||
has better support for merging overlapping subtitles, including
|
|
||||||
resolving flickering when transitioning between subtitle segments. You
|
|
||||||
can enable this using
|
|
||||||
`DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()`
|
|
||||||
([#288](https://github.com/androidx/media/issues/288)).
|
|
||||||
* Decoder Extensions (FFmpeg, VP9, AV1, MIDI, etc.):
|
|
||||||
* Fix bug publishing MIDI decoder artifact to Maven repository. The
|
|
||||||
artifact is renamed to `media3-exoplayer-midi`
|
|
||||||
([#734](https://github.com/androidx/media/issues/734)).
|
|
||||||
* Remove deprecated symbols:
|
|
||||||
* Remove deprecated `DownloadNotificationHelper.buildProgressNotification`
|
|
||||||
method, use a non deprecated method that takes a `notMetRequirements`
|
|
||||||
parameter instead.
|
|
||||||
|
|
||||||
### 1.2.0-beta01 (2023-10-18)
|
|
||||||
|
|
||||||
This release includes the following changes since the
|
|
||||||
[1.2.0-alpha02 release](#120-alpha02-2023-09-29):
|
|
||||||
|
|
||||||
* Audio:
|
|
||||||
* Add `onAudioTrackInitialized` and `onAudioTrackReleased` callbacks to
|
|
||||||
`AnalyticsListener`, `AudioRendererEventListener` and
|
|
||||||
`AudioSink.Listener`.
|
|
||||||
* Metadata:
|
|
||||||
* `MetadataDecoder.decode` will no longer be called for "decode-only"
|
|
||||||
samples as the implementation must return null anyway.
|
|
||||||
* Session:
|
|
||||||
* Add session demo module for Automotive OS and enable session demo for
|
|
||||||
Android Auto.
|
|
||||||
* DASH Extension:
|
|
||||||
* Allow multiple of the same DASH identifier in segment template url.
|
|
||||||
* RTSP Extension:
|
|
||||||
* Use RTSP Setup Response timeout value in time interval of sending
|
|
||||||
keep-alive RTSP Options requests
|
|
||||||
([#662](https://github.com/androidx/media/issues/662)).
|
|
||||||
* Decoder Extensions (FFmpeg, VP9, AV1, MIDI, etc.):
|
|
||||||
* Add `DecoderOutputBuffer.shouldBeSkipped` to directly mark output
|
|
||||||
buffers that don't need to be presented. This is preferred over
|
|
||||||
`C.BUFFER_FLAG_DECODE_ONLY` that will be deprecated.
|
|
||||||
* Add `Decoder.setOutputStartTimeUs` and
|
|
||||||
`SimpleDecoder.isAtLeastOutputStartTimeUs` to allow decoders to drop
|
|
||||||
decode-only samples before the start time. This should be preferred to
|
|
||||||
`Buffer.isDecodeOnly` that will be deprecated.
|
|
||||||
|
|
||||||
### 1.2.0-alpha02 (2023-09-29)
|
|
||||||
|
|
||||||
This release includes the following changes since the
|
|
||||||
[1.2.0-alpha01 release](#120-alpha01-2023-08-17):
|
|
||||||
|
|
||||||
* Common Library:
|
* Common Library:
|
||||||
|
* Add a `@Nullable Throwable` parameter to the methods in the `Log.Logger`
|
||||||
|
interface. The `message` parameter to these methods no longer contains
|
||||||
|
any information about the `Throwable` passed to the `Log.{d,i,w,e}()`
|
||||||
|
methods, so implementations will need to manually append this
|
||||||
|
information if desired (possibly using
|
||||||
|
`Logger.appendThrowableString(String, Throwable)`).
|
||||||
|
* Fix Kotlin compatibility issue where nullable generic type parameters
|
||||||
|
and nullable array element types are not detected as nullable. Examples
|
||||||
|
are `TrackSelectorResult` and `SimpleDecoder` method parameters
|
||||||
|
([#6792](https://github.com/google/ExoPlayer/issues/6792)).
|
||||||
|
* Change default UI and notification behavior in
|
||||||
|
`Util.shouldShowPlayButton` to show a "play" button while playback is
|
||||||
|
temporarily suppressed (e.g. due to transient audio focus loss). The
|
||||||
|
legacy behavior can be maintained by using
|
||||||
|
`PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)` or
|
||||||
|
`MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)`
|
||||||
|
([#11213](https://github.com/google/ExoPlayer/issues/11213)).
|
||||||
* Upgrade `androidx.annotation:annotation-experimental` to `1.3.1`. This
|
* Upgrade `androidx.annotation:annotation-experimental` to `1.3.1`. This
|
||||||
also introduces a transitive dependency on the Kotlin standard library
|
also introduces a transitive dependency on the Kotlin standard library
|
||||||
from `media3-common`. Apps can
|
from `media3-common`. Apps can
|
||||||
@ -174,6 +108,42 @@ This release includes the following changes since the
|
|||||||
Fixes https://issuetracker.google.com/251172715.
|
Fixes https://issuetracker.google.com/251172715.
|
||||||
* Move `ExoPlayer.setAudioAttributes` to the `Player` interface.
|
* Move `ExoPlayer.setAudioAttributes` to the `Player` interface.
|
||||||
* ExoPlayer:
|
* ExoPlayer:
|
||||||
|
* Fix seeking issues in AC4 streams caused by not identifying decode-only
|
||||||
|
samples correctly
|
||||||
|
([#11000](https://github.com/google/ExoPlayer/issues/11000)).
|
||||||
|
* Add suppression of playback on unsuitable audio output devices (e.g. the
|
||||||
|
built-in speaker on Wear OS devices) when this feature is enabled via
|
||||||
|
`ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput`. The playback
|
||||||
|
suppression reason will be updated as
|
||||||
|
`Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT` if playback
|
||||||
|
is attempted when no suitable audio outputs are available, or if all
|
||||||
|
suitable outputs are disconnected during playback. The suppression
|
||||||
|
reason will be removed when a suitable output is connected.
|
||||||
|
* Add `MediaSource.canUpdateMediaItem` and `MediaSource.updateMediaItem`
|
||||||
|
to accept `MediaItem` updates after creation via
|
||||||
|
`Player.replaceMediaItem(s)`.
|
||||||
|
* Allow `MediaItem` updates for all `MediaSource` classes provided by the
|
||||||
|
library via `Player.replaceMediaItem(s)`
|
||||||
|
([#33](https://github.com/androidx/media/issues/33),
|
||||||
|
[#9978](https://github.com/google/ExoPlayer/issues/9978)).
|
||||||
|
* Rename `MimeTypes.TEXT_EXOPLAYER_CUES` to
|
||||||
|
`MimeTypes.APPLICATION_MEDIA3_CUES`.
|
||||||
|
* Add `PngExtractor` that sends and reads a whole PNG file into the
|
||||||
|
`TrackOutput` as one sample.
|
||||||
|
* Enhance `SequenceableLoader.continueLoading(long)` method in the
|
||||||
|
`SequenceableLoader` interface to
|
||||||
|
`SequenceableLoader.continueLoading(LoadingInfo loadingInfo)`.
|
||||||
|
`LoadingInfo` contains additional parameters, including `playbackSpeed`
|
||||||
|
and `lastRebufferRealtimeMs` in addition to the existing
|
||||||
|
`playbackPositionUs`.
|
||||||
|
* Enhance `ChunkSource.getNextChunk(long, long, List, ChunkHolder)` method
|
||||||
|
in the `ChunkSource` interface to `ChunkSource.getNextChunk(LoadingInfo,
|
||||||
|
long, List, ChunkHolder)`.
|
||||||
|
* Add additional fields to Common Media Client Data (CMCD) logging: buffer
|
||||||
|
starvation (`bs`), deadline (`dl`), playback rate (`pr`) and startup
|
||||||
|
(`su`) ([#8699](https://github.com/google/ExoPlayer/issues/8699)).
|
||||||
|
* Add luma and chroma bitdepth to `ColorInfo`
|
||||||
|
([#491](https://github.com/androidx/media/pull/491)).
|
||||||
* Add additional fields to Common Media Client Data (CMCD) logging: next
|
* Add additional fields to Common Media Client Data (CMCD) logging: next
|
||||||
object request (`nor`) and next range request (`nrr`)
|
object request (`nor`) and next range request (`nrr`)
|
||||||
([#8699](https://github.com/google/ExoPlayer/issues/8699)).
|
([#8699](https://github.com/google/ExoPlayer/issues/8699)).
|
||||||
@ -189,9 +159,28 @@ This release includes the following changes since the
|
|||||||
* Change `BaseRenderer.onStreamChanged()` to also receive a
|
* Change `BaseRenderer.onStreamChanged()` to also receive a
|
||||||
`MediaPeriodId` argument.
|
`MediaPeriodId` argument.
|
||||||
* Transformer:
|
* Transformer:
|
||||||
|
* Parse EXIF rotation data for image inputs.
|
||||||
|
* Remove `TransformationRequest.HdrMode` annotation type and its
|
||||||
|
associated constants. Use `Composition.HdrMode` and its associated
|
||||||
|
constants instead.
|
||||||
|
* Simplify the `OverlaySettings` to fix rotation issues.
|
||||||
* Changed `frameRate` and `durationUs` parameters of
|
* Changed `frameRate` and `durationUs` parameters of
|
||||||
`SampleConsumer.queueInputBitmap` to `TimestampIterator`.
|
`SampleConsumer.queueInputBitmap` to `TimestampIterator`.
|
||||||
|
* Track Selection:
|
||||||
|
* Add `DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness`
|
||||||
|
to explicitly allow or disallow non-seamless adaptation. The default
|
||||||
|
stays at its current behavior of `true`.
|
||||||
* Extractors:
|
* Extractors:
|
||||||
|
* MPEG-TS: Ensure the last frame is rendered by passing the last access
|
||||||
|
unit of a stream to the sample queue
|
||||||
|
([#7909](https://github.com/google/ExoPlayer/issues/7909)).
|
||||||
|
* Fix typo when determining `rotationDegrees`. Changed
|
||||||
|
`projectionPosePitch` to `projectionPoseRoll`
|
||||||
|
([#461](https://github.com/androidx/media/pull/461)).
|
||||||
|
* Remove the assumption that `Extractor` instances can be directly
|
||||||
|
inspected with `instanceof`. If you want runtime access to the
|
||||||
|
implementation details of an `Extractor` you must first call
|
||||||
|
`Extractor.getUnderlyingInstance`.
|
||||||
* Add `BmpExtractor`.
|
* Add `BmpExtractor`.
|
||||||
* Add `WebpExtractor`.
|
* Add `WebpExtractor`.
|
||||||
* Add `HeifExtractor`.
|
* Add `HeifExtractor`.
|
||||||
@ -199,6 +188,33 @@ This release includes the following changes since the
|
|||||||
[QuickTime classic](https://developer.apple.com/standards/qtff-2001.pdf)
|
[QuickTime classic](https://developer.apple.com/standards/qtff-2001.pdf)
|
||||||
support to `Mp4Extractor`.
|
support to `Mp4Extractor`.
|
||||||
* Audio:
|
* Audio:
|
||||||
|
* Add support for 24/32-bit big-endian PCM in MP4 and Matroska, and parse
|
||||||
|
PCM encoding for `lpcm` in MP4.
|
||||||
|
* Add support for extracting Vorbis audio in MP4.
|
||||||
|
* Add `AudioSink.getFormatOffloadSupport(Format)` that retrieves level of
|
||||||
|
offload support the sink can provide for the format through a
|
||||||
|
`DefaultAudioOffloadSupportProvider`. It returns the new
|
||||||
|
`AudioOffloadSupport` that contains `isFormatSupported`,
|
||||||
|
`isGaplessSupported`, and `isSpeedChangeSupported`.
|
||||||
|
* Add `AudioSink.setOffloadMode()` through which the offload configuration
|
||||||
|
on the audio sink is configured. Default is
|
||||||
|
`AudioSink.OFFLOAD_MODE_DISABLED`.
|
||||||
|
* Offload can be enabled through `setAudioOffloadPreference` in
|
||||||
|
`TrackSelectionParameters`. If the set preference is to enable, the
|
||||||
|
device supports offload for the format, and the track selection is a
|
||||||
|
single audio track, then audio offload will be enabled.
|
||||||
|
* If `audioOffloadModePreference` is set to
|
||||||
|
`AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED`, then the
|
||||||
|
`DefaultTrackSelector` will only select an audio track and only if that
|
||||||
|
track's format is supported in offload. If no audio track is supported
|
||||||
|
in offload, then no track will be selected.
|
||||||
|
* Disabling gapless support for offload when pre-API level 33 due to
|
||||||
|
playback position issue after track transition.
|
||||||
|
* Remove parameter `enableOffload` from
|
||||||
|
`DefaultRenderersFactory.buildAudioSink` method signature.
|
||||||
|
* Remove method `DefaultAudioSink.Builder.setOffloadMode`.
|
||||||
|
* Remove intdef value
|
||||||
|
`DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED`.
|
||||||
* Add support for Opus gapless metadata during offload playback.
|
* Add support for Opus gapless metadata during offload playback.
|
||||||
* Allow renderer recovery by disabling offload if failed at first write
|
* Allow renderer recovery by disabling offload if failed at first write
|
||||||
([#627](https://github.com/androidx/media/issues/627)).
|
([#627](https://github.com/androidx/media/issues/627)).
|
||||||
@ -210,7 +226,33 @@ This release includes the following changes since the
|
|||||||
`onOffloadedPlayback`.
|
`onOffloadedPlayback`.
|
||||||
* Move audio offload mode related `TrackSelectionParameters` interfaces
|
* Move audio offload mode related `TrackSelectionParameters` interfaces
|
||||||
and definitions to an inner `AudioOffloadPreferences` class.
|
and definitions to an inner `AudioOffloadPreferences` class.
|
||||||
|
* Add `onAudioTrackInitialized` and `onAudioTrackReleased` callbacks to
|
||||||
|
`AnalyticsListener`, `AudioRendererEventListener` and
|
||||||
|
`AudioSink.Listener`.
|
||||||
|
* Fix DTS Express audio buffer underflow issue
|
||||||
|
([#650](https://github.com/androidx/media/pull/650)).
|
||||||
|
* Fix bug where the capabilities check for E-AC3-JOC throws an
|
||||||
|
`IllegalArgumentException`
|
||||||
|
([#677](https://github.com/androidx/media/issues/677)).
|
||||||
|
* Video:
|
||||||
|
* Allow `MediaCodecVideoRenderer` to use a custom
|
||||||
|
`VideoFrameProcessor.Factory`.
|
||||||
|
* Fix bug where the first frame couldn't be rendered if the audio stream
|
||||||
|
starts with negative timestamps
|
||||||
|
([#291](https://github.com/androidx/media/issues/291)).
|
||||||
|
* Text:
|
||||||
|
* Remove `ExoplayerCuesDecoder`. Text tracks with `sampleMimeType =
|
||||||
|
application/x-media3-cues` are now directly handled by `TextRenderer`
|
||||||
|
without needing a `SubtitleDecoder` instance.
|
||||||
|
* Metadata:
|
||||||
|
* `MetadataDecoder.decode` will no longer be called for "decode-only"
|
||||||
|
samples as the implementation must return null anyway.
|
||||||
* Effect:
|
* Effect:
|
||||||
|
* Add `VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)`
|
||||||
|
queuing bitmap input by timestamp.
|
||||||
|
* Change `VideoFrameProcessor.registerInputStream()` to be non-blocking.
|
||||||
|
Apps must implement
|
||||||
|
`VideoFrameProcessor.Listener#onInputStreamRegistered()`.
|
||||||
* Changed `frameRate` and `durationUs` parameters of
|
* Changed `frameRate` and `durationUs` parameters of
|
||||||
`VideoFrameProcessor.queueInputBitmap` to `TimestampIterator`.
|
`VideoFrameProcessor.queueInputBitmap` to `TimestampIterator`.
|
||||||
* IMA extension:
|
* IMA extension:
|
||||||
@ -245,133 +287,19 @@ This release includes the following changes since the
|
|||||||
successful, the subscription is accepted and `notifyChildrenChanged()`
|
successful, the subscription is accepted and `notifyChildrenChanged()`
|
||||||
is called immediately to inform the browser
|
is called immediately to inform the browser
|
||||||
([#561](https://github.com/androidx/media/issues/561)).
|
([#561](https://github.com/androidx/media/issues/561)).
|
||||||
* RTSP Extension:
|
* Add session demo module for Automotive OS and enable session demo for
|
||||||
* Fix a race condition that could lead to `IndexOutOfBoundsException` when
|
Android Auto.
|
||||||
falling back to TCP, or playback hanging in some situations.
|
* Do not set the queue of the framework session when
|
||||||
* Check state in RTSP setup when returning loading state of
|
`COMMAND_GET_TIMELINE` is not available for the media notification
|
||||||
`RtspMediaPeriod`
|
controller. With Android Auto as the client controller reading from the
|
||||||
([#577](https://github.com/androidx/media/issues/577)).
|
framework session, this has the effect that the `queue` button in the UI
|
||||||
* Ignore custom Rtsp request methods in Options response public header
|
of Android Auto is not displayed
|
||||||
([#613](https://github.com/androidx/media/issues/613)).
|
([#339](https://github.com/androidx/media/issues/339)).
|
||||||
* Leanback extension:
|
* Use `DataSourceBitmapLoader` by default instead of `SimpleBitmapLoader`
|
||||||
* Fix bug where disabling a surface can cause an `ArithmeticException` in
|
([#271](https://github.com/androidx/media/issues/271),
|
||||||
Leanback code ([#617](https://github.com/androidx/media/issues/617)).
|
[#327](https://github.com/androidx/media/issues/327)).
|
||||||
|
* Add `MediaSession.Callback.onMediaButtonEvent(Intent)` that allows apps
|
||||||
### 1.2.0-alpha01 (2023-08-17)
|
to override the default media button event handling.
|
||||||
|
|
||||||
This release includes the following changes since the
|
|
||||||
[1.1.1 release](#111-2023-08-14):
|
|
||||||
|
|
||||||
* Common Library:
|
|
||||||
* Add a `@Nullable Throwable` parameter to the methods in the `Log.Logger`
|
|
||||||
interface. The `message` parameter to these methods no longer contains
|
|
||||||
any information about the `Throwable` passed to the `Log.{d,i,w,e}()`
|
|
||||||
methods, so implementations will need to manually append this
|
|
||||||
information if desired (possibly using
|
|
||||||
`Logger.appendThrowableString(String, Throwable)`).
|
|
||||||
* Fix Kotlin compatibility issue where nullable generic type parameters
|
|
||||||
and nullable array element types are not detected as nullable. Examples
|
|
||||||
are `TrackSelectorResult` and `SimpleDecoder` method parameters
|
|
||||||
([6792](https://github.com/google/ExoPlayer/issues/6792)).
|
|
||||||
* Change default UI and notification behavior in
|
|
||||||
`Util.shouldShowPlayButton` to show a "play" button while playback is
|
|
||||||
temporarily suppressed (e.g. due to transient audio focus loss). The
|
|
||||||
legacy behavior can be maintained by using
|
|
||||||
`PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)` or
|
|
||||||
`MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)`
|
|
||||||
([#11213](https://github.com/google/ExoPlayer/issues/11213)).
|
|
||||||
* ExoPlayer:
|
|
||||||
* Fix seeking issues in AC4 streams caused by not identifying decode-only
|
|
||||||
samples correctly
|
|
||||||
([#11000](https://github.com/google/ExoPlayer/issues/11000)).
|
|
||||||
* Add suppression of playback on unsuitable audio output devices (e.g. the
|
|
||||||
built-in speaker on Wear OS devices) when this feature is enabled via
|
|
||||||
`ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput`. The playback
|
|
||||||
suppression reason will be updated as
|
|
||||||
`Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT` if playback
|
|
||||||
is attempted when no suitable audio outputs are available, or if all
|
|
||||||
suitable outputs are disconnected during playback. The suppression
|
|
||||||
reason will be removed when a suitable output is connected.
|
|
||||||
* Add `MediaSource.canUpdateMediaItem` and `MediaSource.updateMediaItem`
|
|
||||||
to accept `MediaItem` updates after creation via
|
|
||||||
`Player.replaceMediaItem(s)`.
|
|
||||||
* Allow `MediaItem` updates for all `MediaSource` classes provided by the
|
|
||||||
library via `Player.replaceMediaItem(s)`
|
|
||||||
(([#33](https://github.com/androidx/media/issues/33)),([#9978](https://github.com/google/ExoPlayer/issues/9978))).
|
|
||||||
* Rename `MimeTypes.TEXT_EXOPLAYER_CUES` to
|
|
||||||
`MimeTypes.APPLICATION_MEDIA3_CUES`.
|
|
||||||
* Add `PngExtractor` that sends and reads a whole PNG file into the
|
|
||||||
`TrackOutput` as one sample.
|
|
||||||
* Enhance `SequenceableLoader.continueLoading(long)` method in the
|
|
||||||
`SequenceableLoader` interface to
|
|
||||||
`SequenceableLoader.continueLoading(LoadingInfo loadingInfo)`.
|
|
||||||
`LoadingInfo` contains additional parameters, including `playbackSpeed`
|
|
||||||
and `lastRebufferRealtimeMs` in addition to the existing
|
|
||||||
`playbackPositionUs`.
|
|
||||||
* Enhance `ChunkSource.getNextChunk(long, long, List, ChunkHolder)` method
|
|
||||||
in the `ChunkSource` interface to `ChunkSource.getNextChunk(LoadingInfo,
|
|
||||||
long, List, ChunkHolder)`.
|
|
||||||
* Add additional fields to Common Media Client Data (CMCD) logging: buffer
|
|
||||||
starvation (`bs`), deadline (`dl`), playback rate (`pr`) and startup
|
|
||||||
(`su`) ([#8699](https://github.com/google/ExoPlayer/issues/8699)).
|
|
||||||
* Transformer:
|
|
||||||
* Parse EXIF rotation data for image inputs.
|
|
||||||
* Remove `TransformationRequest.HdrMode` annotation type and its
|
|
||||||
associated constants. Use `Composition.HdrMode` and its associated
|
|
||||||
constants instead.
|
|
||||||
* Simplify the `OverlaySettings` to fix rotation issues.
|
|
||||||
* Extractors:
|
|
||||||
* MPEG-TS: Ensure the last frame is rendered by passing the last access
|
|
||||||
unit of a stream to the sample queue
|
|
||||||
([#7909](https://github.com/google/ExoPlayer/issues/7909)).
|
|
||||||
* Fix typo when determining `rotationDegrees`. Changed
|
|
||||||
`projectionPosePitch` to `projectionPoseRoll`
|
|
||||||
([#461](https://github.com/androidx/media/pull/461)).
|
|
||||||
* Remove the assumption that `Extractor` instances can be directly
|
|
||||||
inspected with `instanceof`. If you want runtime access to the
|
|
||||||
implementation details of an `Extractor` you must first call
|
|
||||||
`Extractor.getUnderlyingInstance`.
|
|
||||||
* Audio:
|
|
||||||
* Add support for 24/32-bit big-endian PCM in MP4 and Matroska, and parse
|
|
||||||
PCM encoding for `lpcm` in MP4.
|
|
||||||
* Add support for extracting Vorbis audio in MP4.
|
|
||||||
* Audio Offload:
|
|
||||||
* Add `AudioSink.getFormatOffloadSupport(Format)` that retrieves level of
|
|
||||||
offload support the sink can provide for the format through a
|
|
||||||
`DefaultAudioOffloadSupportProvider`. It returns the new
|
|
||||||
`AudioOffloadSupport` that contains `isFormatSupported`,
|
|
||||||
`isGaplessSupported`, and `isSpeedChangeSupported`.
|
|
||||||
* Add `AudioSink.setOffloadMode()` through which the offload configuration
|
|
||||||
on the audio sink is configured. Default is
|
|
||||||
`AudioSink.OFFLOAD_MODE_DISABLED`.
|
|
||||||
* Offload can be enabled through `setAudioOffloadPreference` in
|
|
||||||
`TrackSelectionParameters`. If the set preference is to enable, the
|
|
||||||
device supports offload for the format, and the track selection is a
|
|
||||||
single audio track, then audio offload will be enabled.
|
|
||||||
* If `audioOffloadModePreference` is set to
|
|
||||||
`AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED`, then the
|
|
||||||
`DefaultTrackSelector` will only select an audio track and only if that
|
|
||||||
track's format is supported in offload. If no audio track is supported
|
|
||||||
in offload, then no track will be selected.
|
|
||||||
* Disabling gapless support for offload when pre-API level 33 due to
|
|
||||||
playback position issue after track transition.
|
|
||||||
* Remove parameter `enableOffload` from
|
|
||||||
`DefaultRenderersFactory.buildAudioSink` method signature.
|
|
||||||
* Remove method `DefaultAudioSink.Builder.setOffloadMode`.
|
|
||||||
* Remove intdef value
|
|
||||||
`DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED`.
|
|
||||||
* Video:
|
|
||||||
* Allow `MediaCodecVideoRenderer` to use a custom
|
|
||||||
`VideoFrameProcessor.Factory`.
|
|
||||||
* Fix bug where the first frame couldn't be rendered if the audio stream
|
|
||||||
starts with negative timestamps
|
|
||||||
([#291](https://github.com/androidx/media/issues/291)).
|
|
||||||
* Effect:
|
|
||||||
* Add `VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)`
|
|
||||||
queuing bitmap input by timestamp.
|
|
||||||
* Change `VideoFrameProcessor.registerInputStream()` to be non-blocking.
|
|
||||||
Apps must implement
|
|
||||||
`VideoFrameProcessor.Listener#onInputStreamRegistered()`.
|
|
||||||
* UI:
|
* UI:
|
||||||
* Add a `Player.Listener` implementation for Wear OS devices that handles
|
* Add a `Player.Listener` implementation for Wear OS devices that handles
|
||||||
playback suppression due to
|
playback suppression due to
|
||||||
@ -386,9 +314,45 @@ This release includes the following changes since the
|
|||||||
add `dataSync` as `foregroundServiceType` in the manifest and add the
|
add `dataSync` as `foregroundServiceType` in the manifest and add the
|
||||||
`FOREGROUND_SERVICE_DATA_SYNC` permission
|
`FOREGROUND_SERVICE_DATA_SYNC` permission
|
||||||
([#11239](https://github.com/google/ExoPlayer/issues/11239)).
|
([#11239](https://github.com/google/ExoPlayer/issues/11239)).
|
||||||
* MIDI extension:
|
* HLS Extension:
|
||||||
|
* Refresh the HLS live playlist with an interval calculated from the last
|
||||||
|
load start time rather than the last load completed time
|
||||||
|
([#663](https://github.com/androidx/media/issues/663)).
|
||||||
|
* DASH Extension:
|
||||||
|
* Allow multiple of the same DASH identifier in segment template url.
|
||||||
|
* Add experimental support for parsing subtitles during extraction. This
|
||||||
|
has better support for merging overlapping subtitles, including
|
||||||
|
resolving flickering when transitioning between subtitle segments. You
|
||||||
|
can enable this using
|
||||||
|
`DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()`
|
||||||
|
([#288](https://github.com/androidx/media/issues/288)).
|
||||||
|
* RTSP Extension:
|
||||||
|
* Fix a race condition that could lead to `IndexOutOfBoundsException` when
|
||||||
|
falling back to TCP, or playback hanging in some situations.
|
||||||
|
* Check state in RTSP setup when returning loading state of
|
||||||
|
`RtspMediaPeriod`
|
||||||
|
([#577](https://github.com/androidx/media/issues/577)).
|
||||||
|
* Ignore custom Rtsp request methods in Options response public header
|
||||||
|
([#613](https://github.com/androidx/media/issues/613)).
|
||||||
|
* Use RTSP Setup Response timeout value in time interval of sending
|
||||||
|
keep-alive RTSP Options requests
|
||||||
|
([#662](https://github.com/androidx/media/issues/662)).
|
||||||
|
* Decoder Extensions (FFmpeg, VP9, AV1, MIDI, etc.):
|
||||||
* Release the MIDI decoder module, which provides support for playback of
|
* Release the MIDI decoder module, which provides support for playback of
|
||||||
standard MIDI files using the Jsyn library to synthesize audio.
|
standard MIDI files using the Jsyn library to synthesize audio.
|
||||||
|
* Add `DecoderOutputBuffer.shouldBeSkipped` to directly mark output
|
||||||
|
buffers that don't need to be presented. This is preferred over
|
||||||
|
`C.BUFFER_FLAG_DECODE_ONLY` that will be deprecated.
|
||||||
|
* Add `Decoder.setOutputStartTimeUs` and
|
||||||
|
`SimpleDecoder.isAtLeastOutputStartTimeUs` to allow decoders to drop
|
||||||
|
decode-only samples before the start time. This should be preferred to
|
||||||
|
`Buffer.isDecodeOnly` that will be deprecated.
|
||||||
|
* Fix bug publishing MIDI decoder artifact to Maven repository. The
|
||||||
|
artifact is renamed to `media3-exoplayer-midi`
|
||||||
|
([#734](https://github.com/androidx/media/issues/734)).
|
||||||
|
* Leanback extension:
|
||||||
|
* Fix bug where disabling a surface can cause an `ArithmeticException` in
|
||||||
|
Leanback code ([#617](https://github.com/androidx/media/issues/617)).
|
||||||
* Test Utilities:
|
* Test Utilities:
|
||||||
* Make `TestExoPlayerBuilder` and `FakeClock` compatible with Espresso UI
|
* Make `TestExoPlayerBuilder` and `FakeClock` compatible with Espresso UI
|
||||||
tests and Compose UI tests. This fixes a bug where playback advances
|
tests and Compose UI tests. This fixes a bug where playback advances
|
||||||
@ -400,6 +364,25 @@ This release includes the following changes since the
|
|||||||
`TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)`.
|
`TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)`.
|
||||||
Use `Composition.Builder.setHdrMode(int)` and pass the `Composition` to
|
Use `Composition.Builder.setHdrMode(int)` and pass the `Composition` to
|
||||||
`Transformer.start(Composition, String)` instead.
|
`Transformer.start(Composition, String)` instead.
|
||||||
|
* Remove deprecated `DownloadNotificationHelper.buildProgressNotification`
|
||||||
|
method, use a non deprecated method that takes a `notMetRequirements`
|
||||||
|
parameter instead.
|
||||||
|
|
||||||
|
### 1.2.0-rc01 (2023-11-01)
|
||||||
|
|
||||||
|
Use the 1.2.0 [stable version](#120-2023-11-15).
|
||||||
|
|
||||||
|
### 1.2.0-beta01 (2023-10-18)
|
||||||
|
|
||||||
|
Use the 1.2.0 [stable version](#120-2023-11-15).
|
||||||
|
|
||||||
|
### 1.2.0-alpha02 (2023-09-29)
|
||||||
|
|
||||||
|
Use the 1.2.0 [stable version](#120-2023-11-15).
|
||||||
|
|
||||||
|
### 1.2.0-alpha01 (2023-08-17)
|
||||||
|
|
||||||
|
Use the 1.2.0 [stable version](#120-2023-11-15).
|
||||||
|
|
||||||
## 1.1
|
## 1.1
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user