diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9622efb60a..3343f0262e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -25,6 +25,9 @@ * Image: * DataSource: * DRM: + * Fix `MediaCodec$CryptoException: Operation not supported in this + configuration` error when playing ClearKey content on API < 27 devices + ([#1732](https://github.com/androidx/media/issues/1732)). * Effect: * Muxers: * `writeSampleData()` API now uses muxer specific `BufferInfo` class diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java index 49786a7d9c..dae849a3d1 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java @@ -298,11 +298,14 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { } else { MediaCrypto mediaCrypto = null; try { - mediaCrypto = new MediaCrypto(uuid, sessionId); + mediaCrypto = new MediaCrypto(adjustUuid(uuid), sessionId); result = mediaCrypto.requiresSecureDecoderComponent(mimeType); } catch (MediaCryptoException e) { - // This shouldn't happen, but if it does then assume that a secure decoder may be required. - result = true; + // This shouldn't happen, but if it does then assume that most DRM schemes need a secure + // decoder but ClearKey doesn't (because ClearKey never uses secure decryption). Requesting + // a secure decoder when it's not supported leads to playback failures: + // https://github.com/androidx/media/issues/1732 + result = !uuid.equals(C.CLEARKEY_UUID); } finally { if (mediaCrypto != null) { mediaCrypto.release();