Commit 90fc24c9 by olly Committed by Oliver Woodman

Bump version to 2.14.0 and tidy release notes

PiperOrigin-RevId: 372910834
parent 207825fb
...@@ -2,38 +2,62 @@ ...@@ -2,38 +2,62 @@
### dev-v2 (not yet released) ### dev-v2 (not yet released)
* Remove deprecated symbols:
* Remove `PlaybackPreparer`. UI components that previously had
`setPlaybackPreparer` methods will now call `Player.prepare` by default.
If this behavior is sufficient, use of `PlaybackPreparer` can be removed
from application code without replacement. For custom preparation logic,
replace calls to `setPlaybackPreparer` with calls to
`setControlDispatcher` on the same components, passing a
`ControlDispatcher` that implements custom preparation logic in
`dispatchPrepare`. Extend `DefaultControlDispatcher` to avoid having to
implement the other `ControlDispatcher` methods.
* Remove `setRewindIncrementMs` and `setFastForwardIncrementMs` from UI
components. Use `setControlDispatcher` on the same components, passing a
`DefaultControlDispatcher` built using `DefaultControlDispatcher(long,
long)`.
* Remove `PlayerNotificationManager` constructors and `createWith`
methods. Use `PlayerNotificationManager.Builder` instead.
* Remove `PlayerNotificationManager.setNotificationListener`. Use
`PlayerNotificationManager.Builder.setNotificationListener` instead.
* Remove `PlayerNotificationManager` `setUseNavigationActions` and
`setUseNavigationActionsInCompactView`. Use `setUseNextAction`,
`setUsePreviousAction`, `setUseNextActionInCompactView` and
`setUsePreviousActionInCompactView` instead.
* Remove `Format.create` methods. Use `Format.Builder` instead.
* Remove `CastPlayer` specific playlist manipulation methods. Use
`setMediaItems`, `addMediaItems`, `removeMediaItem` and `moveMediaItem`
instead.
### 2.14.0 (2021-05-13)
* Core Library: * Core Library:
* Move `Player` components to `ExoPlayer`. For example * Move `Player` components to `ExoPlayer`. For example
`Player.VideoComponent` is now `ExoPlayer.VideoComponent`. `Player.VideoComponent` is now `ExoPlayer.VideoComponent`.
* The most used methods of `Player`'s audio/video/text/metadata components * The most used methods of `Player`'s audio, video, text and metadata
have been added to `Player`. Support can be queried using components have been added directly to `Player`.
`Player.isCommandAvailable` instead of testing for component nullness. * Add `Player.getAvailableCommands`, `Player.isCommandAvailable` and
* Add position info of the old and the new position as arguments to `Listener.onAvailableCommandsChanged` to query which commands
`EventListener.onPositionDiscontinuity`. Add the new reasons that can be executed on the player.
`DISCONTINUITY_REASON_SKIP` and `DISCONTINUITY_REASON_REMOVE` and rename * Add a `Player.Listener` interface to receive all player events.
Component listeners and `EventListener` have been deprecated.
* Add `Player.getMediaMetadata`, which returns a combined and structured
`MediaMetadata` object. Changes to metadata are reported to
`Listener.onMediaMetadataChanged`.
* `Player.setPlaybackParameters` no longer accepts null, use
`PlaybackParameters.DEFAULT` instead.
* Report information about the old and the new playback positions to
`Listener.onPositionDiscontinuity`. Add `DISCONTINUITY_REASON_SKIP`
and `DISCONTINUITY_REASON_REMOVE` as discontinuity reasons, and rename
`DISCONTINUITY_REASON_PERIOD_TRANSITION` to `DISCONTINUITY_REASON_PERIOD_TRANSITION` to
`DISCONTINUITY_REASON_AUTO_TRANSITION`. Remove `DISCONTINUITY_REASON_AUTO_TRANSITION`. Remove
`DISCONTINUITY_REASON_AD_INSERTION` for which `DISCONTINUITY_REASON_AD_INSERTION`, for which
`DISCONTINUITY_REASON_AUTO_TRANSITION` is used instead. Deprecate the `DISCONTINUITY_REASON_AUTO_TRANSITION` is used instead
`onPositionDiscontinuity(int)` callback
([#6163](https://github.com/google/ExoPlayer/issues/6163), ([#6163](https://github.com/google/ExoPlayer/issues/6163),
[#4768](https://github.com/google/ExoPlayer/issues/4768)). [#4768](https://github.com/google/ExoPlayer/issues/4768)).
* Add methods `Player.getAvailableCommands`, `PLayer.isCommandAvailable` * Deprecate `ExoPlayer.Builder`. Use `SimpleExoPlayer.Builder` instead.
and `EventListener.onAvailableCommandsChanged` to query the commands * Move `Player.getRendererCount` and `Player.getRendererType` to
that can be executed on the player.
* `AdsLoader.AdViewProvider` and `AdsLoader.OverlayInfo` have been renamed
`com.google.android.exoplayer2.ui.AdViewProvider` and
`com.google.android.exoplayer2.ui.AdOverlayInfo` respectively.
* `CaptionStyleCompat` has been moved to the
`com.google.android.exoplayer2.ui` package.
* Move `getRendererCount` and `getRendererType` methods from `Player` to
`ExoPlayer`. `ExoPlayer`.
* Add `getMediaMetadata` to `Player` interface.
* Add a `Listener` interface to receive all player events in a single
object. Component Listeners and `EventListener` have been deprecated in
its favor.
* `Player.setPlaybackParameters` no longer accepts null, use
`PlaybackParameters.DEFAULT` instead.
* Use an empty string instead of the URI if the media ID is not explicitly * Use an empty string instead of the URI if the media ID is not explicitly
set with `MediaItem.Builder.setMediaId(String)`. set with `MediaItem.Builder.setMediaId(String)`.
* Remove `MediaCodecRenderer.configureCodec()` and add * Remove `MediaCodecRenderer.configureCodec()` and add
...@@ -41,39 +65,25 @@ ...@@ -41,39 +65,25 @@
called just before the `MediaCodec` is created and returns the called just before the `MediaCodec` is created and returns the
parameters needed to create and configure the `MediaCodec` instance. parameters needed to create and configure the `MediaCodec` instance.
Applications can override `MediaCodecRenderer.onCodecInitialized()` to Applications can override `MediaCodecRenderer.onCodecInitialized()` to
get notified after MediaCodec is initialized, or they can inject a be notified after a `MediaCodec` is initialized, or they can inject a
custom `MediaCodecAdapter.Factory` if they want to control how the custom `MediaCodecAdapter.Factory` if they want to control how the
`MediaCodec` is configured. `MediaCodec` is configured.
* Promote `AdaptiveTrackSelection.AdaptationCheckpoint` to `public` * Promote `AdaptiveTrackSelection.AdaptationCheckpoint` to `public`
visibility in order to allow Kotlin subclasses of visibility to allow Kotlin subclasses of
`AdaptiveTrackSelection.Factory` `AdaptiveTrackSelection.Factory`
([#8830](https://github.com/google/ExoPlayer/issues/8830)). ([#8830](https://github.com/google/ExoPlayer/issues/8830)).
* Added a combined and structured metadata object (`MediaMetadata`) to
Player, accessible through `getMediaMetadata` or by listening to
`EventListener.onMediaMetadataChanged`.
* Fix bug when transitions from content to ad periods called * Fix bug when transitions from content to ad periods called
`onMediaItemTransition` by mistake. `onMediaItemTransition` by mistake.
* Deprecate `ExoPlayer.Builder`. Use `SimpleExoPlayer.Builder` instead. * `AdsLoader.AdViewProvider` and `AdsLoader.OverlayInfo` have been renamed
* UI: `com.google.android.exoplayer2.ui.AdViewProvider` and
* Add builder for `PlayerNotificationManager`. `com.google.android.exoplayer2.ui.AdOverlayInfo` respectively.
* Add group setting to `PlayerNotificationManager`. * `CaptionStyleCompat` has been moved to the
* Remove `setUseSensorRotation` from `PlayerView` and `StyledPlayerView`. `com.google.android.exoplayer2.ui` package.
Instead, cast the view returned by `getVideoSurfaceView` to * `DebugTextViewHelper` has been moved from the `ui` package to the `util`
`SphericalGLSurfaceView`, and then call `setUseSensorRotation` on the package.
`SphericalGLSurfaceView` directly. * RTSP:
* Audio: * Initial support for RTSP playbacks
* Report unexpected discontinuities in ([#55](https://github.com/google/ExoPlayer/issues/55)).
`AnalyticsListener.onAudioSinkError`
([#6384](https://github.com/google/ExoPlayer/issues/6384)).
* Allow forcing offload for gapless content even if gapless playback is
not supported.
* Allow fall back from DTS-HD to DTS when playing via passthrough.
* Video:
* Add `Player.getVideoSize()` to retrieve the current size of the video
stream. Add `Listener.onVideoSizeChanged(VideoSize)` and deprecate
`Listener.onVideoSizeChanged(int weight, int height...)`.
* Analytics:
* Add `onAudioCodecError` and `onVideoCodecError` to `AnalyticsListener`.
* Downloads and caching: * Downloads and caching:
* Fix `CacheWriter` to correctly handle cases where the request `DataSpec` * Fix `CacheWriter` to correctly handle cases where the request `DataSpec`
extends beyond the end of the underlying resource. Caching will now extends beyond the end of the underlying resource. Caching will now
...@@ -84,92 +94,85 @@ ...@@ -84,92 +94,85 @@
* Fix `CacheWriter` to correctly handle `DataSource.close` failures, for * Fix `CacheWriter` to correctly handle `DataSource.close` failures, for
which it cannot be assumed that data was successfully written to the which it cannot be assumed that data was successfully written to the
cache. cache.
* Library restructuring:
* `DebugTextViewHelper` moved from `ui` package to `util` package.
* Remove deprecated symbols:
* Remove `ExoPlayerFactory`. Use `SimpleExoPlayer.Builder` instead.
* Remove `Player.DefaultEventListener`. Use `Player.EventListener`
instead.
* Remove `DownloadNotificationUtil`. Use `DownloadNotificationHelper`
instead.
* Remove `extension-jobdispatcher` module. Use the `extension-workmanager`
module instead.
* Remove `DefaultMediaSourceEventListener`. Use `MediaSourceEventListener`
instead.
* Remove `ExtractorMediaSource`. Use `ProgressiveMediaSource` instead.
* Remove `NotificationUtil.createNotificationChannel(Context, String, int,
int)`. Use `createNotificationChannel(Context, String, int, int, int)`
instead.
* Remove `PlayerNotificationManager.NotificationListener`
`onNotificationStarted(int, Notification)` and
`onNotificationCancelled(int)`. Use `onNotificationPosted(int,
Notification, boolean)` and `onNotificationCancelled(int, boolean)`
instead.
* Remove `PlayerNotificationManager.setNotificationListener`. Use
`PlayerNotificationManager.Builder.setNotificationListener` instead.
* Remove `DashManifest` constructor. Use the remaining constructor with
`programInformation` and `serviceDescription` set to `null` instead.
* Remove `CryptoInfo.getFrameworkCryptoInfoV16`. Use
`CryptoInfo.getFrameworkCryptoInfo` instead.
* Remove `CastPlayer` specific playlist manipulation methods. Use
`setMediaItems`, `addMediaItems`, `removeMediaItem` and `moveMediaItem`
instead.
* Remove `PlaybackPreparer`. UI components that previously had
`setPlaybackPreparer` methods will now call `Player.prepare` by default.
If this behavior is sufficient, use of `PlaybackPreparer` can be removed
from application code without replacement. For custom preparation logic,
replace calls to `setPlaybackPreparer` with calls to
`setControlDispatcher` on the same components, passing a
`ControlDispatcher` that implements custom preparation logic in
`dispatchPrepare`. Extend `DefaultControlDispatcher` to avoid having to
implement the other `ControlDispatcher` methods.
* Remove `setRewindIncrementMs` and `setFastForwardIncrementMs` from UI
components. Use `setControlDispatcher` on the same components, passing a
`DefaultControlDispatcher` built using `DefaultControlDispatcher(long,
long)`.
* Remove `PlayerNotificationManager` constructors and `createWith`
methods. Use `PlayerNotificationManager.Builder` instead.
* Remove `PlayerNotificationManager` `setUseNavigationActions` and
`setUseNavigationActionsInCompactView`. Use `setUseNextAction`,
`setUsePreviousAction`, `setUseNextActionInCompactView` and
`setUsePreviousActionInCompactView` instead.
* DRM: * DRM:
* Prepare DRM sessions (and fetch keys) ahead of the playback position
([#4133](https://github.com/google/ExoPlayer/issues/4133)).
* Only dispatch DRM session acquire and release events once per period * Only dispatch DRM session acquire and release events once per period
when playing content that uses the same encryption keys for both audio & when playing content that uses the same encryption keys for both audio &
video tracks (previously separate acquire and release events were video tracks. Previously, separate acquire and release events were
dispatched for each track in each period). dispatched for each track in each period.
* Include the session state in DRM session-acquired listener methods. * Include the session state in DRM session-acquired listener methods.
* Prepare DRM sessions (and fetch keys) ahead of the playback position * UI:
([#4133](https://github.com/google/ExoPlayer/issues/4133)). * Add `PlayerNotificationManager.Builder`, with the ability to
specify which group the notification should belong to.
* Remove `setUseSensorRotation` from `PlayerView` and `StyledPlayerView`.
Instead, cast the view returned by `getVideoSurfaceView` to
`SphericalGLSurfaceView`, and then call `setUseSensorRotation` on the
`SphericalGLSurfaceView` directly.
* Analytics:
* Add `onAudioCodecError` and `onVideoCodecError` to `AnalyticsListener`.
* Video:
* Add `Player.getVideoSize()` to retrieve the current size of the video
stream. Add `Listener.onVideoSizeChanged(VideoSize)` and deprecate
`Listener.onVideoSizeChanged(int, int, int, float)`.
* Audio:
* Report unexpected audio discontinuities to
`AnalyticsListener.onAudioSinkError`
([#6384](https://github.com/google/ExoPlayer/issues/6384)).
* Allow forcing offload for gapless content even if gapless playback is
not supported.
* Allow fall back from DTS-HD to DTS when playing via passthrough.
* Text: * Text:
* Fix lines overlapping when using `SubtitleView.VIEW_TYPE_WEB`. * Fix overlapping lines when using `SubtitleView.VIEW_TYPE_WEB`.
* Parse SSA/ASS underline & strikethrough info in `Style:` lines * Parse SSA/ASS underline & strikethrough info in `Style:` lines
([#8435](https://github.com/google/ExoPlayer/issues/8435)). ([#8435](https://github.com/google/ExoPlayer/issues/8435)).
* Ensure TTML `tts:textAlign` is correctly propagated from `<p>` nodes to * Ensure TTML `tts:textAlign` is correctly propagated from `<p>` nodes to
child nodes. child nodes.
* Support TTML `ebutts:multiRowAlign` attributes. * Support TTML `ebutts:multiRowAlign` attributes.
* MediaSession extension: Remove dependency to core module and rely on common * Allow the use of Android platform extractors through
only. The `TimelineQueueEditor` uses a new `MediaDescriptionConverter` for
this purpose and does not rely on the `ConcatenatingMediaSource` anymore.
* Cast extension:
* Trigger `onMediaItemTransition` event for all reasons except
`MEDIA_ITEM_TRANSITION_REASON_REPEAT`.
* Allow the use of platform extractors through
[MediaParser](https://developer.android.com/reference/android/media/MediaParser). [MediaParser](https://developer.android.com/reference/android/media/MediaParser).
Only supported on API 30+. Only supported on API 30+.
* You can use it for progressive media by passing a * You can use platform extractors for progressive media by passing
`MediaParserExtractorAdapter.FACTORY` when creating the `MediaParserExtractorAdapter.FACTORY` when creating a
`ProgressiveMediaSource.Factory`. `ProgressiveMediaSource.Factory`.
* You can use it for HLS by passing a * You can use platform extractors for HLS by passing
`MediaParserHlsMediaChunkExtractor.FACTORY` when creating the `MediaParserHlsMediaChunkExtractor.FACTORY` when creating a
`HlsMediaSource.Factory`. `HlsMediaSource.Factory`.
* You can use it for DASH by passing a `DefaultDashChunkSource` which * You can use platform extractors for DASH by passing a
depends on `MediaParserChunkExtractor.FACTORY` when creating the `DefaultDashChunkSource` that uses `MediaParserChunkExtractor.FACTORY`
`DashMediaSource.Factory`. when creating a `DashMediaSource.Factory`.
* We don't currently support using platform extractors with * Cast extension:
SmoothStreaming. * Trigger `onMediaItemTransition` event for all reasons except
* RTSP `MEDIA_ITEM_TRANSITION_REASON_REPEAT`.
* Release the initial version of ExoPlayer's RTSP support. * MediaSession extension:
* Remove dependency on `exoplayer-core`, relying only `exoplayer-common`
instead. To achieve this, `TimelineQueueEditor` uses a new
`MediaDescriptionConverter` interface, and no longer relies on
`ConcatenatingMediaSource`.
* Remove deprecated symbols:
* Remove `ExoPlayerFactory`. Use `SimpleExoPlayer.Builder` instead.
* Remove `Player.DefaultEventListener`. Use `Player.Listener` instead.
* Remove `ExtractorMediaSource`. Use `ProgressiveMediaSource` instead.
* Remove `DefaultMediaSourceEventListener`. Use `MediaSourceEventListener`
instead.
* Remove `DashManifest` constructor. Use the remaining constructor with
`programInformation` and `serviceDescription` set to `null` instead.
* Remove `CryptoInfo.getFrameworkCryptoInfoV16`. Use
`CryptoInfo.getFrameworkCryptoInfo` instead.
* Remove `NotificationUtil.createNotificationChannel(Context, String, int,
int)`. Use `createNotificationChannel(Context, String, int, int, int)`
instead.
* Remove `PlayerNotificationManager.setNotificationListener`. Use
`PlayerNotificationManager.Builder.setNotificationListener` instead.
* Remove `PlayerNotificationManager.NotificationListener`
`onNotificationStarted(int, Notification)` and
`onNotificationCancelled(int)`. Use `onNotificationPosted(int,
Notification, boolean)` and `onNotificationCancelled(int, boolean)`
instead.
* Remove `DownloadNotificationUtil`. Use `DownloadNotificationHelper`
instead.
* Remove `extension-jobdispatcher` module. Use the `extension-workmanager`
module instead.
### 2.13.3 (2021-04-14) ### 2.13.3 (2021-04-14)
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
project.ext { project.ext {
// ExoPlayer version and version code. // ExoPlayer version and version code.
releaseVersion = '2.13.3' releaseVersion = '2.14.0'
releaseVersionCode = 2013003 releaseVersionCode = 2014000
minSdkVersion = 16 minSdkVersion = 16
appTargetSdkVersion = 29 appTargetSdkVersion = 29
targetSdkVersion = 28 // TODO: Bump once b/143232359 is resolved. Also fix TODOs in UtilTest. targetSdkVersion = 28 // TODO: Bump once b/143232359 is resolved. Also fix TODOs in UtilTest.
......
...@@ -28,11 +28,11 @@ public final class ExoPlayerLibraryInfo { ...@@ -28,11 +28,11 @@ public final class ExoPlayerLibraryInfo {
/** The version of the library expressed as a string, for example "1.2.3". */ /** The version of the library expressed as a string, for example "1.2.3". */
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION_INT) or vice versa. // Intentionally hardcoded. Do not derive from other constants (e.g. VERSION_INT) or vice versa.
public static final String VERSION = "2.13.3"; public static final String VERSION = "2.14.0";
/** The version of the library expressed as {@code "ExoPlayerLib/" + VERSION}. */ /** The version of the library expressed as {@code "ExoPlayerLib/" + VERSION}. */
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa. // Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa.
public static final String VERSION_SLASHY = "ExoPlayerLib/2.13.3"; public static final String VERSION_SLASHY = "ExoPlayerLib/2.14.0";
/** /**
* The version of the library expressed as an integer, for example 1002003. * The version of the library expressed as an integer, for example 1002003.
...@@ -42,7 +42,7 @@ public final class ExoPlayerLibraryInfo { ...@@ -42,7 +42,7 @@ public final class ExoPlayerLibraryInfo {
* integer version 123045006 (123-045-006). * integer version 123045006 (123-045-006).
*/ */
// Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa. // Intentionally hardcoded. Do not derive from other constants (e.g. VERSION) or vice versa.
public static final int VERSION_INT = 2013003; public static final int VERSION_INT = 2014000;
/** /**
* The default user agent for requests made by the library. * The default user agent for requests made by the library.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment