Finalize release notes for 2.13.0
PiperOrigin-RevId: 355621265
This commit is contained in:
parent
d72d25470d
commit
d08cacd9ba
326
RELEASENOTES.md
326
RELEASENOTES.md
@ -2,194 +2,87 @@
|
|||||||
|
|
||||||
### dev-v2 (not yet released)
|
### dev-v2 (not yet released)
|
||||||
|
|
||||||
* New release notes go here!
|
|
||||||
* Core library:
|
|
||||||
* Log a warning when `SingleSampleMediaPeriod` transforms a load error
|
|
||||||
into end-of-stream.
|
|
||||||
* Fall back to AVC/HEVC decoders for Dolby Vision streams with level 10
|
|
||||||
to 13
|
|
||||||
([#8530](https://github.com/google/ExoPlayer/issues/8530)).
|
|
||||||
* UI:
|
* UI:
|
||||||
* Add builder for `PlayerNotificationManager`.
|
* Add builder for `PlayerNotificationManager`.
|
||||||
* Extractors:
|
|
||||||
* Fix Vorbis private codec data parsing in the Matroska extractor
|
|
||||||
([#8496](https://github.com/google/ExoPlayer/issues/8496)).
|
|
||||||
* Text:
|
|
||||||
* Add support for the SSA `primaryColour` style attribute
|
|
||||||
([#8435](https://github.com/google/ExoPlayer/issues/8435)).
|
|
||||||
|
|
||||||
### 2.13.0 (not yet released - targeted for 2021-02-TBD)
|
### 2.13.0 (2021-02-04)
|
||||||
|
|
||||||
* Core library:
|
* Core library:
|
||||||
* Remove long deprecated symbols:
|
|
||||||
* `AdaptiveMediaSourceEventListener`. Use `MediaSourceEventListener`
|
|
||||||
instead.
|
|
||||||
* `DashMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
|
||||||
`DashMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
|
||||||
instead.
|
|
||||||
* `DefaultAnalyticsListener`. Use `AnalyticsListener` directly
|
|
||||||
instead.
|
|
||||||
* `DefaultLoadControl` constructors. Use `DefaultLoadControl.Builder`
|
|
||||||
instead.
|
|
||||||
* `DrmInitData.get(UUID)`. Use `DrmInitData.get(int)` and
|
|
||||||
`DrmInitData.SchemeData.matches(UUID)` instead.
|
|
||||||
* `ExtractorsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
|
||||||
`ExtractorsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
|
||||||
instead.
|
|
||||||
* `FixedTrackSelection.Factory`. If you need to disable adaptive
|
|
||||||
selection in `DefaultTrackSelector`, enable the
|
|
||||||
`DefaultTrackSelector.Parameters.forceHighestSupportedBitrate` flag.
|
|
||||||
* `HlsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
|
||||||
`HlsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
|
||||||
instead.
|
|
||||||
* `MappedTrackInfo.getTrackFormatSupport(int, int, int)`. Use
|
|
||||||
`MappedTrackInfo.getTrackSupport(int, int, int)`.
|
|
||||||
* `MappedTrackInfo.getTrackTypeRendererSupport(int)`. Use
|
|
||||||
`MappedTrackInfo.getTypeSupport(int)`.
|
|
||||||
* `MappedTrackInfo.getUnassociatedTrackGroups()`. Use
|
|
||||||
`MappedTrackInfo.getUnmappedTrackGroups()`.
|
|
||||||
* `MappedTrackInfo.length` - Use `MappedTrackInfo.getRendererCount()`
|
|
||||||
instead.
|
|
||||||
* `Player.DefaultEventListener.onTimelineChanged(Timeline, Object)`.
|
|
||||||
Use `Player.EventListener.onTimelineChanged(Timeline, int)` instead.
|
|
||||||
* `Player.setAudioAttributes(AudioAttributes)`. Use
|
|
||||||
`Player.AudioComponent.setAudioAttributes(AudioAttributes, boolean)`
|
|
||||||
instead.
|
|
||||||
* `PlayerView.setDefaultArtwork(Bitmap)`. Use
|
|
||||||
`PlayerView.setDefaultArtwork(Drawable)` instead.
|
|
||||||
* `PlayerView.setShowBuffering(boolean)`. Use
|
|
||||||
`PlayerView.setShowBuffering(int)` instead.
|
|
||||||
* `SimpleExoPlayer.clearMetadataOutput(MetadataOutput)`. Use
|
|
||||||
`SimpleExoPlayer.removeMetadataOutput(MetadataOutput)` instead.
|
|
||||||
* `SimpleExoPlayer.clearTextOutput(TextOutput)`. Use
|
|
||||||
`SimpleExoPlayer.removeTextOutput(TextOutput)` instead.
|
|
||||||
* `SimpleExoPlayer.clearVideoListener()`. Use
|
|
||||||
`SimpleExoPlayer.removeVideoListener(VideoListener)` instead.
|
|
||||||
* `SimpleExoPlayer.getAudioStreamType()`. Use
|
|
||||||
`SimpleExoPlayer.getAudioAttributes()` instead.
|
|
||||||
* `SimpleExoPlayer.setAudioDebugListener(AudioRendererEventListener)`.
|
|
||||||
Use `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)`
|
|
||||||
instead.
|
|
||||||
* `SimpleExoPlayer.setAudioStreamType(int)`. Use
|
|
||||||
`SimpleExoPlayer.setAudioAttributes(AudioAttributes)` instead.
|
|
||||||
* `SimpleExoPlayer.setMetadataOutput(MetadataOutput)`. Use
|
|
||||||
`SimpleExoPlayer.addMetadataOutput(MetadataOutput)` instead. If your
|
|
||||||
application is calling `SimpleExoPlayer.setMetadataOutput(null)`,
|
|
||||||
make sure to replace this call with
|
|
||||||
`SimpleExoPlayer.removeMetadataOutput(MetadataOutput)`.
|
|
||||||
* `SimpleExoPlayer.setPlaybackParams(PlaybackParams)`. Use
|
|
||||||
`SimpleExoPlayer.setPlaybackParameters(PlaybackParameters)` instead.
|
|
||||||
* `SimpleExoPlayer.setTextOutput(TextOutput)`. Use
|
|
||||||
`SimpleExoPlayer.addTextOutput(TextOutput)` instead. If your
|
|
||||||
application is calling `SimpleExoPlayer.setTextOutput(null)`, make
|
|
||||||
sure to replace this call with
|
|
||||||
`SimpleExoPlayer.removeTextOutput(TextOutput)`.
|
|
||||||
* `SimpleExoPlayer.setVideoDebugListener(VideoRendererEventListener)`.
|
|
||||||
Use `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)`
|
|
||||||
instead.
|
|
||||||
* `SimpleExoPlayer.setVideoListener(VideoListener)`. Use
|
|
||||||
`SimpleExoPlayer.addVideoListener(VideoListener)` instead. If your
|
|
||||||
application is calling `SimpleExoPlayer.setVideoListener(null)`,
|
|
||||||
make sure to replace this call with
|
|
||||||
`SimpleExoPlayer.removeVideoListener(VideoListener)`.
|
|
||||||
* `SimpleExoPlayer.VideoListener`. Use
|
|
||||||
`com.google.android.exoplayer2.video.VideoListener` instead.
|
|
||||||
* `SingleSampleMediaSource.EventListener` and constructors. Use
|
|
||||||
`MediaSourceEventListener` and `SingleSampleMediaSource.Factory`
|
|
||||||
* `SimpleExoPlayer.addVideoDebugListener`,
|
|
||||||
`SimpleExoPlayer.removeVideoDebugListener`,
|
|
||||||
`SimpleExoPlayer.addAudioDebugListener` and
|
|
||||||
`SimpleExoPlayer.removeAudioDebugListener`. Use
|
|
||||||
`SimpleExoPlayer.addAnalyticsListener` and
|
|
||||||
`SimpleExoPlayer.removeAnalyticsListener` instead.
|
|
||||||
* `AdaptiveMediaSourceEventListener`. Use `MediaSourceEventListener`
|
|
||||||
instead.
|
|
||||||
* `SingleSampleMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
|
||||||
`SingleSampleMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
|
||||||
instead.
|
|
||||||
* `SsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
|
||||||
`SsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
|
||||||
instead.
|
|
||||||
* Add a `LivePlaybackSpeedControl` component to control the playback speed
|
|
||||||
during live playbacks. This allows the player to stay close to the
|
|
||||||
configured live offset. A configurable default implementation
|
|
||||||
`DefaultLivePlaybackSpeedControl` is added to `ExoPlayer` and
|
|
||||||
`SimpleExoPlayer` by default.
|
|
||||||
* Add `LiveConfiguration` to `MediaItem` to allow media-specific live
|
|
||||||
offset and live playback speed settings. The same settings can be set
|
|
||||||
for all `MediaItems` in `DefaultMediaSourceFactory`.
|
|
||||||
* Add `targetLiveOffsetUs` parameter to `LoadControl.shouldStartPlayback`.
|
|
||||||
* Verify correct thread usage in `SimpleExoPlayer` by default. Opt-out is
|
* Verify correct thread usage in `SimpleExoPlayer` by default. Opt-out is
|
||||||
still possible until the next major release using
|
still possible until the next major release using
|
||||||
`setThrowsWhenUsingWrongThread(false)`
|
`setThrowsWhenUsingWrongThread(false)`
|
||||||
([#4463](https://github.com/google/ExoPlayer/issues/4463)).
|
([#4463](https://github.com/google/ExoPlayer/issues/4463)).
|
||||||
* Add a getter and callback for static metadata to the player
|
* Add `Player.getCurrentStaticMetadata` and
|
||||||
|
`EventListener.onStaticMetadataChanged` to expose static metadata
|
||||||
|
belonging to the currently playing stream
|
||||||
([#7266](https://github.com/google/ExoPlayer/issues/7266)).
|
([#7266](https://github.com/google/ExoPlayer/issues/7266)).
|
||||||
* Time out on release to prevent ANRs if the underlying platform call is
|
* Add `PlayerMessage.setLooper` and deprecate `PlayerMessage.setHandler`.
|
||||||
|
* Add option to `MergingMediaSource` to clip the durations of all sources
|
||||||
|
to have the same length
|
||||||
|
([#8422](https://github.com/google/ExoPlayer/issues/8422)).
|
||||||
|
* Remove `Player.setVideoDecoderOutputBufferRenderer` from Player API. Use
|
||||||
|
`setVideoSurfaceView` and `clearVideoSurfaceView` instead.
|
||||||
|
* Default `SingleSampleMediaSource.treatLoadErrorsAsEndOfStream` to `true`
|
||||||
|
so that errors loading external subtitle files do not cause playback
|
||||||
|
to fail ([#8430](https://github.com/google/ExoPlayer/issues/8430)). A
|
||||||
|
warning will be logged by `SingleSampleMediaPeriod` whenever a load
|
||||||
|
error is treated as though the end of the stream has been reached.
|
||||||
|
* Time out on release to prevent ANRs if an underlying platform call is
|
||||||
stuck ([#4352](https://github.com/google/ExoPlayer/issues/4352)).
|
stuck ([#4352](https://github.com/google/ExoPlayer/issues/4352)).
|
||||||
* Time out when detaching a surface to prevent ANRs if the underlying
|
* Time out when detaching a surface to prevent ANRs if the underlying
|
||||||
platform call is stuck
|
platform call is stuck
|
||||||
([#5887](https://github.com/google/ExoPlayer/issues/5887)).
|
([#5887](https://github.com/google/ExoPlayer/issues/5887)).
|
||||||
* Fix bug where `AnalyticsListener` callbacks can arrive in the wrong
|
* Fix bug where `AnalyticsListener` callbacks could arrive in the wrong
|
||||||
order ([#8048](https://github.com/google/ExoPlayer/issues/8048)).
|
order ([#8048](https://github.com/google/ExoPlayer/issues/8048)).
|
||||||
* Add `onEvents` callback to `Player.EventListener` and
|
* Media transformation:
|
||||||
`AnalyticsListener` to notify when all simultaneous state changes have
|
* Add a new `transformer` module for converting media streams. The
|
||||||
been handled and the values reported through callbacks are again
|
initially available transformations are changing the container format,
|
||||||
completely consistent with the values obtained from the `Player`
|
removing tracks, and slow motion flattening.
|
||||||
getters.
|
* Low latency live streaming:
|
||||||
* Deprecate `HttpDataSource.Factory.getDefaultRequestProperties` and add
|
* Support low-latency DASH (also known as ULL-CMAF) and Apple's
|
||||||
`HttpDataSource.Factory.setDefaultRequestProperties` instead.
|
low-latency HLS extension.
|
||||||
* Add `DefaultHttpDataSource.Factory` and deprecate
|
* Add `LiveConfiguration` to `MediaItem` to define live offset and
|
||||||
`DefaultHttpDataSourceFactory`.
|
playback speed adjustment parameters. The same parameters can be set on
|
||||||
* Add option to `MergingMediaSource` to clip the durations of all sources
|
`DefaultMediaSourceFactory` to apply for all `MediaItems`.
|
||||||
to have the same length
|
* Add `LivePlaybackSpeedControl` to control playback speed adjustments
|
||||||
([#8422](https://github.com/google/ExoPlayer/issues/8422)).
|
during live playbacks. Such adjustments allow the player to stay close
|
||||||
* Remove `ExoPlaybackException.OutOfMemoryError`.
|
to the live offset. `DefaultLivePlaybackSpeedControl` is provided as a
|
||||||
* Remove `setVideoDecoderOutputBufferRenderer` from Player API. Clients
|
default implementation.
|
||||||
should use `setOutputSurface` directly instead.
|
* Add `targetLiveOffsetUs` parameter to `LoadControl.shouldStartPlayback`.
|
||||||
* Default `SingleSampleMediaSource.treatLoadErrorsAsEndOfStream` to `true`
|
|
||||||
([#8430](https://github.com/google/ExoPlayer/issues/8430)).
|
|
||||||
* Remove `setVideoDecoderOutputBufferRenderer` from Player API. Use
|
|
||||||
`setVideoSurfaceView` and `clearVideoSurfaceView` instead.
|
|
||||||
* Replace `PlayerMessage.setHandler` with `PlayerMessage.setLooper`.
|
|
||||||
* Log a warning when `SingleSampleMediaPeriod` transforms a load error
|
|
||||||
into end-of-stream.
|
|
||||||
* Transformer:
|
|
||||||
* Add a library to transform media inputs. The available transformations
|
|
||||||
are:
|
|
||||||
* Configuration of output container format.
|
|
||||||
* Removal of audio or video tracks.
|
|
||||||
* Slow motion flattening.
|
|
||||||
* Extractors:
|
* Extractors:
|
||||||
* Populate codecs string for H.264/AVC in MP4, Matroska and FLV streams to
|
* Populate codecs string for H.264/AVC in MP4, Matroska and FLV streams to
|
||||||
allow decoder capability checks based on codec profile/level
|
allow decoder capability checks based on codec profile and level
|
||||||
([#8393](https://github.com/google/ExoPlayer/issues/8393)).
|
([#8393](https://github.com/google/ExoPlayer/issues/8393)).
|
||||||
* Populate codecs string for H.265/HEVC in MP4, Matroska and MPEG-TS
|
* Populate codecs string for H.265/HEVC in MP4, Matroska and MPEG-TS
|
||||||
streams to allow decoder capability checks based on codec profile/level
|
streams to allow decoder capability checks based on codec profile and
|
||||||
([#8393](https://github.com/google/ExoPlayer/issues/8393)).
|
level ([#8393](https://github.com/google/ExoPlayer/issues/8393)).
|
||||||
* Handle sample size mismatches between raw audio `stsd` information and
|
|
||||||
`stsz` fixed sample size in MP4 extractors.
|
|
||||||
* Add support for playing JPEG motion photos
|
* Add support for playing JPEG motion photos
|
||||||
([#5405](https://github.com/google/ExoPlayer/issues/5405)).
|
([#5405](https://github.com/google/ExoPlayer/issues/5405)).
|
||||||
|
* Handle sample size mismatches between raw audio `stsd` information and
|
||||||
|
`stsz` fixed sample size in MP4 extractors.
|
||||||
* Fix Vorbis private codec data parsing in the Matroska extractor
|
* Fix Vorbis private codec data parsing in the Matroska extractor
|
||||||
([#8496](https://github.com/google/ExoPlayer/issues/8496)).
|
([#8496](https://github.com/google/ExoPlayer/issues/8496)).
|
||||||
* Track selection:
|
* Track selection:
|
||||||
* Move `Player.getTrackSelector` to the `ExoPlayer` interface.
|
* Move `Player.getTrackSelector` to the `ExoPlayer` interface.
|
||||||
* Allow parallel adaptation for video and audio
|
* Move the mutable parts of `TrackSelection` into an `ExoTrackSelection`
|
||||||
|
subclass.
|
||||||
|
* Allow parallel adaptation of video and audio
|
||||||
([#5111](https://github.com/google/ExoPlayer/issues/5111)).
|
([#5111](https://github.com/google/ExoPlayer/issues/5111)).
|
||||||
* Simplify enabling tunneling with `DefaultTrackSelector`.
|
* Simplify enabling tunneling with `DefaultTrackSelector`.
|
||||||
`ParametersBuilder.setTunnelingAudioSessionId` has been replaced with
|
`ParametersBuilder.setTunnelingAudioSessionId` has been replaced with
|
||||||
`ParametersBuilder.setTunnelingEnabled`. The player's audio session ID
|
`ParametersBuilder.setTunnelingEnabled`. The player's audio session ID
|
||||||
will be used, and so a tunneling specific ID is no longer needed.
|
will be used, and so a tunneling specific ID is no longer needed.
|
||||||
* Add option to specify multiple preferred audio or text languages.
|
* Add additional configuration parameters to `DefaultTrackSelector`.
|
||||||
* Add option to specify preferred MIME type(s) for video and audio
|
`DefaultTrackSelector.ParametersBuilder` now includes:
|
||||||
|
* `setPreferredVideoMimeType`, `setPreferredVideoMimeTypes`,
|
||||||
|
`setPreferredAudioMimeType` and `setPreferredAudioMimeTypes` for
|
||||||
|
specifying preferred video and audio MIME type(s)
|
||||||
([#8320](https://github.com/google/ExoPlayer/issues/8320)).
|
([#8320](https://github.com/google/ExoPlayer/issues/8320)).
|
||||||
* Add option to specify preferred audio role flags.
|
* `setPreferredAudioLanguages` and `setPreferredTextLanguages` for
|
||||||
|
specifying multiple preferred audio and text languages.
|
||||||
|
* `setPreferredAudioRoleFlags` for specifying preferred audio role
|
||||||
|
flags.
|
||||||
* Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`.
|
* Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`.
|
||||||
* In order to make it immutable, `TrackSelection` in the `Player` API now
|
|
||||||
only contains methods related to static selection. The rest of the
|
|
||||||
methods have been moved to the child class `ExoTrackSelection` which is
|
|
||||||
used by all ExoPlayer components.
|
|
||||||
* DASH:
|
* DASH:
|
||||||
* Support low-latency DASH playback (`availabilityTimeOffset` and
|
* Support low-latency DASH playback (`availabilityTimeOffset` and
|
||||||
`ServiceDescription` tags)
|
`ServiceDescription` tags)
|
||||||
@ -203,31 +96,34 @@
|
|||||||
* Support low-latency HLS playback (`EXT-X-PART` and preload hints)
|
* Support low-latency HLS playback (`EXT-X-PART` and preload hints)
|
||||||
([#5011](https://github.com/google/ExoPlayer/issues/5011)).
|
([#5011](https://github.com/google/ExoPlayer/issues/5011)).
|
||||||
* UI:
|
* UI:
|
||||||
|
* Improve `StyledPlayerControlView` button animations.
|
||||||
* Miscellaneous fixes for `StyledPlayerControlView` in minimal mode.
|
* Miscellaneous fixes for `StyledPlayerControlView` in minimal mode.
|
||||||
* Show overflow button in `StyledPlayerControlView` only when there is not
|
|
||||||
enough space.
|
|
||||||
* Update StyledPlayer's control overlay scrim from 30% opacity to 60%
|
|
||||||
opacity for Accessibility requirements.
|
|
||||||
* Switch `StyledPlayerControlView` button controls to borderless ripples.
|
|
||||||
* DRM:
|
* DRM:
|
||||||
* Fix playback failure when switching from PlayReady protected content to
|
* Fix playback failure when switching from PlayReady protected content to
|
||||||
Widevine or Clearkey protected content in a playlist.
|
Widevine or Clearkey protected content in a playlist.
|
||||||
* Add `ExoMediaDrm.KeyRequest.getRequestType`
|
* Add `ExoMediaDrm.KeyRequest.getRequestType`
|
||||||
([#7847](https://github.com/google/ExoPlayer/issues/7847)).
|
([#7847](https://github.com/google/ExoPlayer/issues/7847)).
|
||||||
* Drop key & provision responses if `DefaultDrmSession` is released while
|
* Drop key and provision responses if `DefaultDrmSession` is released
|
||||||
waiting for the response. This prevents these (harmless) log messages:
|
while waiting for the response. This prevents harmless log messages of
|
||||||
|
the form:
|
||||||
`IllegalStateException: sending message to a Handler on a dead thread`
|
`IllegalStateException: sending message to a Handler on a dead thread`
|
||||||
([#8328](https://github.com/google/ExoPlayer/issues/8328)).
|
([#8328](https://github.com/google/ExoPlayer/issues/8328)).
|
||||||
* Allow apps to fully customize DRM behaviour per-`MediaItem` by passing a
|
* Allow apps to fully customize DRM behaviour for each `MediaItem` by
|
||||||
`DrmSessionManagerProvider` to `MediaSourceFactory`
|
passing a `DrmSessionManagerProvider` to `MediaSourceFactory`
|
||||||
([#8466](https://github.com/google/ExoPlayer/issues/8466)).
|
([#8466](https://github.com/google/ExoPlayer/issues/8466)).
|
||||||
* Analytics:
|
* Analytics:
|
||||||
|
* Add an `onEvents` callback to `Player.EventListener` and
|
||||||
|
`AnalyticsListener`. When one or more player states change
|
||||||
|
simultaneously, `onEvents` is called once after all of the callbacks
|
||||||
|
associated with the individual state changes.
|
||||||
* Pass a `DecoderReuseEvaluation` to `AnalyticsListener`'s
|
* Pass a `DecoderReuseEvaluation` to `AnalyticsListener`'s
|
||||||
`onVideoInputFormatChanged` and `onAudioInputFormatChanged` methods. The
|
`onVideoInputFormatChanged` and `onAudioInputFormatChanged` methods. The
|
||||||
`DecoderReuseEvaluation` indicates whether it was possible to re-use an
|
`DecoderReuseEvaluation` indicates whether it was possible to re-use an
|
||||||
existing decoder instance for the new format, and if not then the
|
existing decoder instance for the new format, and if not then the
|
||||||
reasons why.
|
reasons why.
|
||||||
* Video:
|
* Video:
|
||||||
|
* Fall back to AVC/HEVC decoders for Dolby Vision streams with level 10
|
||||||
|
to 13 ([#8530](https://github.com/google/ExoPlayer/issues/8530)).
|
||||||
* Fix VP9 format capability checks on API level 23 and earlier. The
|
* Fix VP9 format capability checks on API level 23 and earlier. The
|
||||||
platform does not correctly report the VP9 level supported by the
|
platform does not correctly report the VP9 level supported by the
|
||||||
decoder in this case, so we estimate it based on the decoder's maximum
|
decoder in this case, so we estimate it based on the decoder's maximum
|
||||||
@ -248,14 +144,19 @@
|
|||||||
* Create E-AC3 JOC passthrough `AudioTrack` instances using the maximum
|
* Create E-AC3 JOC passthrough `AudioTrack` instances using the maximum
|
||||||
supported channel count (instead of assuming 6 channels) from API 29.
|
supported channel count (instead of assuming 6 channels) from API 29.
|
||||||
* Text:
|
* Text:
|
||||||
|
* Add support for the SSA `primaryColour` style attribute
|
||||||
|
([#8435](https://github.com/google/ExoPlayer/issues/8435)).
|
||||||
* Fix CEA-708 sequence number discontinuity handling
|
* Fix CEA-708 sequence number discontinuity handling
|
||||||
([#1807](https://github.com/google/ExoPlayer/issues/1807)).
|
([#1807](https://github.com/google/ExoPlayer/issues/1807)).
|
||||||
* Fix CEA-708 handling of unexpectedly small packets
|
* Fix CEA-708 handling of unexpectedly small packets
|
||||||
([#1807](https://github.com/google/ExoPlayer/issues/1807)).
|
([#1807](https://github.com/google/ExoPlayer/issues/1807)).
|
||||||
* Add support for the SSA `primaryColour` style attribute
|
|
||||||
([#8435](https://github.com/google/ExoPlayer/issues/8435)).
|
|
||||||
* Data sources:
|
* Data sources:
|
||||||
* Use the user agent of the underlying network stack by default.
|
* For `HttpDataSource` implementations, default to using the user agent of
|
||||||
|
the underlying network stack.
|
||||||
|
* Deprecate `HttpDataSource.Factory.getDefaultRequestProperties`.
|
||||||
|
`HttpDataSource.Factory.setDefaultRequestProperties` instead.
|
||||||
|
* Add `DefaultHttpDataSource.Factory` and deprecate
|
||||||
|
`DefaultHttpDataSourceFactory`.
|
||||||
* Metadata retriever:
|
* Metadata retriever:
|
||||||
* Parse Google Photos HEIC and JPEG motion photo metadata.
|
* Parse Google Photos HEIC and JPEG motion photo metadata.
|
||||||
* IMA extension:
|
* IMA extension:
|
||||||
@ -263,8 +164,8 @@
|
|||||||
([#3750](https://github.com/google/ExoPlayer/issues/3750)).
|
([#3750](https://github.com/google/ExoPlayer/issues/3750)).
|
||||||
* Add `ImaAdsLoader.Builder.setEnableContinuousPlayback` for setting
|
* Add `ImaAdsLoader.Builder.setEnableContinuousPlayback` for setting
|
||||||
whether to request ads for continuous playback.
|
whether to request ads for continuous playback.
|
||||||
* Upgrade IMA SDK dependency to 3.22.0, bringing in a fix for leaking the
|
* Upgrade IMA SDK dependency to 3.22.0. This fixes leaking of the ad view
|
||||||
ad view group ([#7344](https://github.com/google/ExoPlayer/issues/7344),
|
group ([#7344](https://github.com/google/ExoPlayer/issues/7344),
|
||||||
[#8339](https://github.com/google/ExoPlayer/issues/8339)).
|
[#8339](https://github.com/google/ExoPlayer/issues/8339)).
|
||||||
* Fix a bug that could cause the next content position played after a seek
|
* Fix a bug that could cause the next content position played after a seek
|
||||||
to snap back to the cue point of the preceding ad, rather than the
|
to snap back to the cue point of the preceding ad, rather than the
|
||||||
@ -290,6 +191,91 @@
|
|||||||
* Support `setPlaybackSpeed(float)` and disable it by default. Use
|
* Support `setPlaybackSpeed(float)` and disable it by default. Use
|
||||||
`MediaSessionConnector.setEnabledPlaybackActions(long)` to enable
|
`MediaSessionConnector.setEnabledPlaybackActions(long)` to enable
|
||||||
([#8229](https://github.com/google/ExoPlayer/issues/8229)).
|
([#8229](https://github.com/google/ExoPlayer/issues/8229)).
|
||||||
|
* Remove deprecated symbols:
|
||||||
|
* `AdaptiveMediaSourceEventListener`. Use `MediaSourceEventListener`
|
||||||
|
instead.
|
||||||
|
* `DashMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
||||||
|
`DashMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
||||||
|
instead.
|
||||||
|
* `DefaultAnalyticsListener`. Use `AnalyticsListener` instead.
|
||||||
|
* `DefaultLoadControl` constructors. Use `DefaultLoadControl.Builder`
|
||||||
|
instead.
|
||||||
|
* `DrmInitData.get(UUID)`. Use `DrmInitData.get(int)` and
|
||||||
|
`DrmInitData.SchemeData.matches(UUID)` instead.
|
||||||
|
* `ExtractorsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
||||||
|
`ExtractorsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
||||||
|
instead.
|
||||||
|
* `FixedTrackSelection.Factory`. If you need to disable adaptive
|
||||||
|
selection in `DefaultTrackSelector`, enable the
|
||||||
|
`DefaultTrackSelector.Parameters.forceHighestSupportedBitrate` flag.
|
||||||
|
* `HlsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
||||||
|
`HlsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
||||||
|
instead.
|
||||||
|
* `MappedTrackInfo.getTrackFormatSupport(int, int, int)`. Use
|
||||||
|
`MappedTrackInfo.getTrackSupport(int, int, int)` instead.
|
||||||
|
* `MappedTrackInfo.getTrackTypeRendererSupport(int)`. Use
|
||||||
|
`MappedTrackInfo.getTypeSupport(int)` instead.
|
||||||
|
* `MappedTrackInfo.getUnassociatedTrackGroups()`. Use
|
||||||
|
`MappedTrackInfo.getUnmappedTrackGroups()` instead.
|
||||||
|
* `MappedTrackInfo.length`. Use `MappedTrackInfo.getRendererCount()`
|
||||||
|
instead.
|
||||||
|
* `Player.DefaultEventListener.onTimelineChanged(Timeline, Object)`.
|
||||||
|
Use `Player.EventListener.onTimelineChanged(Timeline, int)` instead.
|
||||||
|
* `Player.setAudioAttributes(AudioAttributes)`. Use
|
||||||
|
`Player.AudioComponent.setAudioAttributes(AudioAttributes, boolean)`
|
||||||
|
instead.
|
||||||
|
* `PlayerView.setDefaultArtwork(Bitmap)`. Use
|
||||||
|
`PlayerView.setDefaultArtwork(Drawable)` instead.
|
||||||
|
* `PlayerView.setShowBuffering(boolean)`. Use
|
||||||
|
`PlayerView.setShowBuffering(int)` instead.
|
||||||
|
* `SimpleExoPlayer.clearMetadataOutput(MetadataOutput)`. Use
|
||||||
|
`SimpleExoPlayer.removeMetadataOutput(MetadataOutput)` instead.
|
||||||
|
* `SimpleExoPlayer.clearTextOutput(TextOutput)`. Use
|
||||||
|
`SimpleExoPlayer.removeTextOutput(TextOutput)` instead.
|
||||||
|
* `SimpleExoPlayer.clearVideoListener()`. Use
|
||||||
|
`SimpleExoPlayer.removeVideoListener(VideoListener)` instead.
|
||||||
|
* `SimpleExoPlayer.getAudioStreamType()`. Use
|
||||||
|
`SimpleExoPlayer.getAudioAttributes()` instead.
|
||||||
|
* `SimpleExoPlayer.setAudioDebugListener(AudioRendererEventListener)`.
|
||||||
|
Use `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)` instead.
|
||||||
|
* `SimpleExoPlayer.setAudioStreamType(int)`. Use
|
||||||
|
`SimpleExoPlayer.setAudioAttributes(AudioAttributes)` instead.
|
||||||
|
* `SimpleExoPlayer.setMetadataOutput(MetadataOutput)`. Use
|
||||||
|
`SimpleExoPlayer.addMetadataOutput(MetadataOutput)` instead. If your
|
||||||
|
application is calling `SimpleExoPlayer.setMetadataOutput(null)`, make
|
||||||
|
sure to replace this call with a call to
|
||||||
|
`SimpleExoPlayer.removeMetadataOutput(MetadataOutput)`.
|
||||||
|
* `SimpleExoPlayer.setPlaybackParams(PlaybackParams)`. Use
|
||||||
|
`SimpleExoPlayer.setPlaybackParameters(PlaybackParameters)` instead.
|
||||||
|
* `SimpleExoPlayer.setTextOutput(TextOutput)`. Use
|
||||||
|
`SimpleExoPlayer.addTextOutput(TextOutput)` instead. If your
|
||||||
|
application is calling `SimpleExoPlayer.setTextOutput(null)`, make sure
|
||||||
|
to replace this call with a call to
|
||||||
|
`SimpleExoPlayer.removeTextOutput(TextOutput)`.
|
||||||
|
* `SimpleExoPlayer.setVideoDebugListener(VideoRendererEventListener)`.
|
||||||
|
Use `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)` instead.
|
||||||
|
* `SimpleExoPlayer.setVideoListener(VideoListener)`. Use
|
||||||
|
`SimpleExoPlayer.addVideoListener(VideoListener)` instead. If your
|
||||||
|
application is calling `SimpleExoPlayer.setVideoListener(null)`, make
|
||||||
|
sure to replace this call with a call to
|
||||||
|
`SimpleExoPlayer.removeVideoListener(VideoListener)`.
|
||||||
|
* `SimpleExoPlayer.VideoListener`. Use
|
||||||
|
`com.google.android.exoplayer2.video.VideoListener` instead.
|
||||||
|
* `SingleSampleMediaSource.EventListener` and constructors. Use
|
||||||
|
`MediaSourceEventListener` and `SingleSampleMediaSource.Factory`
|
||||||
|
instead.
|
||||||
|
* `SimpleExoPlayer.addVideoDebugListener`,
|
||||||
|
`SimpleExoPlayer.removeVideoDebugListener`,
|
||||||
|
`SimpleExoPlayer.addAudioDebugListener` and
|
||||||
|
`SimpleExoPlayer.removeAudioDebugListener`. Use
|
||||||
|
`SimpleExoPlayer.addAnalyticsListener` and
|
||||||
|
`SimpleExoPlayer.removeAnalyticsListener` instead.
|
||||||
|
* `SingleSampleMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
||||||
|
`SingleSampleMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
||||||
|
instead.
|
||||||
|
* `SsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
|
||||||
|
`SsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
|
||||||
|
instead.
|
||||||
|
|
||||||
### 2.12.3 (2021-01-13) ###
|
### 2.12.3 (2021-01-13) ###
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user