Commit c0a81e11 by Oliver Woodman

Update Widevine test streams.

parent c0f0cbcb
...@@ -81,6 +81,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, ...@@ -81,6 +81,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
// For use within demo app code. // For use within demo app code.
public static final String CONTENT_ID_EXTRA = "content_id"; public static final String CONTENT_ID_EXTRA = "content_id";
public static final String CONTENT_TYPE_EXTRA = "content_type"; public static final String CONTENT_TYPE_EXTRA = "content_type";
public static final String PROVIDER_EXTRA = "provider";
public static final int TYPE_DASH = 0; public static final int TYPE_DASH = 0;
public static final int TYPE_SS = 1; public static final int TYPE_SS = 1;
public static final int TYPE_HLS = 2; public static final int TYPE_HLS = 2;
...@@ -126,6 +127,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, ...@@ -126,6 +127,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
private Uri contentUri; private Uri contentUri;
private int contentType; private int contentType;
private String contentId; private String contentId;
private String provider;
private AudioCapabilitiesReceiver audioCapabilitiesReceiver; private AudioCapabilitiesReceiver audioCapabilitiesReceiver;
...@@ -202,6 +204,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, ...@@ -202,6 +204,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
contentType = intent.getIntExtra(CONTENT_TYPE_EXTRA, contentType = intent.getIntExtra(CONTENT_TYPE_EXTRA,
inferContentType(contentUri, intent.getStringExtra(CONTENT_EXT_EXTRA))); inferContentType(contentUri, intent.getStringExtra(CONTENT_EXT_EXTRA)));
contentId = intent.getStringExtra(CONTENT_ID_EXTRA); contentId = intent.getStringExtra(CONTENT_ID_EXTRA);
provider = intent.getStringExtra(PROVIDER_EXTRA);
configureSubtitleView(); configureSubtitleView();
if (player == null) { if (player == null) {
preparePlayer(true); preparePlayer(true);
...@@ -261,7 +264,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, ...@@ -261,7 +264,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
new SmoothStreamingTestMediaDrmCallback()); new SmoothStreamingTestMediaDrmCallback());
case TYPE_DASH: case TYPE_DASH:
return new DashRendererBuilder(this, userAgent, contentUri.toString(), return new DashRendererBuilder(this, userAgent, contentUri.toString(),
new WidevineTestMediaDrmCallback(contentId)); new WidevineTestMediaDrmCallback(contentId, provider));
case TYPE_HLS: case TYPE_HLS:
return new HlsRendererBuilder(this, userAgent, contentUri.toString()); return new HlsRendererBuilder(this, userAgent, contentUri.toString());
case TYPE_OTHER: case TYPE_OTHER:
......
...@@ -52,24 +52,34 @@ public class SampleChooserActivity extends Activity { ...@@ -52,24 +52,34 @@ public class SampleChooserActivity extends Activity {
sampleAdapter.add(new Header("YouTube DASH")); sampleAdapter.add(new Header("YouTube DASH"));
sampleAdapter.addAll((Object[]) Samples.YOUTUBE_DASH_MP4); sampleAdapter.addAll((Object[]) Samples.YOUTUBE_DASH_MP4);
sampleAdapter.add(new Header("Widevine GTS DASH")); sampleAdapter.add(new Header("Widevine DASH Policy Tests (GTS)"));
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_GTS); sampleAdapter.addAll((Object[]) Samples.WIDEVINE_GTS);
sampleAdapter.add(new Header("SmoothStreaming")); sampleAdapter.add(new Header("Widevine DASH"));
sampleAdapter.addAll((Object[]) Samples.SMOOTHSTREAMING); sampleAdapter.addAll((Object[]) Samples.WIDEVINE_DASH_MP4);
sampleAdapter.add(new Header("HLS"));
sampleAdapter.addAll((Object[]) Samples.HLS);
sampleAdapter.add(new Header("Misc"));
sampleAdapter.addAll((Object[]) Samples.MISC);
// Add WebM samples if the device has a VP9 decoder.
try { try {
if (MediaCodecUtil.getDecoderInfo(MimeTypes.VIDEO_VP9, false) != null) { if (MediaCodecUtil.getDecoderInfo(MimeTypes.VIDEO_VP9, false) != null) {
sampleAdapter.add(new Header("YouTube WebM DASH (Experimental)")); sampleAdapter.addAll((Object[]) Samples.WIDEVINE_DASH_WEBM);
sampleAdapter.addAll((Object[]) Samples.YOUTUBE_DASH_WEBM);
} }
} catch (DecoderQueryException e) { } catch (DecoderQueryException e) {
Log.e(TAG, "Failed to query vp9 decoder", e); Log.e(TAG, "Failed to query vp9 decoder", e);
} }
sampleAdapter.add(new Header("Widevine DASH Policy Tests (GTS)"));
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_GTS);
sampleAdapter.add(new Header("Widevine DASH"));
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_DASH_MP4);
// try {
// if (MediaCodecUtil.getDecoderInfo(MimeTypes.VIDEO_VP9, false) != null) {
// sampleAdapter.addAll((Object[]) Samples.WIDEVINE_DASH_WEBM);
// }
// } catch (DecoderQueryException e) {
// Log.e(TAG, "Failed to query vp9 decoder", e);
// }
sampleAdapter.add(new Header("SmoothStreaming"));
sampleAdapter.addAll((Object[]) Samples.SMOOTHSTREAMING);
sampleAdapter.add(new Header("HLS"));
sampleAdapter.addAll((Object[]) Samples.HLS);
sampleAdapter.add(new Header("Misc"));
sampleAdapter.addAll((Object[]) Samples.MISC);
sampleList.setAdapter(sampleAdapter); sampleList.setAdapter(sampleAdapter);
sampleList.setOnItemClickListener(new OnItemClickListener() { sampleList.setOnItemClickListener(new OnItemClickListener() {
...@@ -87,7 +97,8 @@ public class SampleChooserActivity extends Activity { ...@@ -87,7 +97,8 @@ public class SampleChooserActivity extends Activity {
Intent mpdIntent = new Intent(this, PlayerActivity.class) Intent mpdIntent = new Intent(this, PlayerActivity.class)
.setData(Uri.parse(sample.uri)) .setData(Uri.parse(sample.uri))
.putExtra(PlayerActivity.CONTENT_ID_EXTRA, sample.contentId) .putExtra(PlayerActivity.CONTENT_ID_EXTRA, sample.contentId)
.putExtra(PlayerActivity.CONTENT_TYPE_EXTRA, sample.type); .putExtra(PlayerActivity.CONTENT_TYPE_EXTRA, sample.type)
.putExtra(PlayerActivity.PROVIDER_EXTRA, sample.provider);
startActivity(mpdIntent); startActivity(mpdIntent);
} }
......
...@@ -26,16 +26,18 @@ import java.util.Locale; ...@@ -26,16 +26,18 @@ import java.util.Locale;
public final String name; public final String name;
public final String contentId; public final String contentId;
public final String provider;
public final String uri; public final String uri;
public final int type; public final int type;
public Sample(String name, String uri, int type) { public Sample(String name, String uri, int type) {
this(name, name.toLowerCase(Locale.US).replaceAll("\\s", ""), uri, type); this(name, name.toLowerCase(Locale.US).replaceAll("\\s", ""), "", uri, type);
} }
public Sample(String name, String contentId, String uri, int type) { public Sample(String name, String contentId, String provider, String uri, int type) {
this.name = name; this.name = name;
this.contentId = contentId; this.contentId = contentId;
this.provider = provider;
this.uri = uri; this.uri = uri;
this.type = type; this.type = type;
} }
...@@ -77,37 +79,36 @@ import java.util.Locale; ...@@ -77,37 +79,36 @@ import java.util.Locale;
PlayerActivity.TYPE_SS), PlayerActivity.TYPE_SS),
}; };
private static final String WIDEVINE_GTS_MPD =
"https://storage.googleapis.com/wvmedia/cenc/h264/tears.mpd";
public static final Sample[] WIDEVINE_GTS = new Sample[] { public static final Sample[] WIDEVINE_GTS = new Sample[] {
new Sample("WV: HDCP not specified", "d286538032258a1c", new Sample("WV: HDCP not specified", "d286538032258a1c", "widevine_test",
"http://www.youtube.com/api/manifest/dash/id/d286538032258a1c/source/youtube?" WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0" new Sample("WV: HDCP not required", "48fcc369939ac96c", "widevine_test",
+ "&ipbits=0&expire=19000000000&signature=477CF7D478BE26C205045D507E9358F85F84C065." WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
+ "8971631EB657BC33EC2F48A2FF4211956760C3E9&key=ik0", PlayerActivity.TYPE_DASH), new Sample("WV: HDCP required", "e06c39f1151da3df", "widevine_test",
new Sample("WV: HDCP not required", "48fcc369939ac96c", WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
"http://www.youtube.com/api/manifest/dash/id/48fcc369939ac96c/source/youtube?" new Sample("WV: Secure video path required", "0894c7c8719b28a0", "widevine_test",
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0" WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
+ "&ipbits=0&expire=19000000000&signature=171DAE48D00B5BE7434BC1A9F84DAE0463C7EA7A." new Sample("WV: HDCP + secure video path required", "efd045b1eb61888a", "widevine_test",
+ "0925B4DBB5605BEE9F5D088C48F25F5108E96191&key=ik0", PlayerActivity.TYPE_DASH), WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
new Sample("WV: HDCP required", "e06c39f1151da3df", new Sample("WV: 30s license duration (fails at ~30s)", "f9a34cab7b05881a", "widevine_test",
"http://www.youtube.com/api/manifest/dash/id/e06c39f1151da3df/source/youtube?" WIDEVINE_GTS_MPD, PlayerActivity.TYPE_DASH),
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0" };
+ "&ipbits=0&expire=19000000000&signature=8D3B8AF4E3F72B7F127C8D0D39B7AFCF37B30519."
+ "A118BADEBF3582AD2CC257B0EE6E579C6955D8AA&key=ik0", PlayerActivity.TYPE_DASH), public static final Sample[] WIDEVINE_DASH_MP4 = new Sample[] {
new Sample("WV: Secure video path required", "0894c7c8719b28a0", new Sample("WV: Clear (MP4,H264)",
"http://www.youtube.com/api/manifest/dash/id/0894c7c8719b28a0/source/youtube?" "https://storage.googleapis.com/wvmedia/cenc/clear/h264/tears.mpd",
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0" PlayerActivity.TYPE_DASH),
+ "&ipbits=0&expire=19000000000&signature=A41D835C7387885A4A820628F57E481E00095931." new Sample("WV: Secure (MP4,H264)", "", "widevine_test",
+ "9D50DBEEB5E37344647EE11BDA129A7FCDE8B7B9&key=ik0", PlayerActivity.TYPE_DASH), "https://storage.googleapis.com/wvmedia/cenc/h264/tears.mpd",
new Sample("WV: HDCP + secure video path required", "efd045b1eb61888a", PlayerActivity.TYPE_DASH),
"http://www.youtube.com/api/manifest/dash/id/efd045b1eb61888a/source/youtube?" };
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0"
+ "&ipbits=0&expire=19000000000&signature=A97C9032C9D0C74F1643DB17C178873887C229E4." public static final Sample[] WIDEVINE_DASH_WEBM = new Sample[] {
+ "0A657BF6F23C8BC1538F276137383478330B76DE&key=ik0", PlayerActivity.TYPE_DASH), new Sample("WV: Secure (WebM,VP9)", "01234567", "widevine_test",
new Sample("WV: 30s license duration (fails at ~30s)", "f9a34cab7b05881a", "https://storage.googleapis.com/wvmedia/cenc/vp9/sintel-multicodec-4k/sintel-vp9.mpd",
"http://www.youtube.com/api/manifest/dash/id/f9a34cab7b05881a/source/youtube?" PlayerActivity.TYPE_DASH),
+ "as=fmp4_audio_cenc,fmp4_sd_hd_cenc&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0"
+ "&ipbits=0&expire=19000000000&signature=80648A12A7D5FC1FA02B52B4250E4EB74CF0C5FD."
+ "66A261130CA137AA5C541EA9CED2DBF240829EE6&key=ik0", PlayerActivity.TYPE_DASH),
}; };
public static final Sample[] HLS = new Sample[] { public static final Sample[] HLS = new Sample[] {
......
...@@ -33,12 +33,13 @@ import java.util.UUID; ...@@ -33,12 +33,13 @@ import java.util.UUID;
public class WidevineTestMediaDrmCallback implements MediaDrmCallback { public class WidevineTestMediaDrmCallback implements MediaDrmCallback {
private static final String WIDEVINE_GTS_DEFAULT_BASE_URI = private static final String WIDEVINE_GTS_DEFAULT_BASE_URI =
"http://wv-staging-proxy.appspot.com/proxy?provider=YouTube&video_id="; "https://proxy.uat.widevine.com/proxy";
private final String defaultUri; private final String defaultUri;
public WidevineTestMediaDrmCallback(String videoId) { public WidevineTestMediaDrmCallback(String contentId, String provider) {
defaultUri = WIDEVINE_GTS_DEFAULT_BASE_URI + videoId; String params = "?video_id=" + contentId + "&provider=" + provider;
defaultUri = WIDEVINE_GTS_DEFAULT_BASE_URI + params;
} }
@Override @Override
......
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