diff --git a/demos/main/src/main/assets/media.exolist.json b/demos/main/src/main/assets/media.exolist.json index c92c00f72f..a366eeba05 100644 --- a/demos/main/src/main/assets/media.exolist.json +++ b/demos/main/src/main/assets/media.exolist.json @@ -559,17 +559,6 @@ } ] }, - { - "name": "ABR", - "samples": [ - { - "name": "Random ABR - Google Glass (MP4,H264)", - "uri": "https://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0", - "extension": "mpd", - "abr_algorithm": "random" - } - ] - }, { "name": "360", "samples": [ diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java index 6e3b7ee3d2..ad08fb990c 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java @@ -107,8 +107,8 @@ public class PlayerActivity extends Activity public static final String AD_TAG_URI_EXTRA = "ad_tag_uri"; public static final String ABR_ALGORITHM_EXTRA = "abr_algorithm"; - private static final String ABR_ALGORITHM_DEFAULT = "default"; - private static final String ABR_ALGORITHM_RANDOM = "random"; + public static final String ABR_ALGORITHM_DEFAULT = "default"; + public static final String ABR_ALGORITHM_RANDOM = "random"; public static final String SPHERICAL_STEREO_MODE_EXTRA = "spherical_stereo_mode"; public static final String SPHERICAL_STEREO_MODE_MONO = "mono"; diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java index 2b71d7af37..f683e9900f 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java @@ -24,6 +24,9 @@ import android.os.AsyncTask; import android.os.Bundle; import android.util.JsonReader; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; @@ -55,8 +58,11 @@ public class SampleChooserActivity extends Activity private static final String TAG = "SampleChooserActivity"; + private boolean useExtensionRenderers; private DownloadTracker downloadTracker; private SampleAdapter sampleAdapter; + private MenuItem preferExtensionDecodersMenuItem; + private MenuItem randomAbrMenuItem; @Override public void onCreate(Bundle savedInstanceState) { @@ -90,7 +96,9 @@ public class SampleChooserActivity extends Activity Arrays.sort(uris); } - downloadTracker = ((DemoApplication) getApplication()).getDownloadTracker(); + DemoApplication application = (DemoApplication) getApplication(); + useExtensionRenderers = application.useExtensionRenderers(); + downloadTracker = application.getDownloadTracker(); SampleListLoader loaderTask = new SampleListLoader(); loaderTask.execute(uris); @@ -105,6 +113,22 @@ public class SampleChooserActivity extends Activity } } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.sample_chooser_menu, menu); + preferExtensionDecodersMenuItem = menu.findItem(R.id.prefer_extension_decoders); + preferExtensionDecodersMenuItem.setVisible(useExtensionRenderers); + randomAbrMenuItem = menu.findItem(R.id.random_abr); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + item.setChecked(!item.isChecked()); + return true; + } + @Override public void onStart() { super.onStart(); @@ -135,7 +159,13 @@ public class SampleChooserActivity extends Activity public boolean onChildClick( ExpandableListView parent, View view, int groupPosition, int childPosition, long id) { Sample sample = (Sample) view.getTag(); - startActivity(sample.buildIntent(this)); + startActivity( + sample.buildIntent( + /* context= */ this, + preferExtensionDecodersMenuItem.isChecked(), + randomAbrMenuItem.isChecked() + ? PlayerActivity.ABR_ALGORITHM_RANDOM + : PlayerActivity.ABR_ALGORITHM_DEFAULT)); return true; } @@ -245,10 +275,8 @@ public class SampleChooserActivity extends Activity String drmLicenseUrl = null; String[] drmKeyRequestProperties = null; boolean drmMultiSession = false; - boolean preferExtensionDecoders = false; ArrayList playlistSamples = null; String adTagUri = null; - String abrAlgorithm = null; String sphericalStereoMode = null; reader.beginObject(); @@ -288,11 +316,6 @@ public class SampleChooserActivity extends Activity case "drm_multi_session": drmMultiSession = reader.nextBoolean(); break; - case "prefer_extension_decoders": - Assertions.checkState(!insidePlaylist, - "Invalid attribute on nested item: prefer_extension_decoders"); - preferExtensionDecoders = reader.nextBoolean(); - break; case "playlist": Assertions.checkState(!insidePlaylist, "Invalid nesting of playlists"); playlistSamples = new ArrayList<>(); @@ -305,11 +328,6 @@ public class SampleChooserActivity extends Activity case "ad_tag_uri": adTagUri = reader.nextString(); break; - case "abr_algorithm": - Assertions.checkState( - !insidePlaylist, "Invalid attribute on nested item: abr_algorithm"); - abrAlgorithm = reader.nextString(); - break; case "spherical_stereo_mode": Assertions.checkState( !insidePlaylist, "Invalid attribute on nested item: spherical_stereo_mode"); @@ -327,13 +345,10 @@ public class SampleChooserActivity extends Activity if (playlistSamples != null) { UriSample[] playlistSamplesArray = playlistSamples.toArray( new UriSample[playlistSamples.size()]); - return new PlaylistSample( - sampleName, preferExtensionDecoders, abrAlgorithm, drmInfo, playlistSamplesArray); + return new PlaylistSample(sampleName, drmInfo, playlistSamplesArray); } else { return new UriSample( sampleName, - preferExtensionDecoders, - abrAlgorithm, drmInfo, uri, extension, @@ -496,19 +511,15 @@ public class SampleChooserActivity extends Activity private abstract static class Sample { public final String name; - public final boolean preferExtensionDecoders; - public final String abrAlgorithm; public final DrmInfo drmInfo; - public Sample( - String name, boolean preferExtensionDecoders, String abrAlgorithm, DrmInfo drmInfo) { + public Sample(String name, DrmInfo drmInfo) { this.name = name; - this.preferExtensionDecoders = preferExtensionDecoders; - this.abrAlgorithm = abrAlgorithm; this.drmInfo = drmInfo; } - public Intent buildIntent(Context context) { + public Intent buildIntent( + Context context, boolean preferExtensionDecoders, String abrAlgorithm) { Intent intent = new Intent(context, PlayerActivity.class); intent.putExtra(PlayerActivity.PREFER_EXTENSION_DECODERS_EXTRA, preferExtensionDecoders); intent.putExtra(PlayerActivity.ABR_ALGORITHM_EXTRA, abrAlgorithm); @@ -529,14 +540,12 @@ public class SampleChooserActivity extends Activity public UriSample( String name, - boolean preferExtensionDecoders, - String abrAlgorithm, DrmInfo drmInfo, Uri uri, String extension, String adTagUri, String sphericalStereoMode) { - super(name, preferExtensionDecoders, abrAlgorithm, drmInfo); + super(name, drmInfo); this.uri = uri; this.extension = extension; this.adTagUri = adTagUri; @@ -544,8 +553,9 @@ public class SampleChooserActivity extends Activity } @Override - public Intent buildIntent(Context context) { - return super.buildIntent(context) + public Intent buildIntent( + Context context, boolean preferExtensionDecoders, String abrAlgorithm) { + return super.buildIntent(context, preferExtensionDecoders, abrAlgorithm) .setData(uri) .putExtra(PlayerActivity.EXTENSION_EXTRA, extension) .putExtra(PlayerActivity.AD_TAG_URI_EXTRA, adTagUri) @@ -561,23 +571,22 @@ public class SampleChooserActivity extends Activity public PlaylistSample( String name, - boolean preferExtensionDecoders, - String abrAlgorithm, DrmInfo drmInfo, UriSample... children) { - super(name, preferExtensionDecoders, abrAlgorithm, drmInfo); + super(name, drmInfo); this.children = children; } @Override - public Intent buildIntent(Context context) { + public Intent buildIntent( + Context context, boolean preferExtensionDecoders, String abrAlgorithm) { String[] uris = new String[children.length]; String[] extensions = new String[children.length]; for (int i = 0; i < children.length; i++) { uris[i] = children[i].uri.toString(); extensions[i] = children[i].extension; } - return super.buildIntent(context) + return super.buildIntent(context, preferExtensionDecoders, abrAlgorithm) .putExtra(PlayerActivity.URI_LIST_EXTRA, uris) .putExtra(PlayerActivity.EXTENSION_LIST_EXTRA, extensions) .setAction(PlayerActivity.ACTION_VIEW_LIST); diff --git a/demos/main/src/main/res/menu/sample_chooser_menu.xml b/demos/main/src/main/res/menu/sample_chooser_menu.xml new file mode 100644 index 0000000000..566b23a0d5 --- /dev/null +++ b/demos/main/src/main/res/menu/sample_chooser_menu.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/demos/main/src/main/res/values/strings.xml b/demos/main/src/main/res/values/strings.xml index 54dff74600..40f065b18e 100644 --- a/demos/main/src/main/res/values/strings.xml +++ b/demos/main/src/main/res/values/strings.xml @@ -61,4 +61,8 @@ IMA does not support offline ads + Prefer extension decoders + + Enable random ABR +