diff --git a/RELEASENOTES.md b/RELEASENOTES.md index d2b6d85b988..aabccf11d33 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -41,8 +41,8 @@ * Upgrade Truth dependency from 0.44 to 1.0. * Upgrade to JUnit 4.13-rc-2. * UI - * move logic of prev, next, fast forward and rewind to ControlDispatcher - [#6926](https://github.com/google/ExoPlayer/issues/6926)). + * Move logic of prev, next, fast forward and rewind to ControlDispatcher + ([#6926](https://github.com/google/ExoPlayer/issues/6926)). * 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. @@ -101,6 +101,8 @@ on earlier releases, but only when embedded in a non-FLAC container such as Matroska or MP4. * Add support for ID3 genres added in Wimamp 5.6 (2010). +* DRM: Fix `NullPointerException` when playing DRM-protected content + ([#6951](https://github.com/google/ExoPlayer/issues/6951)). ### 2.11.1 (2019-12-20) ### diff --git a/demos/main/src/main/assets/media.exolist.json b/demos/main/src/main/assets/media.exolist.json index 06f063b1c13..26ed0446d0c 100644 --- a/demos/main/src/main/assets/media.exolist.json +++ b/demos/main/src/main/assets/media.exolist.json @@ -3,9 +3,8 @@ "name": "YouTube DASH", "samples": [ { - "name": "Google Glass (MP4,H264)", - "uri": "https://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0", - "extension": "mpd" + "name": "6956", + "uri": "http://master255.org/res/%d0%9a%d0%bb%d0%b8%d0%bf%d1%8b/B/Billy%20Mack/Billy%20Mack%20-%20Christmas%20Is%20All%20Around.mpg" }, { "name": "Google Play (MP4,H264)", diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java index 2f324dba02b..1bca34479b6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java @@ -97,6 +97,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements private final AudioSink audioSink; private final DecoderInputBuffer flagsOnlyBuffer; + private boolean drmResourcesAcquired; private DecoderCounters decoderCounters; private Format inputFormat; private int encoderDelay; @@ -543,6 +544,10 @@ public PlaybackParameters getPlaybackParameters() { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { + if (drmSessionManager != null && !drmResourcesAcquired) { + drmResourcesAcquired = true; + drmSessionManager.prepare(); + } decoderCounters = new DecoderCounters(); eventDispatcher.enabled(decoderCounters); int tunnelingAudioSessionId = getConfiguration().tunnelingAudioSessionId; @@ -591,6 +596,14 @@ protected void onDisabled() { } } + @Override + protected void onReset() { + if (drmSessionManager != null && drmResourcesAcquired) { + drmResourcesAcquired = false; + drmSessionManager.release(); + } + } + @Override public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { switch (messageType) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index f27d4909cb1..bd0440ce2e7 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -371,6 +371,7 @@ private static String getDiagnosticInfoV21(Throwable cause) { private final ArrayList decodeOnlyPresentationTimestamps; private final MediaCodec.BufferInfo outputBufferInfo; + private boolean drmResourcesAcquired; @Nullable private Format inputFormat; private Format outputFormat; @Nullable private DrmSession codecDrmSession; @@ -659,6 +660,10 @@ protected final MediaCodecInfo getCodecInfo() { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { + if (drmSessionManager != null && !drmResourcesAcquired) { + drmResourcesAcquired = true; + drmSessionManager.prepare(); + } decoderCounters = new DecoderCounters(); } @@ -705,6 +710,10 @@ protected void onReset() { } finally { setSourceDrmSession(null); } + if (drmSessionManager != null && drmResourcesAcquired) { + drmResourcesAcquired = false; + drmSessionManager.release(); + } } protected void releaseCodec() { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java index bf0a28ffa0c..6d8147b012e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java @@ -77,6 +77,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { private final DecoderInputBuffer flagsOnlyBuffer; private final DrmSessionManager drmSessionManager; + private boolean drmResourcesAcquired; private Format inputFormat; private Format outputFormat; private SimpleDecoder< @@ -237,6 +238,10 @@ public boolean isReady() { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { + if (drmSessionManager != null && !drmResourcesAcquired) { + drmResourcesAcquired = true; + drmSessionManager.prepare(); + } decoderCounters = new DecoderCounters(); eventDispatcher.enabled(decoderCounters); } @@ -286,6 +291,14 @@ protected void onDisabled() { } } + @Override + protected void onReset() { + if (drmSessionManager != null && drmResourcesAcquired) { + drmResourcesAcquired = false; + drmSessionManager.release(); + } + } + @Override protected void onStreamChanged(Format[] formats, long offsetUs) throws ExoPlaybackException { outputStreamOffsetUs = offsetUs;