Commit a82e5107 by aquilescanta Committed by Oliver Woodman

Add playback tests for CENC/DASH streams.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160825705
parent a9efb455
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.playbacktests.gts;
import android.test.ActivityInstrumentationTestCase2;
import com.google.android.exoplayer2.testutil.ActionSchedule;
import com.google.android.exoplayer2.testutil.HostActivity;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
/**
* Test playback of encrypted DASH streams using different CENC scheme types.
*/
public final class CommonEncryptionDrmTest extends ActivityInstrumentationTestCase2<HostActivity> {
private static final String TAG = "CencDrmTest";
private static final String URL_cenc =
"https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd";
private static final String URL_cbc1 =
"https://storage.googleapis.com/wvmedia/cbc1/h264/tears/tears_aes_cbc1.mpd";
private static final String URL_cbcs =
"https://storage.googleapis.com/wvmedia/cbcs/h264/tears/tears_aes_cbcs.mpd";
private static final String ID_AUDIO = "0";
private static final String[] IDS_VIDEO = new String[] {"1", "2"};
// Seeks help reproduce playback issues in certain devices.
private static final ActionSchedule ACTION_SCHEDULE_WITH_SEEKS = new ActionSchedule.Builder(TAG)
.delay(30000).seek(300000).delay(10000).seek(270000).delay(10000).seek(200000).delay(10000)
.stop().build();
private DashTestRunner testRunner;
public CommonEncryptionDrmTest() {
super(HostActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
testRunner = new DashTestRunner(TAG, getActivity(), getInstrumentation())
.setWidevineInfo(MimeTypes.VIDEO_H264, false)
.setActionSchedule(ACTION_SCHEDULE_WITH_SEEKS)
.setAudioVideoFormats(ID_AUDIO, IDS_VIDEO)
.setCanIncludeAdditionalVideoFormats(true);
}
@Override
protected void tearDown() throws Exception {
testRunner = null;
super.tearDown();
}
public void testCencSchemeType() {
if (Util.SDK_INT < 18) {
// Pass.
return;
}
testRunner.setStreamName("test_widevine_h264_scheme_cenc").setManifestUrl(URL_cenc).run();
}
public void testCbc1SchemeType() {
if (Util.SDK_INT < 24) {
// Pass.
return;
}
testRunner.setStreamName("test_widevine_h264_scheme_cbc1").setManifestUrl(URL_cbc1).run();
}
public void testCbcsSchemeType() {
if (Util.SDK_INT < 24) {
// Pass.
return;
}
testRunner.setStreamName("test_widevine_h264_scheme_cbcs").setManifestUrl(URL_cbcs).run();
}
public void testCensSchemeType() {
// TODO: Implement once content is available. Track [internal: b/31219813].
}
}
...@@ -345,7 +345,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -345,7 +345,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h264_fixed") .setStreamName("test_widevine_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -361,7 +361,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -361,7 +361,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h264_adaptive") .setStreamName("test_widevine_h264_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -377,7 +377,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -377,7 +377,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h264_adaptive_with_seeking") .setStreamName("test_widevine_h264_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(SEEKING_SCHEDULE) .setActionSchedule(SEEKING_SCHEDULE)
...@@ -394,7 +394,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -394,7 +394,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h264_adaptive_with_renderer_disabling") .setStreamName("test_widevine_h264_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(RENDERER_DISABLING_SCHEDULE) .setActionSchedule(RENDERER_DISABLING_SCHEDULE)
...@@ -413,7 +413,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -413,7 +413,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h265_fixed") .setStreamName("test_widevine_h265_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265) .setWidevineInfo(MimeTypes.VIDEO_H265, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -429,7 +429,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -429,7 +429,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h265_adaptive") .setStreamName("test_widevine_h265_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265) .setWidevineInfo(MimeTypes.VIDEO_H265, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -445,7 +445,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -445,7 +445,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h265_adaptive_with_seeking") .setStreamName("test_widevine_h265_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265) .setWidevineInfo(MimeTypes.VIDEO_H265, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(SEEKING_SCHEDULE) .setActionSchedule(SEEKING_SCHEDULE)
...@@ -462,7 +462,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -462,7 +462,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_h265_adaptive_with_renderer_disabling") .setStreamName("test_widevine_h265_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H265_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H265) .setWidevineInfo(MimeTypes.VIDEO_H265, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(RENDERER_DISABLING_SCHEDULE) .setActionSchedule(RENDERER_DISABLING_SCHEDULE)
...@@ -481,7 +481,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -481,7 +481,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_vp9_fixed_360p") .setStreamName("test_widevine_vp9_fixed_360p")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9) .setWidevineInfo(MimeTypes.VIDEO_VP9, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
...@@ -497,7 +497,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -497,7 +497,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_vp9_adaptive") .setStreamName("test_widevine_vp9_adaptive")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9) .setWidevineInfo(MimeTypes.VIDEO_VP9, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_VP9_AAC_AUDIO_REPRESENTATION_ID,
...@@ -513,7 +513,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -513,7 +513,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_vp9_adaptive_with_seeking") .setStreamName("test_widevine_vp9_adaptive_with_seeking")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9) .setWidevineInfo(MimeTypes.VIDEO_VP9, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(SEEKING_SCHEDULE) .setActionSchedule(SEEKING_SCHEDULE)
...@@ -530,7 +530,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -530,7 +530,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_vp9_adaptive_with_renderer_disabling") .setStreamName("test_widevine_vp9_adaptive_with_renderer_disabling")
.setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_VP9_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_VP9) .setWidevineInfo(MimeTypes.VIDEO_VP9, true)
.setFullPlaybackNoSeeking(false) .setFullPlaybackNoSeeking(false)
.setCanIncludeAdditionalVideoFormats(true) .setCanIncludeAdditionalVideoFormats(true)
.setActionSchedule(RENDERER_DISABLING_SCHEDULE) .setActionSchedule(RENDERER_DISABLING_SCHEDULE)
...@@ -550,7 +550,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -550,7 +550,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_23fps_h264_fixed") .setStreamName("test_widevine_23fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_23_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_23_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -567,7 +567,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -567,7 +567,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_24fps_h264_fixed") .setStreamName("test_widevine_24fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_24_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_24_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
...@@ -584,7 +584,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho ...@@ -584,7 +584,7 @@ public final class DashStreamingTest extends ActivityInstrumentationTestCase2<Ho
testRunner testRunner
.setStreamName("test_widevine_29fps_h264_fixed") .setStreamName("test_widevine_29fps_h264_fixed")
.setManifestUrl(DashTestData.WIDEVINE_H264_29_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_29_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
......
...@@ -138,14 +138,19 @@ public final class DashTestData { ...@@ -138,14 +138,19 @@ public final class DashTestData {
WIDEVINE_VP9_360P_VIDEO_REPRESENTATION_ID}; WIDEVINE_VP9_360P_VIDEO_REPRESENTATION_ID};
private static final String WIDEVINE_LICENSE_URL = private static final String WIDEVINE_LICENSE_URL =
"https://proxy.uat.widevine.com/proxy?provider=widevine_test&video_id="; "https://proxy.uat.widevine.com/proxy?provider=widevine_test";
private static final String WIDEVINE_SW_CRYPTO_CONTENT_ID = "exoplayer_test_1"; private static final String WIDEVINE_SW_CRYPTO_CONTENT_ID = "&video_id=exoplayer_test_1";
private static final String WIDEVINE_HW_SECURE_DECODE_CONTENT_ID = "exoplayer_test_2"; private static final String WIDEVINE_HW_SECURE_DECODE_CONTENT_ID = "&video_id=exoplayer_test_2";
public static String getWidevineLicenseUrl(boolean useL1Widevine) { public static String getWidevineLicenseUrl(boolean videoIdRequiredInLicenseUrl,
boolean useL1Widevine) {
if (!videoIdRequiredInLicenseUrl) {
return WIDEVINE_LICENSE_URL;
} else {
return WIDEVINE_LICENSE_URL return WIDEVINE_LICENSE_URL
+ (useL1Widevine ? WIDEVINE_HW_SECURE_DECODE_CONTENT_ID : WIDEVINE_SW_CRYPTO_CONTENT_ID); + (useL1Widevine ? WIDEVINE_HW_SECURE_DECODE_CONTENT_ID : WIDEVINE_SW_CRYPTO_CONTENT_ID);
} }
}
private DashTestData() { private DashTestData() {
} }
......
...@@ -169,9 +169,10 @@ public final class DashTestRunner { ...@@ -169,9 +169,10 @@ public final class DashTestRunner {
return this; return this;
} }
public DashTestRunner setWidevineMimeType(String mimeType) { public DashTestRunner setWidevineInfo(String mimeType, boolean videoIdRequiredInLicenseUrl) {
this.useL1Widevine = isL1WidevineAvailable(mimeType); this.useL1Widevine = isL1WidevineAvailable(mimeType);
this.widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(useL1Widevine); this.widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(videoIdRequiredInLicenseUrl,
useL1Widevine);
return this; return this;
} }
......
...@@ -56,14 +56,14 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa ...@@ -56,14 +56,14 @@ public final class DashWidevineOfflineTest extends ActivityInstrumentationTestCa
testRunner = new DashTestRunner(TAG, getActivity(), getInstrumentation()) testRunner = new DashTestRunner(TAG, getActivity(), getInstrumentation())
.setStreamName("test_widevine_h264_fixed_offline") .setStreamName("test_widevine_h264_fixed_offline")
.setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST) .setManifestUrl(DashTestData.WIDEVINE_H264_MANIFEST)
.setWidevineMimeType(MimeTypes.VIDEO_H264) .setWidevineInfo(MimeTypes.VIDEO_H264, true)
.setFullPlaybackNoSeeking(true) .setFullPlaybackNoSeeking(true)
.setCanIncludeAdditionalVideoFormats(false) .setCanIncludeAdditionalVideoFormats(false)
.setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID, .setAudioVideoFormats(DashTestData.WIDEVINE_AAC_AUDIO_REPRESENTATION_ID,
DashTestData.WIDEVINE_H264_CDD_FIXED); DashTestData.WIDEVINE_H264_CDD_FIXED);
boolean useL1Widevine = DashTestRunner.isL1WidevineAvailable(MimeTypes.VIDEO_H264); boolean useL1Widevine = DashTestRunner.isL1WidevineAvailable(MimeTypes.VIDEO_H264);
String widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(useL1Widevine); String widevineLicenseUrl = DashTestData.getWidevineLicenseUrl(true, useL1Widevine);
httpDataSourceFactory = new DefaultHttpDataSourceFactory(USER_AGENT); httpDataSourceFactory = new DefaultHttpDataSourceFactory(USER_AGENT);
offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(widevineLicenseUrl, offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(widevineLicenseUrl,
httpDataSourceFactory); httpDataSourceFactory);
......
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