mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Add default implementations for ExoMediaDrm.* interfaces
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=175010595
This commit is contained in:
parent
acf5247f6e
commit
367bb64ba0
@ -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) {
|
||||
|
@ -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)
|
||||
*/
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user