Allow passing of optional parameters in MediaDrm key requests.

This commit is contained in:
Oliver Woodman 2014-12-08 20:12:04 +00:00
parent 01151c9c65
commit cf80c4d9cb
3 changed files with 20 additions and 5 deletions

View File

@ -279,8 +279,8 @@ public class DashRendererBuilder implements RendererBuilder,
public static Pair<DrmSessionManager, Boolean> getDrmSessionManagerData(DemoPlayer player, public static Pair<DrmSessionManager, Boolean> getDrmSessionManagerData(DemoPlayer player,
MediaDrmCallback drmCallback) throws UnsupportedSchemeException { MediaDrmCallback drmCallback) throws UnsupportedSchemeException {
StreamingDrmSessionManager streamingDrmSessionManager = new StreamingDrmSessionManager( StreamingDrmSessionManager streamingDrmSessionManager = new StreamingDrmSessionManager(
DemoUtil.WIDEVINE_UUID, player.getPlaybackLooper(), drmCallback, player.getMainHandler(), DemoUtil.WIDEVINE_UUID, player.getPlaybackLooper(), drmCallback, null,
player); player.getMainHandler(), player);
return Pair.create((DrmSessionManager) streamingDrmSessionManager, return Pair.create((DrmSessionManager) streamingDrmSessionManager,
getWidevineSecurityLevel(streamingDrmSessionManager) == SECURITY_LEVEL_1); getWidevineSecurityLevel(streamingDrmSessionManager) == SECURITY_LEVEL_1);
} }

View File

@ -252,7 +252,7 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
public static DrmSessionManager getDrmSessionManager(UUID uuid, DemoPlayer player, public static DrmSessionManager getDrmSessionManager(UUID uuid, DemoPlayer player,
MediaDrmCallback drmCallback) throws UnsupportedSchemeException { MediaDrmCallback drmCallback) throws UnsupportedSchemeException {
return new StreamingDrmSessionManager(uuid, player.getPlaybackLooper(), drmCallback, return new StreamingDrmSessionManager(uuid, player.getPlaybackLooper(), drmCallback, null,
player.getMainHandler(), player); player.getMainHandler(), player);
} }

View File

@ -30,6 +30,7 @@ import android.os.HandlerThread;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -61,6 +62,7 @@ public class StreamingDrmSessionManager implements DrmSessionManager {
private final Handler eventHandler; private final Handler eventHandler;
private final EventListener eventListener; private final EventListener eventListener;
private final MediaDrm mediaDrm; private final MediaDrm mediaDrm;
private final HashMap<String, String> optionalKeyRequestParameters;
/* package */ final MediaDrmHandler mediaDrmHandler; /* package */ final MediaDrmHandler mediaDrmHandler;
/* package */ final MediaDrmCallback callback; /* package */ final MediaDrmCallback callback;
@ -79,20 +81,33 @@ public class StreamingDrmSessionManager implements DrmSessionManager {
private byte[] schemePsshData; private byte[] schemePsshData;
private byte[] sessionId; private byte[] sessionId;
/**
* @deprecated Use the other constructor, passing null as {@code optionalKeyRequestParameters}.
*/
@Deprecated
public StreamingDrmSessionManager(UUID uuid, Looper playbackLooper, MediaDrmCallback callback,
Handler eventHandler, EventListener eventListener) throws UnsupportedSchemeException {
this(uuid, playbackLooper, callback, null, eventHandler, eventListener);
}
/** /**
* @param uuid The UUID of the drm scheme. * @param uuid The UUID of the drm scheme.
* @param playbackLooper The looper associated with the media playback thread. Should usually be * @param playbackLooper The looper associated with the media playback thread. Should usually be
* obtained using {@link com.google.android.exoplayer.ExoPlayer#getPlaybackLooper()}. * obtained using {@link com.google.android.exoplayer.ExoPlayer#getPlaybackLooper()}.
* @param callback Performs key and provisioning requests. * @param callback Performs key and provisioning requests.
* @param optionalKeyRequestParameters An optional map of parameters to pass as the last argument
* to {@link MediaDrm#getKeyRequest(byte[], byte[], String, int, HashMap)}. May be null.
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
* null if delivery of events is not required. * null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required.
* @throws UnsupportedSchemeException If the specified DRM scheme is not supported. * @throws UnsupportedSchemeException If the specified DRM scheme is not supported.
*/ */
public StreamingDrmSessionManager(UUID uuid, Looper playbackLooper, MediaDrmCallback callback, public StreamingDrmSessionManager(UUID uuid, Looper playbackLooper, MediaDrmCallback callback,
Handler eventHandler, EventListener eventListener) throws UnsupportedSchemeException { HashMap<String, String> optionalKeyRequestParameters, Handler eventHandler,
EventListener eventListener) throws UnsupportedSchemeException {
this.uuid = uuid; this.uuid = uuid;
this.callback = callback; this.callback = callback;
this.optionalKeyRequestParameters = optionalKeyRequestParameters;
this.eventHandler = eventHandler; this.eventHandler = eventHandler;
this.eventListener = eventListener; this.eventListener = eventListener;
mediaDrm = new MediaDrm(uuid); mediaDrm = new MediaDrm(uuid);
@ -250,7 +265,7 @@ public class StreamingDrmSessionManager implements DrmSessionManager {
KeyRequest keyRequest; KeyRequest keyRequest;
try { try {
keyRequest = mediaDrm.getKeyRequest(sessionId, schemePsshData, mimeType, keyRequest = mediaDrm.getKeyRequest(sessionId, schemePsshData, mimeType,
MediaDrm.KEY_TYPE_STREAMING, null); MediaDrm.KEY_TYPE_STREAMING, optionalKeyRequestParameters);
postRequestHandler.obtainMessage(MSG_KEYS, keyRequest).sendToTarget(); postRequestHandler.obtainMessage(MSG_KEYS, keyRequest).sendToTarget();
} catch (NotProvisionedException e) { } catch (NotProvisionedException e) {
onKeysError(e); onKeysError(e);