diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java index c391b7035d..25fdaba5b8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java @@ -25,6 +25,7 @@ import android.os.Message; import android.util.Log; import android.util.Pair; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.drm.ExoMediaDrm.DefaultKeyRequest; import com.google.android.exoplayer2.drm.ExoMediaDrm.KeyRequest; import com.google.android.exoplayer2.drm.ExoMediaDrm.ProvisionRequest; import java.util.Arrays; @@ -363,18 +364,8 @@ import java.util.UUID; KeyRequest request = mediaDrm.getKeyRequest(scope, initData, mimeType, type, optionalKeyRequestParameters); if (C.CLEARKEY_UUID.equals(uuid)) { - final byte[] data = ClearKeyUtil.adjustRequestData(request.getData()); - final String defaultUrl = request.getDefaultUrl(); - request = new KeyRequest() { - @Override - public byte[] getData() { - return data; - } - @Override - public String getDefaultUrl() { - return defaultUrl; - } - }; + request = new DefaultKeyRequest(ClearKeyUtil.adjustRequestData(request.getData()), + request.getDefaultUrl()); } postRequestHandler.obtainMessage(MSG_KEYS, request, allowRetry).sendToTarget(); } catch (Exception e) { 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 e9ee1ce90b..cecc840511 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 @@ -82,14 +82,6 @@ public interface ExoMediaDrm { byte[] data); } - /** - * @see android.media.MediaDrm.KeyStatus - */ - interface ExoKeyStatus { - int getStatusCode(); - byte[] getKeyId(); - } - /** * @see android.media.MediaDrm.OnKeyStatusChangeListener */ @@ -100,11 +92,44 @@ public interface ExoMediaDrm { * * @param mediaDrm the {@link ExoMediaDrm} object on which the event occurred. * @param sessionId the DRM session ID on which the event occurred. - * @param exoKeyInfo a list of {@link ExoKeyStatus} that contains key ID and status. + * @param exoKeyInfo a list of {@link KeyStatus} that contains key ID and status. * @param hasNewUsableKey true if new key becomes usable. */ void onKeyStatusChange(ExoMediaDrm mediaDrm, byte[] sessionId, - List exoKeyInfo, boolean hasNewUsableKey); + List exoKeyInfo, boolean hasNewUsableKey); + } + + /** + * @see android.media.MediaDrm.KeyStatus + */ + interface KeyStatus { + int getStatusCode(); + byte[] getKeyId(); + } + + /** + * Default implementation of {@link KeyStatus}. + */ + final class DefaultKeyStatus implements KeyStatus { + + private final int statusCode; + private final byte[] keyId; + + DefaultKeyStatus(int statusCode, byte[] keyId) { + this.statusCode = statusCode; + this.keyId = keyId; + } + + @Override + public int getStatusCode() { + return statusCode; + } + + @Override + public byte[] getKeyId() { + return keyId; + } + } /** @@ -115,6 +140,31 @@ public interface ExoMediaDrm { String getDefaultUrl(); } + /** + * Default implementation of {@link KeyRequest}. + */ + final class DefaultKeyRequest implements KeyRequest { + + private final byte[] data; + private final String defaultUrl; + + public DefaultKeyRequest(byte[] data, String defaultUrl) { + this.data = data; + this.defaultUrl = defaultUrl; + } + + @Override + public byte[] getData() { + return data; + } + + @Override + public String getDefaultUrl() { + return defaultUrl; + } + + } + /** * @see android.media.MediaDrm.ProvisionRequest */ @@ -123,6 +173,31 @@ public interface ExoMediaDrm { String getDefaultUrl(); } + /** + * Default implementation of {@link ProvisionRequest}. + */ + final class DefaultProvisionRequest implements ProvisionRequest { + + private final byte[] data; + private final String defaultUrl; + + public DefaultProvisionRequest(byte[] data, String defaultUrl) { + this.data = data; + this.defaultUrl = defaultUrl; + } + + @Override + public byte[] getData() { + return data; + } + + @Override + public String getDefaultUrl() { + return defaultUrl; + } + + } + /** * @see MediaDrm#setOnEventListener(MediaDrm.OnEventListener) */ 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 517ca9247c..f960cd637f 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 @@ -20,7 +20,6 @@ import android.media.DeniedByServerException; import android.media.MediaCrypto; import android.media.MediaCryptoException; import android.media.MediaDrm; -import android.media.MediaDrm.KeyStatus; import android.media.MediaDrmException; import android.media.NotProvisionedException; import android.media.UnsupportedSchemeException; @@ -93,12 +92,11 @@ public final class FrameworkMediaDrm implements ExoMediaDrm keyInfo, boolean hasNewUsableKey) { - List exoKeyInfo = new ArrayList<>(); - for (KeyStatus keyStatus : keyInfo) { - exoKeyInfo.add(new FrameworkKeyStatus(keyStatus)); + @NonNull List keyInfo, boolean hasNewUsableKey) { + List exoKeyInfo = new ArrayList<>(); + for (MediaDrm.KeyStatus keyStatus : keyInfo) { + exoKeyInfo.add(new DefaultKeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId())); } - listener.onKeyStatusChange(FrameworkMediaDrm.this, sessionId, exoKeyInfo, hasNewUsableKey); } @@ -120,17 +118,7 @@ public final class FrameworkMediaDrm implements ExoMediaDrm optionalParameters) throws NotProvisionedException { final MediaDrm.KeyRequest request = mediaDrm.getKeyRequest(scope, init, mimeType, keyType, optionalParameters); - return new KeyRequest() { - @Override - public byte[] getData() { - return request.getData(); - } - - @Override - public String getDefaultUrl() { - return request.getDefaultUrl(); - } - }; + return new DefaultKeyRequest(request.getData(), request.getDefaultUrl()); } @Override @@ -141,18 +129,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm