Expose OnKeyStatusChange events, this is required to learn the usabilities of the keys.
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=170268043
This commit is contained in:
parent
52de36c5eb
commit
b14b3d43de
@ -21,7 +21,9 @@ import android.media.MediaCryptoException;
|
||||
import android.media.MediaDrm;
|
||||
import android.media.MediaDrmException;
|
||||
import android.media.NotProvisionedException;
|
||||
import android.os.Handler;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -80,6 +82,31 @@ public interface ExoMediaDrm<T extends ExoMediaCrypto> {
|
||||
byte[] data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see android.media.MediaDrm.KeyStatus
|
||||
*/
|
||||
interface ExoKeyStatus {
|
||||
int getStatusCode();
|
||||
byte[] getKeyId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see android.media.MediaDrm.OnKeyStatusChangeListener
|
||||
*/
|
||||
interface OnKeyStatusChangeListener<T extends ExoMediaCrypto> {
|
||||
/**
|
||||
* Called when the keys in a session change status, such as when the license is renewed or
|
||||
* expires.
|
||||
*
|
||||
* @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 hasNewUsableKey true if new key becomes usable.
|
||||
*/
|
||||
void onKeyStatusChange(ExoMediaDrm<? extends T> mediaDrm, byte[] sessionId,
|
||||
List<ExoKeyStatus> exoKeyInfo, boolean hasNewUsableKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see android.media.MediaDrm.KeyRequest
|
||||
*/
|
||||
@ -101,6 +128,11 @@ public interface ExoMediaDrm<T extends ExoMediaCrypto> {
|
||||
*/
|
||||
void setOnEventListener(OnEventListener<? super T> listener);
|
||||
|
||||
/**
|
||||
* @see MediaDrm#setOnKeyStatusChangeListener(MediaDrm.OnKeyStatusChangeListener, Handler)
|
||||
*/
|
||||
void setOnKeyStatusChangeListener(OnKeyStatusChangeListener<? super T> listener);
|
||||
|
||||
/**
|
||||
* @see MediaDrm#openSession()
|
||||
*/
|
||||
|
@ -20,6 +20,7 @@ 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;
|
||||
@ -27,14 +28,16 @@ import android.support.annotation.NonNull;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* An {@link ExoMediaDrm} implementation that wraps the framework {@link MediaDrm}.
|
||||
*/
|
||||
@TargetApi(18)
|
||||
@TargetApi(23)
|
||||
public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto> {
|
||||
|
||||
private final UUID uuid;
|
||||
@ -71,13 +74,36 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
|
||||
final ExoMediaDrm.OnEventListener<? super FrameworkMediaCrypto> listener) {
|
||||
mediaDrm.setOnEventListener(listener == null ? null : new MediaDrm.OnEventListener() {
|
||||
@Override
|
||||
public void onEvent(@NonNull MediaDrm md, byte[] sessionId, int event, int extra,
|
||||
public void onEvent(@NonNull MediaDrm md, @NonNull byte[] sessionId, int event, int extra,
|
||||
byte[] data) {
|
||||
listener.onEvent(FrameworkMediaDrm.this, sessionId, event, extra, data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOnKeyStatusChangeListener(
|
||||
final ExoMediaDrm.OnKeyStatusChangeListener<? super FrameworkMediaCrypto> listener) {
|
||||
if (Util.SDK_INT < 23) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
mediaDrm.setOnKeyStatusChangeListener(listener == null ? null
|
||||
: 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));
|
||||
}
|
||||
|
||||
listener.onKeyStatusChange(FrameworkMediaDrm.this, sessionId, exoKeyInfo,
|
||||
hasNewUsableKey);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] openSession() throws MediaDrmException {
|
||||
return mediaDrm.openSession();
|
||||
@ -178,4 +204,22 @@ 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