diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 8b8f69f6a6..b4485accbd 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -2,118 +2,139 @@ ### dev-v2 (not yet released) ### +* Require an end time or duration for SubRip (SRT) and SubStation Alpha + (SSA/ASS) subtitles. This applies to both sidecar files & subtitles + [embedded in Matroska streams](https://matroska.org/technical/specs/subtitles/index.html). + ### 2.11.0 (not yet released) ### -* AV1 extension: Uses libgav1 to decode AV1 videos. Android 10 includes an AV1 - decoder, but the older versions of Android require this extension for playback - of AV1 streams ([#3353](https://github.com/google/ExoPlayer/issues/3353)). You - can read more about playing AV1 videos with ExoPlayer - [here](https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9). +* Core library: + * Replace `ExoPlayerFactory` by `SimpleExoPlayer.Builder` and + `ExoPlayer.Builder`. + * Add automatic `WakeLock` handling to `SimpleExoPlayer`, which can be enabled + by calling `SimpleExoPlayer.setHandleWakeLock` + ([#5846](https://github.com/google/ExoPlayer/issues/5846)). To use this + feature, you must add the + [WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission.html#WAKE_LOCK) + permission to your application's manifest file. + * Add automatic "audio becoming noisy" handling to `SimpleExoPlayer`, which + can be enabled by calling `SimpleExoPlayer.setHandleAudioBecomingNoisy`. + * Wrap decoder exceptions in a new `DecoderException` class and report them as + renderer errors. + * Add `Timeline.Window.isLive` to indicate that a window is a live stream + ([#2668](https://github.com/google/ExoPlayer/issues/2668) and + [#5973](https://github.com/google/ExoPlayer/issues/5973)). + * Add `Timeline.Window.uid` to uniquely identify window instances. + * Deprecate `setTag` parameter of `Timeline.getWindow`. Tags will always be + set. + * Deprecate passing the manifest directly to + `Player.EventListener.onTimelineChanged`. It can be accessed through + `Timeline.Window.manifest` or `Player.getCurrentManifest()` + * Add `MediaSource.enable` and `MediaSource.disable` to improve resource + management in playlists. + * Add `MediaPeriod.isLoading` to improve `Player.isLoading` state. + * Fix issue where player errors are thrown too early at playlist transitions + ([#5407](https://github.com/google/ExoPlayer/issues/5407)). * DRM: * Inject `DrmSessionManager` into the `MediaSources` instead of `Renderers` ([#5619](https://github.com/google/ExoPlayer/issues/5619)). * Add a `DefaultDrmSessionManager.Builder`. * Add support for the use of secure decoders in clear sections of content ([#4867](https://github.com/google/ExoPlayer/issues/4867)). - * Add basic DRM support to the Cast demo app. * Add support for custom `LoadErrorHandlingPolicies` in key and provisioning requests ([#6334](https://github.com/google/ExoPlayer/issues/6334)). * Remove `DefaultDrmSessionManager` factory methods that leak `ExoMediaDrm` instances ([#4721](https://github.com/google/ExoPlayer/issues/4721)). -* Remove the `DataSpec.FLAG_ALLOW_ICY_METADATA` flag. Instead, set the header - `IcyHeaders.REQUEST_HEADER_ENABLE_METADATA_NAME` in the `DataSpec` - `httpRequestHeaders`. +* Track selection: + * Update `DefaultTrackSelector` to set a viewport constraint for the default + display by default. + * Update `DefaultTrackSelector` to set text language and role flag + constraints for the device's accessibility settings by default + ([#5749](https://github.com/google/ExoPlayer/issues/5749)). + * Add option to set preferred text role flags using + `DefaultTrackSelector.ParametersBuilder.setPreferredTextRoleFlags`. +* Android 10: + * Set `compileSdkVersion` to 29 to enable use of Android 10 APIs. + * Expose new `isHardwareAccelerated`, `isSoftwareOnly` and `isVendor` flags + in `MediaCodecInfo` + ([#5839](https://github.com/google/ExoPlayer/issues/5839)). + * Add `allowedCapturePolicy` field to `AudioAttributes` to allow to + configuration of the audio capture policy. +* Video: + * Pass the codec output `MediaFormat` to `VideoFrameMetadataListener`. + * Support out-of-band HDR10+ metadata for VP9 in WebM/Matroska. + * Assume that protected content requires a secure decoder when evaluating + whether `MediaCodecVideoRenderer` supports a given video format + ([#5568](https://github.com/google/ExoPlayer/issues/5568)). + * Fix Dolby Vision fallback to AVC and HEVC. +* Audio: + * Fix E-AC3 JOC passthrough playback failing to initialize due to incorrect + channel count check. + * Handle new signaling for E-AC3 JOC audio in DASH + ([#6636](https://github.com/google/ExoPlayer/issues/6636)). + * Fix the start of audio getting truncated when transitioning to a new + item in a playlist of Opus streams. + * Workaround broken raw audio decoding on Oppo R9 + ([#5782](https://github.com/google/ExoPlayer/issues/5782)). +* UI: + * Make showing and hiding player controls accessible to TalkBack in + `PlayerView`. + * Rename `spherical_view` surface type to `spherical_gl_surface_view`. +* Analytics: + * Remove `AnalyticsCollector.Factory`. Instances should be created directly, + and the `Player` should be set by calling `AnalyticsCollector.setPlayer`. + * Add `PlaybackStatsListener` to collect `PlaybackStats` for analysis and + analytics reporting (TODO: link to developer guide page/blog post). +* DataSource + * Add `DataSpec.httpRequestHeaders` to support setting per-request headers for + HTTP and HTTPS. + * Remove the `DataSpec.FLAG_ALLOW_ICY_METADATA` flag. Use is replaced by + setting the `IcyHeaders.REQUEST_HEADER_ENABLE_METADATA_NAME` header in + `DataSpec.httpRequestHeaders`. + * Fail more explicitly when local file URIs contain invalid parts (e.g. a + fragment) ([#6470](https://github.com/google/ExoPlayer/issues/6470)). * DASH: Support negative @r values in segment timelines ([#1787](https://github.com/google/ExoPlayer/issues/1787)). -* Add `allowedCapturePolicy` field to `AudioAttributes` wrapper to allow to - opt-out of audio recording. -* Add `DataSpec.httpRequestHeaders` to set HTTP request headers when connecting - to an HTTP source. `DefaultHttpDataSource`, `CronetDataSource` and - `OkHttpDataSource` include headers set in the DataSpec when connecting to the - source. -* Surface information provided by methods `isHardwareAccelerated`, - `isSoftwareOnly` and `isVendor` added in Android 10 in `MediaCodecInfo` class - ([#5839](https://github.com/google/ExoPlayer/issues/5839)). -* Update `DefaultTrackSelector` to apply a viewport constraint for the default - display by default. -* Add `PlaybackStatsListener` to collect `PlaybackStats` for playbacks analysis - and analytics reporting (TODO: link to developer guide page/blog post). -* Assume that encrypted content requires secure decoders in renderer support - checks ([#5568](https://github.com/google/ExoPlayer/issues/5568)). -* Decoders: Prefer decoders that advertise format support over ones that do not, - even if they are listed lower in the `MediaCodecList`. -* Add a workaround for broken raw audio decoding on Oppo R9 - ([#5782](https://github.com/google/ExoPlayer/issues/5782)). -* Wrap decoder exceptions in a new `DecoderException` class and report as - renderer error. -* Do not pass the manifest to callbacks of `Player.EventListener` and - `SourceInfoRefreshListener` anymore. Instead make it accessible through - `Player.getCurrentManifest()` and `Timeline.Window.manifest`. Also rename - `SourceInfoRefreshListener` to `MediaSourceCaller`. -* Set `compileSdkVersion` to 29 to use Android 10 APIs. -* Add `enable` and `disable` methods to `MediaSource` to improve resource - management in playlists. -* Text selection logic: - * Allow to set preferred role flags using - `DefaultTrackSelector.ParametersBuilder.setPreferredTextRoleFlags`. - * Default text language and role flags to accessibility captioning settings - ([#5749](https://github.com/google/ExoPlayer/issues/5749)). -* Remove `AnalyticsCollector.Factory`. Instances can be created directly and - the `Player` set later using `AnalyticsCollector.setPlayer`. -* Replace `ExoPlayerFactory` by `SimpleExoPlayer.Builder` and - `ExoPlayer.Builder`. -* Fix issue where player errors are thrown too early at playlist transitions - ([#5407](https://github.com/google/ExoPlayer/issues/5407)). -* Deprecate `setTag` parameter of `Timeline.getWindow`. Tags will always be set. -* Support out-of-band HDR10+ metadata for VP9 in WebM/Matroska. -* Fix issue where HLS streams get stuck in infinite buffering state after - postroll ad ([#6314](https://github.com/google/ExoPlayer/issues/6314)). -* Publish `testutils` module to simplify unit testing with ExoPlayer - ([#6267](https://github.com/google/ExoPlayer/issues/6267)). -* Add `uid` to `Timeline.Window` to uniquely identify window instances. -* Fix Dolby Vision fallback to AVC and HEVC. -* Add demo app to show how to use the Android 10 `SurfaceControl` API with - ExoPlayer ([#677](https://github.com/google/ExoPlayer/issues/677)). -* Add automatic `WakeLock` handling to `SimpleExoPlayer` through calling - `setEnableWakeLock`, which requires the - `android.Manifest.permission#WAKE_LOCK` permission - ([#5846](https://github.com/google/ExoPlayer/issues/5846)). +* HLS: Fix issue where streams could get stuck in an infinite buffering state + after a postroll ad + ([#6314](https://github.com/google/ExoPlayer/issues/6314)). +* AV1 extension: + * New in this release. The AV1 extension allows use of the + [libgav1 software decoder](https://chromium.googlesource.com/codecs/libgav1/) + in ExoPlayer. You can read more about playing AV1 videos with ExoPlayer + [here](https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9). * VP9 extension: - * Rename `VpxVideoSurfaceView` to `VideoDecoderSurfaceView` - and move it to the core library. + * Update to use NDK r20. + * Rename `VpxVideoSurfaceView` to `VideoDecoderSurfaceView` and move it to the + core library. * Move `LibvpxVideoRenderer.MSG_SET_OUTPUT_BUFFER_RENDERER` to `C.MSG_SET_OUTPUT_BUFFER_RENDERER`. * Use `VideoDecoderRenderer` as an implementation of `VideoDecoderOutputBufferRenderer`, instead of `VideoDecoderSurfaceView`. -* Rename `spherical_view` surface type to `spherical_gl_surface_view`. -* Add automatic audio becoming noisy handling to `SimpleExoPlayer`, - available through `SimpleExoPlayer.setHandleAudioBecomingNoisy`. -* Post `AudioFocusManager.onAudioFocusChange` events to eventHandler, avoiding - multithreaded access to the player or audio focus manager. -* Add `Timeline.Window.isLive` to indicate that a window is a live stream - ([#2668](https://github.com/google/ExoPlayer/issues/2668) and - [#5973](https://github.com/google/ExoPlayer/issues/5973)). -* Fail more explicitly when local-file Uris contain invalid parts (e.g. - fragment) ([#6470](https://github.com/google/ExoPlayer/issues/6470)). -* Add `MediaPeriod.isLoading` to improve `Player.isLoading` state. -* Make show and hide player controls accessible for TalkBack in `PlayerView`. -* Pass the codec output `MediaFormat` to `VideoFrameMetadataListener`. -* Deprecate the GVR extension. -* Fix the start of audio getting truncated when transitioning to a new - item in a playlist of opus streams. -* Fix FLAC extension build - ([#6601](https://github.com/google/ExoPlayer/issues/6601). -* Update the ffmpeg, flac and opus extension build instructions to use NDK r20. -* Update the ffmpeg extension to release 4.2. It is necessary to rebuild the - native part of the extension after this change, following the instructions in - the extension's readme. -* Add support for subtitle files to the demo app - ([#5523](https://github.com/google/ExoPlayer/issues/5523)). -* Handle new signaling for E-AC3 JOC audio in DASH - ([#6636](https://github.com/google/ExoPlayer/issues/6636)). -* Require an end time or duration for SubRip (SRT) and SubStation Alpha - (SSA/ASS) subtitles. This applies to both sidecar files & subtitles - [embedded in Matroska streams](https://matroska.org/technical/specs/subtitles/index.html). +* Flac extension: + * Update to use NDK r20. + * Fix build + ([#6601](https://github.com/google/ExoPlayer/issues/6601). +* FFmpeg extension: + * Update to use NDK r20. + * Update to use FFmpeg version 4.2. It is necessary to rebuild the native part + of the extension after this change, following the instructions in the + extension's readme. +* Opus extension: Update to use NDK r20. +* GVR extension: This extension is now deprecated. +* Demo apps (TODO: update links to point to r2.11.0 tag): + * Add [SurfaceControl demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/surface) + to show how to use the Android 10 `SurfaceControl` API with ExoPlayer + ([#677](https://github.com/google/ExoPlayer/issues/677)). + * Add support for subtitle files to the + [Main demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/main) + ([#5523](https://github.com/google/ExoPlayer/issues/5523)). + * Remove the IMA demo app. IMA functionality is demonstrated by the + [main demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/main). + * Add basic DRM support to the + [Cast demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/cast). +* TestUtils: Publish the `testutils` module to simplify unit testing with + ExoPlayer ([#6267](https://github.com/google/ExoPlayer/issues/6267)). ### 2.10.7 (2019-11-12) ### @@ -121,7 +142,7 @@ * MediaSession extension: Update shuffle and repeat modes when playback state is invalidated ([#6582](https://github.com/google/ExoPlayer/issues/6582)). * Fix the start of audio getting truncated when transitioning to a new - item in a playlist of opus streams. + item in a playlist of Opus streams. ### 2.10.6 (2019-10-17) ### @@ -690,7 +711,7 @@ and `AnalyticsListener` callbacks ([#4361](https://github.com/google/ExoPlayer/issues/4361) and [#4615](https://github.com/google/ExoPlayer/issues/4615)). -* UI components: +* UI: * Add option to `PlayerView` to show buffering view when playWhenReady is false ([#4304](https://github.com/google/ExoPlayer/issues/4304)). * Allow any `Drawable` to be used as `PlayerView` default artwork. @@ -846,7 +867,7 @@ * OkHttp extension: Fix to correctly include response headers in thrown `InvalidResponseCodeException`s. * Add possibility to cancel `PlayerMessage`s. -* UI components: +* UI: * Add `PlayerView.setKeepContentOnPlayerReset` to keep the currently displayed video frame or media artwork visible when the player is reset ([#2843](https://github.com/google/ExoPlayer/issues/2843)). @@ -896,7 +917,7 @@ * Support live stream clipping with `ClippingMediaSource`. * Allow setting tags for all media sources in their factories. The tag of the current window can be retrieved with `Player.getCurrentTag`. -* UI components: +* UI: * Add support for displaying error messages and a buffering spinner in `PlayerView`. * Add support for listening to `AspectRatioFrameLayout`'s aspect ratio update @@ -1060,7 +1081,7 @@ `SsMediaSource.Factory`, and `MergingMediaSource`. * Play out existing buffer before retrying for progressive live streams ([#1606](https://github.com/google/ExoPlayer/issues/1606)). -* UI components: +* UI: * Generalized player and control views to allow them to bind with any `Player`, and renamed them to `PlayerView` and `PlayerControlView` respectively.