diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ecf4473c6c..a8c85406c1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -45,6 +45,8 @@ * DRM: * Work around a bug in the Android 13 ClearKey implementation that returns a non-empty but invalid license URL. + * Fix `setMediaDrmSession failed: session not opened` error when switching + between DRM schemes in a playlist (e.g. Widevine to ClearKey). * DASH: * Parse `EventStream.presentationTimeOffset` from manifests ([#10460](https://github.com/google/ExoPlayer/issues/10460)). diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer.java index b6e651419c..79c3b9ca7a 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecRenderer.java @@ -2094,6 +2094,11 @@ public abstract class MediaCodecRenderer extends BaseRenderer { // Note: Both oldSession and newSession are non-null, and they are different sessions. + if (!newSession.getSchemeUuid().equals(oldSession.getSchemeUuid())) { + // MediaCrypto.setMediaDrmSession is unable to switch between DRM schemes. + return true; + } + if (Util.SDK_INT < 23) { // MediaCrypto.setMediaDrmSession is only available from API level 23, so re-initialization is // required to switch to newSession on older API levels.