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 2699559c5f..78994a9b80 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 @@ -105,101 +105,63 @@ public interface ExoMediaDrm { boolean hasNewUsableKey); } - /** - * @see android.media.MediaDrm.KeyStatus - */ - interface KeyStatus { - /** Returns the status code for the key. */ - int getStatusCode(); - /** Returns the id for the key. */ - byte[] getKeyId(); - } - - /** - * Default implementation of {@link KeyStatus}. - */ - final class DefaultKeyStatus implements KeyStatus { + /** @see android.media.MediaDrm.KeyStatus */ + final class KeyStatus { private final int statusCode; private final byte[] keyId; - DefaultKeyStatus(int statusCode, byte[] keyId) { + public KeyStatus(int statusCode, byte[] keyId) { this.statusCode = statusCode; this.keyId = keyId; } - @Override public int getStatusCode() { return statusCode; } - @Override public byte[] getKeyId() { return keyId; } } - /** - * @see android.media.MediaDrm.KeyRequest - */ - interface KeyRequest { - byte[] getData(); - String getDefaultUrl(); - } - - /** - * Default implementation of {@link KeyRequest}. - */ - final class DefaultKeyRequest implements KeyRequest { + /** @see android.media.MediaDrm.KeyRequest */ + final class KeyRequest { private final byte[] data; private final String defaultUrl; - public DefaultKeyRequest(byte[] data, String defaultUrl) { + public KeyRequest(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 - */ - interface ProvisionRequest { - byte[] getData(); - String getDefaultUrl(); - } - - /** - * Default implementation of {@link ProvisionRequest}. - */ - final class DefaultProvisionRequest implements ProvisionRequest { + /** @see android.media.MediaDrm.ProvisionRequest */ + final class ProvisionRequest { private final byte[] data; private final String defaultUrl; - public DefaultProvisionRequest(byte[] data, String defaultUrl) { + public ProvisionRequest(byte[] data, String defaultUrl) { this.data = data; this.defaultUrl = defaultUrl; } - @Override public byte[] getData() { return data; } - @Override public String getDefaultUrl() { return defaultUrl; } 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 c87e82f972..842c5669d9 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 @@ -94,20 +94,26 @@ public final class FrameworkMediaDrm implements ExoMediaDrm 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); - } - }, null); + + mediaDrm.setOnKeyStatusChangeListener( + listener == null + ? null + : new MediaDrm.OnKeyStatusChangeListener() { + @Override + public void onKeyStatusChange( + @NonNull MediaDrm md, + @NonNull byte[] sessionId, + @NonNull List keyInfo, + boolean hasNewUsableKey) { + List exoKeyInfo = new ArrayList<>(); + for (MediaDrm.KeyStatus keyStatus : keyInfo) { + exoKeyInfo.add(new KeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId())); + } + listener.onKeyStatusChange( + FrameworkMediaDrm.this, sessionId, exoKeyInfo, hasNewUsableKey); + } + }, + null); } @Override @@ -121,8 +127,13 @@ public final class FrameworkMediaDrm implements ExoMediaDrm optionalParameters) throws NotProvisionedException { + public KeyRequest getKeyRequest( + byte[] scope, + byte[] init, + String mimeType, + int keyType, + HashMap optionalParameters) + throws NotProvisionedException { // Prior to L the Widevine CDM required data to be extracted from the PSSH atom. Some Amazon // devices also required data to be extracted from the PSSH atom for PlayReady. @@ -155,7 +166,7 @@ public final class FrameworkMediaDrm implements ExoMediaDrm