package com.kaltura.playersdk.drm;
import android.annotation.TargetApi;
import android.media.DeniedByServerException;
import android.media.MediaDrm;
import android.media.MediaDrmException;
import android.media.NotProvisionedException;
import android.os.Build;
import android.support.annotation.NonNull;
import java.util.Map;
/**
* Created by noamt on 05/05/2016.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
class MediaDrmSession {
final MediaDrm mMediaDrm;
byte[] mSessionId;
private MediaDrmSession(@NonNull MediaDrm mediaDrm) {
mMediaDrm = mediaDrm;
}
static MediaDrmSession open(@NonNull MediaDrm mediaDrm) throws MediaDrmException {
MediaDrmSession session = new MediaDrmSession(mediaDrm);
session.mSessionId = mediaDrm.openSession();
return session;
}
byte[] getId() {
return mSessionId;
}
void close() {
mMediaDrm.closeSession(mSessionId);
}
void restoreKeys(byte[] keySetId) {
mMediaDrm.restoreKeys(mSessionId, keySetId);
}
public Map<String, String> queryKeyStatus() {
return mMediaDrm.queryKeyStatus(mSessionId);
}
MediaDrm.KeyRequest getOfflineKeyRequest(byte[] initData, String mimeType) {
try {
return mMediaDrm.getKeyRequest(mSessionId, initData, mimeType, MediaDrm.KEY_TYPE_OFFLINE, null);
} catch (NotProvisionedException e) {
throw new WidevineNotSupportedException(e);
}
}
byte[] provideKeyResponse(byte[] keyResponse) throws DeniedByServerException {
try {
return mMediaDrm.provideKeyResponse(mSessionId, keyResponse);
} catch (NotProvisionedException e) {
throw new WidevineNotSupportedException(e);
}
}
}