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.Log;
import android.util.Pair; import android.util.Pair;
import com.google.android.exoplayer2.C; 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.KeyRequest;
import com.google.android.exoplayer2.drm.ExoMediaDrm.ProvisionRequest; import com.google.android.exoplayer2.drm.ExoMediaDrm.ProvisionRequest;
import java.util.Arrays; import java.util.Arrays;
@ -363,18 +364,8 @@ import java.util.UUID;
KeyRequest request = mediaDrm.getKeyRequest(scope, initData, mimeType, type, KeyRequest request = mediaDrm.getKeyRequest(scope, initData, mimeType, type,
optionalKeyRequestParameters); optionalKeyRequestParameters);
if (C.CLEARKEY_UUID.equals(uuid)) { if (C.CLEARKEY_UUID.equals(uuid)) {
final byte[] data = ClearKeyUtil.adjustRequestData(request.getData()); request = new DefaultKeyRequest(ClearKeyUtil.adjustRequestData(request.getData()),
final String defaultUrl = request.getDefaultUrl(); request.getDefaultUrl());
request = new KeyRequest() {
@Override
public byte[] getData() {
return data;
}
@Override
public String getDefaultUrl() {
return defaultUrl;
}
};
} }
postRequestHandler.obtainMessage(MSG_KEYS, request, allowRetry).sendToTarget(); postRequestHandler.obtainMessage(MSG_KEYS, request, allowRetry).sendToTarget();
} catch (Exception e) { } catch (Exception e) {

View File

@ -82,14 +82,6 @@ public interface ExoMediaDrm<T extends ExoMediaCrypto> {
byte[] data); byte[] data);
} }
/**
* @see android.media.MediaDrm.KeyStatus
*/
interface ExoKeyStatus {
int getStatusCode();
byte[] getKeyId();
}
/** /**
* @see android.media.MediaDrm.OnKeyStatusChangeListener * @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 mediaDrm the {@link ExoMediaDrm} object on which the event occurred.
* @param sessionId the DRM session ID 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. * @param hasNewUsableKey true if new key becomes usable.
*/ */
void onKeyStatusChange(ExoMediaDrm<? extends T> mediaDrm, byte[] sessionId, 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(); 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 * @see android.media.MediaDrm.ProvisionRequest
*/ */
@ -123,6 +173,31 @@ public interface ExoMediaDrm<T extends ExoMediaCrypto> {
String getDefaultUrl(); 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) * @see MediaDrm#setOnEventListener(MediaDrm.OnEventListener)
*/ */

View File

@ -20,7 +20,6 @@ import android.media.DeniedByServerException;
import android.media.MediaCrypto; import android.media.MediaCrypto;
import android.media.MediaCryptoException; import android.media.MediaCryptoException;
import android.media.MediaDrm; import android.media.MediaDrm;
import android.media.MediaDrm.KeyStatus;
import android.media.MediaDrmException; import android.media.MediaDrmException;
import android.media.NotProvisionedException; import android.media.NotProvisionedException;
import android.media.UnsupportedSchemeException; import android.media.UnsupportedSchemeException;
@ -93,12 +92,11 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
: new MediaDrm.OnKeyStatusChangeListener() { : new MediaDrm.OnKeyStatusChangeListener() {
@Override @Override
public void onKeyStatusChange(@NonNull MediaDrm md, @NonNull byte[] sessionId, public void onKeyStatusChange(@NonNull MediaDrm md, @NonNull byte[] sessionId,
@NonNull List<KeyStatus> keyInfo, boolean hasNewUsableKey) { @NonNull List<MediaDrm.KeyStatus> keyInfo, boolean hasNewUsableKey) {
List<ExoKeyStatus> exoKeyInfo = new ArrayList<>(); List<KeyStatus> exoKeyInfo = new ArrayList<>();
for (KeyStatus keyStatus : keyInfo) { for (MediaDrm.KeyStatus keyStatus : keyInfo) {
exoKeyInfo.add(new FrameworkKeyStatus(keyStatus)); exoKeyInfo.add(new DefaultKeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId()));
} }
listener.onKeyStatusChange(FrameworkMediaDrm.this, sessionId, exoKeyInfo, listener.onKeyStatusChange(FrameworkMediaDrm.this, sessionId, exoKeyInfo,
hasNewUsableKey); hasNewUsableKey);
} }
@ -120,17 +118,7 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
HashMap<String, String> optionalParameters) throws NotProvisionedException { HashMap<String, String> optionalParameters) throws NotProvisionedException {
final MediaDrm.KeyRequest request = mediaDrm.getKeyRequest(scope, init, mimeType, keyType, final MediaDrm.KeyRequest request = mediaDrm.getKeyRequest(scope, init, mimeType, keyType,
optionalParameters); optionalParameters);
return new KeyRequest() { return new DefaultKeyRequest(request.getData(), request.getDefaultUrl());
@Override
public byte[] getData() {
return request.getData();
}
@Override
public String getDefaultUrl() {
return request.getDefaultUrl();
}
};
} }
@Override @Override
@ -141,18 +129,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
@Override @Override
public ProvisionRequest getProvisionRequest() { public ProvisionRequest getProvisionRequest() {
final MediaDrm.ProvisionRequest provisionRequest = mediaDrm.getProvisionRequest(); final MediaDrm.ProvisionRequest request = mediaDrm.getProvisionRequest();
return new ProvisionRequest() { return new DefaultProvisionRequest(request.getData(), request.getDefaultUrl());
@Override
public byte[] getData() {
return provisionRequest.getData();
}
@Override
public String getDefaultUrl() {
return provisionRequest.getDefaultUrl();
}
};
} }
@Override @Override
@ -205,22 +183,4 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
forceAllowInsecureDecoderComponents); 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();
}
}
} }