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.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) {
|
||||||
|
@ -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)
|
||||||
*/
|
*/
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user