Add default implementations for ExoMediaDrm.* interfaces

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175010595
This commit is contained in:
olly 2017-11-08 08:34:20 -08:00 committed by Oliver Woodman
parent acf5247f6e
commit 367bb64ba0
3 changed files with 95 additions and 69 deletions

View File

@ -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) {

View File

@ -82,14 +82,6 @@ public interface ExoMediaDrm<T extends ExoMediaCrypto> {
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<T extends ExoMediaCrypto> {
*
* @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<? extends T> mediaDrm, byte[] sessionId,
List<ExoKeyStatus> exoKeyInfo, boolean hasNewUsableKey);
List<KeyStatus> 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<T extends ExoMediaCrypto> {
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<T extends ExoMediaCrypto> {
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)
*/

View File

@ -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<FrameworkMediaCrypto
: new MediaDrm.OnKeyStatusChangeListener() {
@Override
public void onKeyStatusChange(@NonNull MediaDrm md, @NonNull byte[] sessionId,
@NonNull List<KeyStatus> keyInfo, boolean hasNewUsableKey) {
List<ExoKeyStatus> exoKeyInfo = new ArrayList<>();
for (KeyStatus keyStatus : keyInfo) {
exoKeyInfo.add(new FrameworkKeyStatus(keyStatus));
@NonNull List<MediaDrm.KeyStatus> keyInfo, boolean hasNewUsableKey) {
List<KeyStatus> 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<FrameworkMediaCrypto
HashMap<String, String> 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<FrameworkMediaCrypto
@Override
public ProvisionRequest getProvisionRequest() {
final MediaDrm.ProvisionRequest provisionRequest = mediaDrm.getProvisionRequest();
return new ProvisionRequest() {
@Override
public byte[] getData() {
return provisionRequest.getData();
}
@Override
public String getDefaultUrl() {
return provisionRequest.getDefaultUrl();
}
};
final MediaDrm.ProvisionRequest request = mediaDrm.getProvisionRequest();
return new DefaultProvisionRequest(request.getData(), request.getDefaultUrl());
}
@Override
@ -205,22 +183,4 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
forceAllowInsecureDecoderComponents);
}
private static final class FrameworkKeyStatus implements ExoKeyStatus {
private final MediaDrm.KeyStatus keyStatus;
FrameworkKeyStatus(MediaDrm.KeyStatus keyStatus) {
this.keyStatus = keyStatus;
}
@Override
public int getStatusCode() {
return keyStatus.getStatusCode();
}
@Override
public byte[] getKeyId() {
return keyStatus.getKeyId();
}
}
}