diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java b/demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java index 80ef0c5c50..9ad0f27ce4 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java @@ -35,15 +35,12 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; -import java.util.UUID; /** * Utility methods for the demo application. */ public class DemoUtil { - public static final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL); - public static final int TYPE_DASH = 0; public static final int TYPE_SS = 1; public static final int TYPE_OTHER = 2; diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/player/DashRendererBuilder.java b/demo/src/main/java/com/google/android/exoplayer/demo/player/DashRendererBuilder.java index 746a3138f0..1edc9e2e66 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/player/DashRendererBuilder.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/player/DashRendererBuilder.java @@ -40,7 +40,6 @@ import com.google.android.exoplayer.dash.mpd.Representation; import com.google.android.exoplayer.dash.mpd.UtcTimingElement; import com.google.android.exoplayer.dash.mpd.UtcTimingElementResolver; import com.google.android.exoplayer.dash.mpd.UtcTimingElementResolver.UtcTimingCallback; -import com.google.android.exoplayer.demo.DemoUtil; import com.google.android.exoplayer.demo.player.DemoPlayer.RendererBuilder; import com.google.android.exoplayer.demo.player.DemoPlayer.RendererBuilderCallback; import com.google.android.exoplayer.drm.DrmSessionManager; @@ -364,9 +363,9 @@ public class DashRendererBuilder implements RendererBuilder, public static Pair getDrmSessionManagerData(DemoPlayer player, MediaDrmCallback drmCallback) throws UnsupportedDrmException { try { - StreamingDrmSessionManager streamingDrmSessionManager = new StreamingDrmSessionManager( - DemoUtil.WIDEVINE_UUID, player.getPlaybackLooper(), drmCallback, null, - player.getMainHandler(), player); + StreamingDrmSessionManager streamingDrmSessionManager = + StreamingDrmSessionManager.newWidevineInstance(player.getPlaybackLooper(), drmCallback, + null, player.getMainHandler(), player); return Pair.create((DrmSessionManager) streamingDrmSessionManager, getWidevineSecurityLevel(streamingDrmSessionManager) == SECURITY_LEVEL_1); } catch (UnsupportedSchemeException e) { diff --git a/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java b/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java index 95a91523ec..2855678b5f 100644 --- a/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java +++ b/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java @@ -29,6 +29,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; +import android.text.TextUtils; import java.util.HashMap; import java.util.UUID; @@ -55,6 +56,24 @@ public class StreamingDrmSessionManager implements DrmSessionManager { } + /** + * UUID for the Widevine DRM scheme. + */ + public static final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL); + + /** + * UUID for the PlayReady DRM scheme. + *

+ * Note that PlayReady is unsupported by most Android devices, with the exception of Android TV + * devices, which do provide support. + */ + public static final UUID PLAYREADY_UUID = new UUID(0x9A04F07998404286L, 0xAB92E65BE0885F95L); + + /** + * The key to use when passing CustomData to a PlayReady instance in an optional parameter map. + */ + public static final String PLAYREADY_CUSTOM_DATA_KEY = "PRCustomData"; + private static final int MSG_PROVISION = 0; private static final int MSG_KEYS = 1; @@ -80,6 +99,55 @@ public class StreamingDrmSessionManager implements DrmSessionManager { private byte[] schemePsshData; private byte[] sessionId; + /** + * Instantiates a new instance using the Widevine scheme. + * + * @param playbackLooper The looper associated with the media playback thread. Should usually be + * obtained using {@link com.google.android.exoplayer.ExoPlayer#getPlaybackLooper()}. + * @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 + * 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. + */ + public static StreamingDrmSessionManager newWidevineInstance(Looper playbackLooper, + MediaDrmCallback callback, HashMap optionalKeyRequestParameters, + Handler eventHandler, EventListener eventListener) throws UnsupportedSchemeException { + return new StreamingDrmSessionManager(WIDEVINE_UUID, playbackLooper, callback, + optionalKeyRequestParameters, eventHandler, eventListener); + } + + /** + * Instantiates a new instance using the PlayReady scheme. + *

+ * Note that PlayReady is unsupported by most Android devices, with the exception of Android TV + * devices, which do provide support. + * + * @param playbackLooper The looper associated with the media playback thread. Should usually be + * obtained using {@link com.google.android.exoplayer.ExoPlayer#getPlaybackLooper()}. + * @param callback Performs key and provisioning requests. + * @param customData Optional custom data to include in requests generated by the instance. + * @param eventHandler A handler to use when delivering events to {@code eventListener}. 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. + */ + public static StreamingDrmSessionManager newPlayReadyInstance(Looper playbackLooper, + MediaDrmCallback callback, String customData, Handler eventHandler, + EventListener eventListener) throws UnsupportedSchemeException { + HashMap optionalKeyRequestParameters; + if (!TextUtils.isEmpty(customData)) { + optionalKeyRequestParameters = new HashMap(); + optionalKeyRequestParameters.put(PLAYREADY_CUSTOM_DATA_KEY, customData); + } else { + optionalKeyRequestParameters = null; + } + return new StreamingDrmSessionManager(PLAYREADY_UUID, playbackLooper, callback, + optionalKeyRequestParameters, eventHandler, eventListener); + } + /** * @param uuid The UUID of the drm scheme. * @param playbackLooper The looper associated with the media playback thread. Should usually be