am 58402c6d: am ac7f781a: am 962b2928: Merge "Fix RTSP urls." into jb-dev
* commit '58402c6d472f85ce6a82b8b84cf8836f7cb75d68':
Fix RTSP urls.
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/StreamingVideoActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/StreamingVideoActivity.java
index 66168a1..6d12747 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/StreamingVideoActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/streamquality/StreamingVideoActivity.java
@@ -22,12 +22,24 @@
import com.android.cts.verifier.TestListAdapter;
import com.android.cts.verifier.TestListAdapter.TestListItem;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.DataSetObserver;
+import android.os.AsyncTask;
import android.os.Bundle;
+import android.util.Log;
import android.widget.TextView;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
import java.io.Serializable;
+import java.net.HttpURLConnection;
+import java.net.URL;
/**
* Tests for verifying the quality of streaming videos. Plays streams of different formats over
@@ -85,20 +97,27 @@
}
}
- private static final Stream[] RTSP_STREAMS = {
- new Stream("H263 Video, AMR Audio", "rtsp_h263_amr",
- "rtsp://v2.cache7.c.youtube.com/video.3gp?"
- + "cid=0x271de9756065677e&fmt=13&user=android-device-test"),
- new Stream("MPEG4 SP Video, AAC Audio", "rtsp_mpeg4_aac",
- "rtsp://v2.cache7.c.youtube.com/video.3gp?"
- + "cid=0x271de9756065677e&fmt=17&user=android-device-test"),
- new Stream("H264 Base Video, AAC Audio", "rtsp_h264_aac",
- "rtsp://v2.cache7.c.youtube.com/video.3gp?"
- + "cid=0x271de9756065677e&fmt=18&user=android-device-test"),
- };
+ private static final String TAG = StreamingVideoActivity.class.getName();
+ private static final int RTSP_URL_ERROR = 1;
+ private static final String ITAG_13_SIGNATURE =
+ "53A3A3A46DAB71E3C599DE8FA6A1484593DFACE3" +
+ ".9476B91AD5035D88C3895CC2A4703B6DD442E972";
+ private static final String ITAG_17_SIGNATURE =
+ "10D6D263112C41DA98822D74821DF47340F1A361" +
+ ".803649A2258E26BF40E76A95E646FBAE4009CEE8";
+ private static final String ITAG_18_SIGNATURE =
+ "618FBB112E1B2FBB66DA9F203AE8CC7DF93C7400" +
+ ".20498AA006E999F42BE69D66E3596F2C7CA18114";
+ private static final String RTSP_LOOKUP_URI_TEMPLATE =
+ "http://redirector.c.youtube.com/videoplayback?id=271de9756065677e" +
+ "&source=youtube&protocol=rtsp&sparams=ip,ipbits,expire,id,itag,source" +
+ "&ip=0.0.0.0&ipbits=0&expire=19000000000&key=ik0&alr=yes" +
+ "&itag=%d" +
+ "&signature=%s";
private static final Stream[] HTTP_STREAMS = {
- new Stream("H263 Video, AMR Audio", "http_h263_amr", "http://redirector.c.play.google.com/"
+ new Stream("H263 Video, AMR Audio", "http_h263_amr",
+ "http://redirector.c.play.google.com/"
+ "videoplayback?id=271de9756065677e"
+ "&itag=13&ip=0.0.0.0&ipbits=0&expire=999999999999999999"
+ "&sparams=ip,ipbits,expire,ip,ipbits,expire,id,itag"
@@ -140,13 +159,35 @@
setTestListAdapter(getStreamAdapter());
}
+ @Override
+ public Dialog onCreateDialog(int id, Bundle args) {
+ switch (id) {
+ case RTSP_URL_ERROR:
+ return new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.sv_failed_title))
+ .setMessage(getString(R.string.sv_failed_message))
+ .setNegativeButton("Close", new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ PassFailButtons.setTestResultAndFinish(StreamingVideoActivity.this,
+ getTestId(), null, false);
+ }
+ }).show();
+ default:
+ return super.onCreateDialog(id, args);
+ }
+ }
+
private TestListAdapter getStreamAdapter() {
ArrayTestListAdapter adapter = new ArrayTestListAdapter(this);
adapter.add(TestListItem.newCategory("RTSP"));
- for (Stream stream : RTSP_STREAMS) {
- addStreamToTests(adapter, stream);
- }
+ addRtspStreamToTest(
+ adapter, "H263 Video, AMR Audio", "rtsp_h263_amr", 13, ITAG_13_SIGNATURE);
+ addRtspStreamToTest(
+ adapter, "MPEG4 SP Video, AAC Audio", "rtsp_mpeg4_aac", 17, ITAG_17_SIGNATURE);
+ addRtspStreamToTest(
+ adapter, "H264 Base Video, AAC Audio", "rtsp_h264_aac", 18, ITAG_18_SIGNATURE);
adapter.add(TestListItem.newCategory("HTTP Progressive"));
for (Stream stream : HTTP_STREAMS) {
@@ -163,6 +204,16 @@
return adapter;
}
+ private void addRtspStreamToTest(
+ ArrayTestListAdapter adapter, String name, String code, int itag, String signature) {
+ String rtspUrl = lookupRtspUrl(itag, signature);
+ if (rtspUrl == null) {
+ showDialog(RTSP_URL_ERROR);
+ }
+ Stream stream = new Stream(name, code, rtspUrl);
+ addStreamToTests(adapter, stream);
+ }
+
private void addStreamToTests(ArrayTestListAdapter streams, Stream stream) {
Intent i = new Intent(StreamingVideoActivity.this, PlayVideoActivity.class);
i.putExtra(PlayVideoActivity.EXTRA_STREAM, stream);
@@ -173,4 +224,41 @@
private void updatePassButton() {
getPassButton().setEnabled(mAdapter.allTestsPassed());
}
+
+ /** @returns the appropriate RTSP url, or null in case of failure */
+ private String lookupRtspUrl(int itag, String signature) {
+ String rtspLookupUri = String.format(RTSP_LOOKUP_URI_TEMPLATE, itag, signature);
+ try {
+ return new LookupRtspUrlTask().execute(rtspLookupUri).get();
+ } catch (Exception e) {
+ Log.e(TAG, "RTSP URL lookup time out.", e);
+ showDialog(RTSP_URL_ERROR);
+ return null;
+ }
+ }
+
+ /** Retrieve the URL for an RTSP stream */
+ private class LookupRtspUrlTask extends AsyncTask<String, Void, String> {
+ protected String doInBackground(String... rtspLookupUri) {
+ HttpURLConnection urlConnection = null;
+ try {
+ URL url = new URL(rtspLookupUri[0]);
+ urlConnection = (HttpURLConnection) url.openConnection();
+ if (urlConnection.getResponseCode() != 200) {
+ throw new IOException("unable to get rtsp uri. Response Code:"
+ + urlConnection.getResponseCode());
+ }
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(urlConnection.getInputStream()));
+ return reader.readLine();
+ } catch (Exception e) {
+ Log.e(TAG, "RTSP URL lookup failed.", e);
+ return null;
+ } finally {
+ if (urlConnection != null) {
+ urlConnection.disconnect();
+ }
+ }
+ }
+ }
}