Commit a61828a6 by mishragaurav Committed by Oliver Woodman

Merge widevine playback tests to v2.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127825954
parent 2ed55d97
......@@ -15,6 +15,11 @@
*/
package com.google.android.exoplayer2.playbacktests.util;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.Surface;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
......@@ -22,18 +27,16 @@ import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.audio.AudioTrack;
import com.google.android.exoplayer2.decoder.DecoderCounters;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.playbacktests.util.HostActivity.HostedTest;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import com.google.android.exoplayer2.util.Util;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.Surface;
import junit.framework.Assert;
/**
* A {@link HostedTest} for {@link ExoPlayer} playback tests.
*/
......@@ -120,7 +123,8 @@ public abstract class ExoHostedTest implements HostedTest, ExoPlayer.EventListen
public final void onStart(HostActivity host, Surface surface) {
// Build the player.
trackSelector = buildTrackSelector(host);
player = buildExoPlayer(host, surface, trackSelector);
DrmSessionManager drmSessionManager = buildDrmSessionManager();
player = buildExoPlayer(host, surface, trackSelector, drmSessionManager);
player.setMediaSource(buildSource(host, Util.getUserAgent(host, "ExoPlayerPlaybackTests")));
player.addListener(this);
player.setDebugListener(this);
......@@ -271,6 +275,11 @@ public abstract class ExoHostedTest implements HostedTest, ExoPlayer.EventListen
// Internal logic
protected DrmSessionManager buildDrmSessionManager() {
// Do nothing. Interested subclasses may override.
return null;
}
@SuppressWarnings("unused")
protected MappingTrackSelector buildTrackSelector(HostActivity host) {
return new DefaultTrackSelector(null);
......@@ -278,8 +287,9 @@ public abstract class ExoHostedTest implements HostedTest, ExoPlayer.EventListen
@SuppressWarnings("unused")
protected SimpleExoPlayer buildExoPlayer(HostActivity host, Surface surface,
MappingTrackSelector trackSelector) {
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(host, trackSelector);
MappingTrackSelector trackSelector, DrmSessionManager drmSessionManager) {
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(host, trackSelector,
new DefaultLoadControl(), drmSessionManager);
player.setSurface(surface);
return player;
}
......
......@@ -44,6 +44,11 @@ public final class LogcatMetricsLogger implements MetricsLogger {
}
@Override
public void logMetric(String key, boolean value) {
Log.d(tag, key + ": " + value);
}
@Override
public void close() {
// Do nothing.
}
......
......@@ -27,6 +27,7 @@ public interface MetricsLogger {
String KEY_FRAMES_SKIPPED_COUNT = "frames_skipped_count";
String KEY_MAX_CONSECUTIVE_FRAMES_DROPPED_COUNT = "maximum_consecutive_frames_dropped_count";
String KEY_TEST_NAME = "test_name";
String KEY_IS_CDD_LIMITED_RETRY = "is_cdd_limited_retry";
/**
* Logs an int metric provided from a test.
......@@ -53,6 +54,14 @@ public interface MetricsLogger {
void logMetric(String key, String value);
/**
* Logs a boolean metric provided from a test.
*
* @param key The key of the metric to be logged.
* @param value The value of the metric to be logged.
*/
void logMetric(String key, boolean value);
/**
* Closes the logger.
*/
void close();
......
/*
* Copyright (C) 2016 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.util;
import android.annotation.TargetApi;
import android.media.MediaDrm;
import android.text.TextUtils;
import com.google.android.exoplayer2.drm.MediaDrmCallback;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.UUID;
/**
* A {@link MediaDrmCallback} for Widevine test content.
*/
@TargetApi(18)
public final class TestMediaDrmCallback implements MediaDrmCallback {
private static final String WIDEVINE_BASE_URL = "https://proxy.uat.widevine.com/proxy";
private final String defaultUrl;
private final Map<String, String> keyRequestProperties;
public static TestMediaDrmCallback newWidevineInstance(String contentId, String provider) {
String defaultUrl = WIDEVINE_BASE_URL + "?video_id=" + contentId + "&provider=" + provider;
return new TestMediaDrmCallback(defaultUrl, null);
}
private TestMediaDrmCallback(String defaultUrl, Map<String, String> keyRequestProperties) {
this.defaultUrl = defaultUrl;
this.keyRequestProperties = keyRequestProperties;
}
@Override
public byte[] executeProvisionRequest(UUID uuid, MediaDrm.ProvisionRequest request)
throws IOException {
String url = request.getDefaultUrl() + "&signedRequest=" + new String(request.getData(),
Charset.defaultCharset());
return executePost(url, null, null);
}
@Override
public byte[] executeKeyRequest(UUID uuid, MediaDrm.KeyRequest request) throws Exception {
String url = request.getDefaultUrl();
if (TextUtils.isEmpty(url)) {
url = defaultUrl;
}
return executePost(url, request.getData(), keyRequestProperties);
}
private static byte[] executePost(String url, byte[] data, Map<String, String> requestProperties)
throws IOException {
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) new URL(url).openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(data != null);
urlConnection.setDoInput(true);
if (requestProperties != null) {
for (Map.Entry<String, String> requestProperty : requestProperties.entrySet()) {
urlConnection.setRequestProperty(requestProperty.getKey(), requestProperty.getValue());
}
}
// Write the request body, if there is one.
if (data != null) {
OutputStream out = urlConnection.getOutputStream();
try {
out.write(data);
} finally {
out.close();
}
}
// Read and return the response body.
InputStream inputStream = urlConnection.getInputStream();
try {
return Util.toByteArray(inputStream);
} finally {
inputStream.close();
}
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
}
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