Commit 6a55fda6 by aquilescanta Committed by Oliver Woodman

Add DRM protected content to the Cast demo APP

Allows testing DRM-protected content in the receiver app.

Includes the DRM-related data to the media items, but does not
add support for DRM content in the local player yet.

PiperOrigin-RevId: 229932329
parent 310925ca
...@@ -15,10 +15,14 @@ ...@@ -15,10 +15,14 @@
*/ */
package com.google.android.exoplayer2.castdemo; package com.google.android.exoplayer2.castdemo;
import android.net.Uri;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID;
/** Utility methods and constants for the Cast demo application. */ /** Utility methods and constants for the Cast demo application. */
/* package */ final class DemoUtil { /* package */ final class DemoUtil {
...@@ -32,6 +36,16 @@ import java.util.List; ...@@ -32,6 +36,16 @@ import java.util.List;
public final String name; public final String name;
/** The mime type of the sample media content. */ /** The mime type of the sample media content. */
public final String mimeType; public final String mimeType;
/**
* The {@link UUID} of the DRM scheme that protects the content, or null if the content is not
* DRM-protected.
*/
@Nullable public final UUID drmSchemeUuid;
/**
* The url from which players should obtain DRM licenses, or null if the content is not
* DRM-protected.
*/
@Nullable public final Uri licenseServerUri;
/** /**
* @param uri See {@link #uri}. * @param uri See {@link #uri}.
...@@ -39,9 +53,21 @@ import java.util.List; ...@@ -39,9 +53,21 @@ import java.util.List;
* @param mimeType See {@link #mimeType}. * @param mimeType See {@link #mimeType}.
*/ */
public Sample(String uri, String name, String mimeType) { public Sample(String uri, String name, String mimeType) {
this(uri, name, mimeType, /* drmSchemeUuid= */ null, /* licenseServerUriString= */ null);
}
public Sample(
String uri,
String name,
String mimeType,
@Nullable UUID drmSchemeUuid,
@Nullable String licenseServerUriString) {
this.uri = uri; this.uri = uri;
this.name = name; this.name = name;
this.mimeType = mimeType; this.mimeType = mimeType;
this.drmSchemeUuid = drmSchemeUuid;
this.licenseServerUri =
licenseServerUriString != null ? Uri.parse(licenseServerUriString) : null;
} }
@Override @Override
...@@ -65,22 +91,23 @@ import java.util.List; ...@@ -65,22 +91,23 @@ import java.util.List;
samples.add( samples.add(
new Sample( new Sample(
"https://storage.googleapis.com/wvmedia/clear/h264/tears/tears.mpd", "https://storage.googleapis.com/wvmedia/clear/h264/tears/tears.mpd",
"DASH (clear,MP4,H264)", "Clear DASH: Tears",
MIME_TYPE_DASH)); MIME_TYPE_DASH));
samples.add( samples.add(
new Sample( new Sample(
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/" "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/"
+ "hls/TearsOfSteel.m3u8", + "hls/TearsOfSteel.m3u8",
"Tears of Steel (HLS)", "Clear HLS: Tears of Steel",
MIME_TYPE_HLS)); MIME_TYPE_HLS));
samples.add( samples.add(
new Sample( new Sample(
"https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3" "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3"
+ "/bipbop_4x3_variant.m3u8", + "/bipbop_4x3_variant.m3u8",
"HLS Basic (TS)", "Clear HLS: Basic 4x3",
MIME_TYPE_HLS)); MIME_TYPE_HLS));
samples.add( samples.add(
new Sample("https://html5demos.com/assets/dizzy.mp4", "Dizzy (MP4)", MIME_TYPE_VIDEO_MP4)); new Sample(
"https://html5demos.com/assets/dizzy.mp4", "Clear MP4: Dizzy", MIME_TYPE_VIDEO_MP4));
SAMPLES = Collections.unmodifiableList(samples); SAMPLES = Collections.unmodifiableList(samples);
} }
......
...@@ -42,6 +42,7 @@ import com.google.android.gms.cast.CastMediaControlIntent; ...@@ -42,6 +42,7 @@ import com.google.android.gms.cast.CastMediaControlIntent;
import com.google.android.gms.cast.framework.CastButtonFactory; import com.google.android.gms.cast.framework.CastButtonFactory;
import com.google.android.gms.cast.framework.CastContext; import com.google.android.gms.cast.framework.CastContext;
import com.google.android.gms.dynamite.DynamiteModule; import com.google.android.gms.dynamite.DynamiteModule;
import java.util.Collections;
/** /**
* An activity that plays video using {@link SimpleExoPlayer} and supports casting using ExoPlayer's * An activity that plays video using {@link SimpleExoPlayer} and supports casting using ExoPlayer's
...@@ -182,13 +183,18 @@ public class MainActivity extends AppCompatActivity ...@@ -182,13 +183,18 @@ public class MainActivity extends AppCompatActivity
sampleList.setOnItemClickListener( sampleList.setOnItemClickListener(
(parent, view, position, id) -> { (parent, view, position, id) -> {
DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position); DemoUtil.Sample sample = DemoUtil.SAMPLES.get(position);
playerManager.addItem( mediaItemBuilder
mediaItemBuilder .clear()
.clear() .setMedia(sample.uri)
.setMedia(sample.uri) .setTitle(sample.name)
.setTitle(sample.name) .setMimeType(sample.mimeType);
.setMimeType(sample.mimeType) if (sample.drmSchemeUuid != null) {
.build()); mediaItemBuilder.setDrmSchemes(
Collections.singletonList(
new MediaItem.DrmScheme(
sample.drmSchemeUuid, new MediaItem.UriBundle(sample.licenseServerUri))));
}
playerManager.addItem(mediaItemBuilder.build());
mediaQueueListAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1); mediaQueueListAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1);
}); });
return dialogList; return dialogList;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment