From ce25b9b1a2fb2277f1abfa86eff86df024cab578 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 29 Aug 2017 07:19:48 -0700 Subject: [PATCH] Fix mapping CLEARKEY_UUID to COMMON_PSSH_UUID This mapping when we call into platform components also needs to be applied when creating the MediaCrypto instance. The fix is to stop propagating the UUID through all the createMediaCrypto methods. This is unnecessary, since the eventual target already knows its own UUID! Issue: #3138 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=166843372 --- .../google/android/exoplayer2/drm/DrmInitData.java | 2 +- .../google/android/exoplayer2/drm/ExoMediaDrm.java | 4 +--- .../android/exoplayer2/drm/FrameworkMediaDrm.java | 11 +++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmInitData.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmInitData.java index 9fa6547a00b..d814ece31da 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmInitData.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmInitData.java @@ -60,7 +60,7 @@ private DrmInitData(boolean cloneSchemeDatas, SchemeData... schemeDatas) { if (cloneSchemeDatas) { schemeDatas = schemeDatas.clone(); } - // Sorting ensures that universal scheme data(i.e. data that applies to all schemes) is matched + // Sorting ensures that universal scheme data (i.e. data that applies to all schemes) is matched // last. It's also required by the equals and hashcode implementations. Arrays.sort(schemeDatas, this); // Check for no duplicates. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java index 3d765dbef51..63387f19e16 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java @@ -22,7 +22,6 @@ import android.media.ResourceBusyException; import java.util.HashMap; import java.util.Map; -import java.util.UUID; /** * Used to obtain keys for decrypting protected media streams. See {@link android.media.MediaDrm}. @@ -137,11 +136,10 @@ byte[] provideKeyResponse(byte[] scope, byte[] response) /** * @see android.media.MediaCrypto#MediaCrypto(UUID, byte[]) * - * @param uuid The UUID of the crypto scheme. * @param initData Opaque initialization data specific to the crypto scheme. * @return An object extends {@link ExoMediaCrypto}, using opaque crypto scheme specific data. * @throws MediaCryptoException */ - T createMediaCrypto(UUID uuid, byte[] initData) throws MediaCryptoException; + T createMediaCrypto(byte[] initData) throws MediaCryptoException; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java index 5d0cb038d45..d664cb69a95 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java @@ -37,6 +37,7 @@ @TargetApi(18) public final class FrameworkMediaDrm implements ExoMediaDrm { + private final UUID uuid; private final MediaDrm mediaDrm; /** @@ -59,10 +60,9 @@ public static FrameworkMediaDrm newInstance(UUID uuid) throws UnsupportedDrmExce private FrameworkMediaDrm(UUID uuid) throws UnsupportedSchemeException { Assertions.checkNotNull(uuid); Assertions.checkArgument(!C.COMMON_PSSH_UUID.equals(uuid), "Use C.CLEARKEY_UUID instead"); - if (Util.SDK_INT < 27 && C.CLEARKEY_UUID.equals(uuid)) { - // ClearKey had to be accessed using the Common PSSH UUID prior to API level 27. - uuid = C.COMMON_PSSH_UUID; - } + // ClearKey had to be accessed using the Common PSSH UUID prior to API level 27. + uuid = Util.SDK_INT < 27 && C.CLEARKEY_UUID.equals(uuid) ? C.COMMON_PSSH_UUID : uuid; + this.uuid = uuid; this.mediaDrm = new MediaDrm(uuid); } @@ -169,8 +169,7 @@ public void setPropertyByteArray(String propertyName, byte[] value) { } @Override - public FrameworkMediaCrypto createMediaCrypto(UUID uuid, byte[] initData) - throws MediaCryptoException { + public FrameworkMediaCrypto createMediaCrypto(byte[] initData) throws MediaCryptoException { // Work around a bug prior to Lollipop where L1 Widevine forced into L3 mode would still // indicate that it required secure video decoders [Internal ref: b/11428937]. boolean forceAllowInsecureDecoderComponents = Util.SDK_INT < 21