diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 21665b06a8..e178ffdf24 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -112,44 +112,47 @@ ### 2.11.4 (2020-04-08) ### -* Add `SimpleExoPlayer.setWakeMode` to allow automatic `WifiLock` and `WakeLock` - handling ([#6914](https://github.com/google/ExoPlayer/issues/6914)). 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. -* Text: - * Catch and log exceptions in `TextRenderer` rather than re-throwing. This - allows playback to continue even if subtitle decoding fails - ([#6885](https://github.com/google/ExoPlayer/issues/6885)). - * Allow missing hours and milliseconds in SubRip (.srt) timecodes - ([#7122](https://github.com/google/ExoPlayer/issues/7122)). -* Audio: - * Workaround issue that could cause slower than realtime playback of AAC on - Android 10 ([#6671](https://github.com/google/ExoPlayer/issues/6671). - * Enable playback speed adjustment and silence skipping for floating point PCM - audio, via resampling to 16-bit integer PCM. To output the original floating - point audio without adjustment, pass `enableFloatOutput=true` to the - `DefaultAudioSink` constructor - ([#7134](https://github.com/google/ExoPlayer/issues/7134)). - * Fix playback of WAV files with trailing non-media bytes - ([#7129](https://github.com/google/ExoPlayer/issues/7129)). - * Fix playback of ADTS files with mid-stream ID3 metadata. -* DRM: - * Fix playback of Widevine protected content that only provides V1 PSSH atoms - on API levels 21 and 22. - * Fix playback of PlayReady content on Fire TV Stick (Gen 2). -* DASH: - * Update the manifest URI to avoid repeated HTTP redirects - ([#6907](https://github.com/google/ExoPlayer/issues/6907)). - * Parse period `AssetIdentifier` elements. -* UI: Add an option to set whether to use the orientation sensor for rotation - in spherical playbacks - ([#6761](https://github.com/google/ExoPlayer/issues/6761)). -* Analytics: Fix `PlaybackStatsListener` behavior when not keeping history - ([#7160](https://github.com/google/ExoPlayer/issues/7160)). -* FFmpeg extension: Add support for `x86_64` architecture. -* Opus extension: Fix parsing of negative gain values - ([#7046](https://github.com/google/ExoPlayer/issues/7046)). +* Add `SimpleExoPlayer.setWakeMode` to allow automatic `WifiLock` and + `WakeLock` handling + ([#6914](https://github.com/google/ExoPlayer/issues/6914)). 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. +* Text: + * Catch and log exceptions in `TextRenderer` rather than re-throwing. This + allows playback to continue even if subtitle decoding fails + ([#6885](https://github.com/google/ExoPlayer/issues/6885)). + * Allow missing hours and milliseconds in SubRip (.srt) timecodes + ([#7122](https://github.com/google/ExoPlayer/issues/7122)). +* Audio: + * Workaround issue that could cause slower than realtime playback of AAC + on Android 10 ([#6671](https://github.com/google/ExoPlayer/issues/6671). + * Enable playback speed adjustment and silence skipping for floating point + PCM audio, via resampling to 16-bit integer PCM. To output the original + floating point audio without adjustment, pass `enableFloatOutput=true` + to the `DefaultAudioSink` constructor + ([#7134](https://github.com/google/ExoPlayer/issues/7134)). + * Fix playback of WAV files with trailing non-media bytes + ([#7129](https://github.com/google/ExoPlayer/issues/7129)). + * Fix playback of ADTS files with mid-stream ID3 metadata. +* DRM: + * Fix playback of Widevine protected content that only provides V1 PSSH + atoms on API levels 21 and 22. + * Fix playback of PlayReady content on Fire TV Stick (Gen 2). + * Fix stuck ad playbacks with DRM protected content + ([#7188](https://github.com/google/ExoPlayer/issues/7188)). +* DASH: + * Update the manifest URI to avoid repeated HTTP redirects + ([#6907](https://github.com/google/ExoPlayer/issues/6907)). + * Parse period `AssetIdentifier` elements. +* UI: Add an option to set whether to use the orientation sensor for rotation + in spherical playbacks + ([#6761](https://github.com/google/ExoPlayer/issues/6761)). +* Analytics: Fix `PlaybackStatsListener` behavior when not keeping history + ([#7160](https://github.com/google/ExoPlayer/issues/7160)). +* FFmpeg extension: Add support for `x86_64` architecture. +* Opus extension: Fix parsing of negative gain values + ([#7046](https://github.com/google/ExoPlayer/issues/7046)). ### 2.11.3 (2020-02-19) ### @@ -161,63 +164,63 @@ ### 2.11.2 (2020-02-13) ### -* Add Java FLAC extractor - ([#6406](https://github.com/google/ExoPlayer/issues/6406)). -* Startup latency optimization: - * Reduce startup latency for DASH and SmoothStreaming playbacks by allowing - codec initialization to occur before the network connection for the first - media segment has been established. - * Reduce startup latency for on-demand DASH playbacks by allowing codec - initialization to occur before the sidx box has been loaded. -* Downloads: - * Fix download resumption when the requirements for them to continue are - met ([#6733](https://github.com/google/ExoPlayer/issues/6733), - [#6798](https://github.com/google/ExoPlayer/issues/6798)). - * Fix `DownloadHelper.createMediaSource` to use `customCacheKey` when creating - `ProgressiveMediaSource` instances. -* DRM: Fix `NullPointerException` when playing DRM-protected content - ([#6951](https://github.com/google/ExoPlayer/issues/6951)). -* Metadata: - * Update `IcyDecoder` to try ISO-8859-1 decoding if UTF-8 decoding fails. - Also change `IcyInfo.rawMetadata` from `String` to `byte[]` to allow - developers to handle data that's neither UTF-8 nor ISO-8859-1 - ([#6753](https://github.com/google/ExoPlayer/issues/6753)). - * Select multiple metadata tracks if multiple metadata renderers are available - ([#6676](https://github.com/google/ExoPlayer/issues/6676)). - * Add support for ID3 genres added in Wimamp 5.6 (2010). -* UI: - * Show ad group markers in `DefaultTimeBar` even if they are after the end - of the current window - ([#6552](https://github.com/google/ExoPlayer/issues/6552)). - * Don't use notification chronometer if playback speed is != 1.0 - ([#6816](https://github.com/google/ExoPlayer/issues/6816)). -* HLS: Fix playback of DRM protected content that uses key rotation - ([#6903](https://github.com/google/ExoPlayer/issues/6903)). -* WAV: - * Support IMA ADPCM encoded data. - * Improve support for G.711 A-law and mu-law encoded data. -* MP4: Support "twos" codec (big endian PCM) - ([#5789](https://github.com/google/ExoPlayer/issues/5789)). -* FMP4: Add support for encrypted AC-4 tracks. -* HLS: Fix slow seeking into long MP3 segments - ([#6155](https://github.com/google/ExoPlayer/issues/6155)). -* Fix handling of E-AC-3 streams that contain AC-3 syncframes - ([#6602](https://github.com/google/ExoPlayer/issues/6602)). -* Fix playback of TrueHD streams in Matroska - ([#6845](https://github.com/google/ExoPlayer/issues/6845)). -* Fix MKV subtitles to disappear when intended instead of lasting until the - next cue ([#6833](https://github.com/google/ExoPlayer/issues/6833)). -* OkHttp extension: Upgrade OkHttp dependency to 3.12.8, which fixes a class of - `SocketTimeoutException` issues when using HTTP/2 - ([#4078](https://github.com/google/ExoPlayer/issues/4078)). -* FLAC extension: Fix handling of bit depths other than 16 in `FLACDecoder`. - This issue caused FLAC streams with other bit depths to sound like white noise - on earlier releases, but only when embedded in a non-FLAC container such as - Matroska or MP4. -* Demo apps: Add - [GL demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/gl) to - show how to render video to a `GLSurfaceView` while applying a GL shader. - ([#6920](https://github.com/google/ExoPlayer/issues/6920)). +* Add Java FLAC extractor + ([#6406](https://github.com/google/ExoPlayer/issues/6406)). +* Startup latency optimization: + * Reduce startup latency for DASH and SmoothStreaming playbacks by + allowing codec initialization to occur before the network connection for + the first media segment has been established. + * Reduce startup latency for on-demand DASH playbacks by allowing codec + initialization to occur before the sidx box has been loaded. +* Downloads: + * Fix download resumption when the requirements for them to continue are + met ([#6733](https://github.com/google/ExoPlayer/issues/6733), + [#6798](https://github.com/google/ExoPlayer/issues/6798)). + * Fix `DownloadHelper.createMediaSource` to use `customCacheKey` when + creating `ProgressiveMediaSource` instances. +* DRM: Fix `NullPointerException` when playing DRM protected content + ([#6951](https://github.com/google/ExoPlayer/issues/6951)). +* Metadata: + * Update `IcyDecoder` to try ISO-8859-1 decoding if UTF-8 decoding fails. + Also change `IcyInfo.rawMetadata` from `String` to `byte[]` to allow + developers to handle data that's neither UTF-8 nor ISO-8859-1 + ([#6753](https://github.com/google/ExoPlayer/issues/6753)). + * Select multiple metadata tracks if multiple metadata renderers are + available ([#6676](https://github.com/google/ExoPlayer/issues/6676)). + * Add support for ID3 genres added in Wimamp 5.6 (2010). +* UI: + * Show ad group markers in `DefaultTimeBar` even if they are after the end + of the current window + ([#6552](https://github.com/google/ExoPlayer/issues/6552)). + * Don't use notification chronometer if playback speed is != 1.0 + ([#6816](https://github.com/google/ExoPlayer/issues/6816)). +* HLS: Fix playback of DRM protected content that uses key rotation + ([#6903](https://github.com/google/ExoPlayer/issues/6903)). +* WAV: + * Support IMA ADPCM encoded data. + * Improve support for G.711 A-law and mu-law encoded data. +* MP4: Support "twos" codec (big endian PCM) + ([#5789](https://github.com/google/ExoPlayer/issues/5789)). +* FMP4: Add support for encrypted AC-4 tracks. +* HLS: Fix slow seeking into long MP3 segments + ([#6155](https://github.com/google/ExoPlayer/issues/6155)). +* Fix handling of E-AC-3 streams that contain AC-3 syncframes + ([#6602](https://github.com/google/ExoPlayer/issues/6602)). +* Fix playback of TrueHD streams in Matroska + ([#6845](https://github.com/google/ExoPlayer/issues/6845)). +* Fix MKV subtitles to disappear when intended instead of lasting until the + next cue ([#6833](https://github.com/google/ExoPlayer/issues/6833)). +* OkHttp extension: Upgrade OkHttp dependency to 3.12.8, which fixes a class + of `SocketTimeoutException` issues when using HTTP/2 + ([#4078](https://github.com/google/ExoPlayer/issues/4078)). +* FLAC extension: Fix handling of bit depths other than 16 in `FLACDecoder`. + This issue caused FLAC streams with other bit depths to sound like white + noise on earlier releases, but only when embedded in a non-FLAC container + such as Matroska or MP4. +* Demo apps: Add + [GL demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/gl) to + show how to render video to a `GLSurfaceView` while applying a GL shader. + ([#6920](https://github.com/google/ExoPlayer/issues/6920)). ### 2.11.1 (2019-12-20) ### diff --git a/library/common/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java b/library/common/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java index 31dfa8f020..bd5df4c8b1 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java @@ -63,6 +63,14 @@ public class DecoderInputBuffer extends Buffer { /** The buffer's data, or {@code null} if no data has been set. */ @Nullable public ByteBuffer data; + // TODO: Remove this temporary signaling once end-of-stream propagation for clips using content + // protection is fixed. See [Internal: b/153326944] for details. + /** + * Whether the last attempt to read a sample into this buffer failed due to not yet having the DRM + * keys associated with the next sample. + */ + public boolean waitingForKeys; + /** * The time at which the sample should be presented. */ @@ -183,6 +191,7 @@ public class DecoderInputBuffer extends Buffer { if (supplementalData != null) { supplementalData.clear(); } + waitingForKeys = false; } private ByteBuffer createReplacementByteBuffer(int requiredCapacity) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java index ab108d4db4..c5484a8f45 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java @@ -329,7 +329,8 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb if (endUs != C.TIME_END_OF_SOURCE && ((result == C.RESULT_BUFFER_READ && buffer.timeUs >= endUs) || (result == C.RESULT_NOTHING_READ - && getBufferedPositionUs() == C.TIME_END_OF_SOURCE))) { + && getBufferedPositionUs() == C.TIME_END_OF_SOURCE + && !buffer.waitingForKeys))) { buffer.clear(); buffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); sentEos = true; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java index 40b28487a9..484aca5def 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java @@ -554,7 +554,7 @@ public class SampleQueue implements TrackOutput { boolean loadingFinished, long decodeOnlyUntilUs, SampleExtrasHolder extrasHolder) { - + buffer.waitingForKeys = false; // This is a temporary fix for https://github.com/google/ExoPlayer/issues/6155. // TODO: Remove it and replace it with a fix that discards samples when writing to the queue. boolean hasNextSample; @@ -588,6 +588,7 @@ public class SampleQueue implements TrackOutput { } if (!mayReadSample(relativeReadIndex)) { + buffer.waitingForKeys = true; return C.RESULT_NOTHING_READ; } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java index 4e52d728d5..9a4524819e 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java @@ -368,8 +368,10 @@ public final class SampleQueueTest { assertReadFormat(/* formatRequired= */ false, FORMAT_ENCRYPTED); assertReadNothing(/* formatRequired= */ false); + assertThat(inputBuffer.waitingForKeys).isTrue(); when(mockDrmSession.getState()).thenReturn(DrmSession.STATE_OPENED_WITH_KEYS); assertReadEncryptedSample(/* sampleIndex= */ 0); + assertThat(inputBuffer.waitingForKeys).isFalse(); } @Test