From a8a32d6becee265acb165a496b200d393dbd4af3 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 12 Aug 2020 19:56:29 +0100 Subject: [PATCH] Demo app: Minor simplifications - Simplify the ability to use placeholder DRM sessions to a boolean - Remove unused IS_LIVE entry in the intent PiperOrigin-RevId: 326280149 --- demos/main/build.gradle | 3 +- demos/main/src/main/assets/media.exolist.json | 2 +- .../android/exoplayer2/demo/IntentUtil.java | 62 ++++++------------ .../demo/SampleChooserActivity.java | 64 ++++++++----------- 4 files changed, 46 insertions(+), 85 deletions(-) diff --git a/demos/main/build.gradle b/demos/main/build.gradle index 7487ee3b98..0c628be879 100644 --- a/demos/main/build.gradle +++ b/demos/main/build.gradle @@ -69,7 +69,8 @@ dependencies { implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion implementation 'androidx.appcompat:appcompat:' + androidxAppCompatVersion implementation 'androidx.multidex:multidex:' + androidxMultidexVersion - implementation 'com.google.android.material:material:1.1.0' + implementation 'com.google.android.material:material:1.2.0' + implementation 'com.google.guava:guava:' + guavaVersion implementation project(modulePrefix + 'library-core') implementation project(modulePrefix + 'library-dash') implementation project(modulePrefix + 'library-hls') diff --git a/demos/main/src/main/assets/media.exolist.json b/demos/main/src/main/assets/media.exolist.json index db47aa77dc..001a8c1cc4 100644 --- a/demos/main/src/main/assets/media.exolist.json +++ b/demos/main/src/main/assets/media.exolist.json @@ -153,7 +153,7 @@ "uri": "https://storage.googleapis.com/exoplayer-test-media-1/widevine/tears_enc_clear_enc.mpd", "drm_scheme": "widevine", "drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test", - "drm_session_for_clear_types": ["audio", "video"] + "drm_session_for_clear_content": true } ] }, diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java index 6b2f477333..063a9161b0 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java @@ -25,10 +25,10 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Util; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; @@ -55,28 +55,28 @@ public class IntentUtil { // Activity extras. + public static final String PREFER_EXTENSION_DECODERS_EXTRA = "prefer_extension_decoders"; + // Media item configuration extras. public static final String URI_EXTRA = "uri"; - public static final String IS_LIVE_EXTRA = "is_live"; public static final String MIME_TYPE_EXTRA = "mime_type"; public static final String CLIP_START_POSITION_MS_EXTRA = "clip_start_position_ms"; public static final String CLIP_END_POSITION_MS_EXTRA = "clip_end_position_ms"; + public static final String AD_TAG_URI_EXTRA = "ad_tag_uri"; + public static final String DRM_SCHEME_EXTRA = "drm_scheme"; public static final String DRM_LICENSE_URL_EXTRA = "drm_license_url"; public static final String DRM_KEY_REQUEST_PROPERTIES_EXTRA = "drm_key_request_properties"; - public static final String DRM_SESSION_FOR_CLEAR_TYPES_EXTRA = "drm_session_for_clear_types"; + public static final String DRM_SESSION_FOR_CLEAR_CONTENT = "drm_session_for_clear_content"; public static final String DRM_MULTI_SESSION_EXTRA = "drm_multi_session"; public static final String DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA = "drm_force_default_license_uri"; - public static final String AD_TAG_URI_EXTRA = "ad_tag_uri"; public static final String SUBTITLE_URI_EXTRA = "subtitle_uri"; public static final String SUBTITLE_MIME_TYPE_EXTRA = "subtitle_mime_type"; public static final String SUBTITLE_LANGUAGE_EXTRA = "subtitle_language"; - public static final String PREFER_EXTENSION_DECODERS_EXTRA = "prefer_extension_decoders"; - /** Creates a list of {@link MediaItem media items} from an {@link Intent}. */ public static List createMediaItemsFromIntent(Intent intent) { List mediaItems = new ArrayList<>(); @@ -156,9 +156,6 @@ public class IntentUtil { if (drmSchemeExtra == null) { return builder; } - @Nullable - String[] drmSessionForClearTypesExtra = - intent.getStringArrayExtra(DRM_SESSION_FOR_CLEAR_TYPES_EXTRA + extrasKeySuffix); Map headers = new HashMap<>(); @Nullable String[] keyRequestPropertiesArray = @@ -171,48 +168,24 @@ public class IntentUtil { builder .setDrmUuid(Util.getDrmUuid(Util.castNonNull(drmSchemeExtra))) .setDrmLicenseUri(intent.getStringExtra(DRM_LICENSE_URL_EXTRA + extrasKeySuffix)) - .setDrmSessionForClearTypes(toTrackTypeList(drmSessionForClearTypesExtra)) .setDrmMultiSession( intent.getBooleanExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, false)) .setDrmForceDefaultLicenseUri( intent.getBooleanExtra(DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA + extrasKeySuffix, false)) .setDrmLicenseRequestHeaders(headers); + if (intent.getBooleanExtra(DRM_SESSION_FOR_CLEAR_CONTENT + extrasKeySuffix, false)) { + builder.setDrmSessionForClearTypes(ImmutableList.of(C.TRACK_TYPE_VIDEO, C.TRACK_TYPE_AUDIO)); + } return builder; } - private static List toTrackTypeList(@Nullable String[] trackTypeStringsArray) { - if (trackTypeStringsArray == null) { - return Collections.emptyList(); - } - HashSet trackTypes = new HashSet<>(); - for (String trackTypeString : trackTypeStringsArray) { - switch (Util.toLowerInvariant(trackTypeString)) { - case "audio": - trackTypes.add(C.TRACK_TYPE_AUDIO); - break; - case "video": - trackTypes.add(C.TRACK_TYPE_VIDEO); - break; - default: - throw new IllegalArgumentException("Invalid track type: " + trackTypeString); - } - } - return new ArrayList<>(trackTypes); - } - private static void addPlaybackPropertiesToIntent( MediaItem.PlaybackProperties playbackProperties, Intent intent, String extrasKeySuffix) { - boolean isLive = false; - if (playbackProperties.tag instanceof Tag) { - Tag tag = (Tag) playbackProperties.tag; - isLive = tag.isLive; - } intent .putExtra(MIME_TYPE_EXTRA + extrasKeySuffix, playbackProperties.mimeType) .putExtra( AD_TAG_URI_EXTRA + extrasKeySuffix, - playbackProperties.adTagUri != null ? playbackProperties.adTagUri.toString() : null) - .putExtra(IS_LIVE_EXTRA + extrasKeySuffix, isLive); + playbackProperties.adTagUri != null ? playbackProperties.adTagUri.toString() : null); if (playbackProperties.drmConfiguration != null) { addDrmConfigurationToIntent(playbackProperties.drmConfiguration, intent, extrasKeySuffix); } @@ -244,14 +217,15 @@ public class IntentUtil { } intent.putExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA + extrasKeySuffix, drmKeyRequestProperties); - ArrayList typeStrings = new ArrayList<>(); - for (int type : drmConfiguration.sessionForClearTypes) { - // Only audio and video are supported. - Assertions.checkState(type == C.TRACK_TYPE_AUDIO || type == C.TRACK_TYPE_VIDEO); - typeStrings.add(type == C.TRACK_TYPE_AUDIO ? "audio" : "video"); + List drmSessionForClearTypes = drmConfiguration.sessionForClearTypes; + if (!drmSessionForClearTypes.isEmpty()) { + // Only video and audio together are supported. + Assertions.checkState( + drmSessionForClearTypes.size() == 2 + && drmSessionForClearTypes.contains(C.TRACK_TYPE_VIDEO) + && drmSessionForClearTypes.contains(C.TRACK_TYPE_AUDIO)); + intent.putExtra(DRM_SESSION_FOR_CLEAR_CONTENT + extrasKeySuffix, true); } - intent.putExtra( - DRM_SESSION_FOR_CLEAR_TYPES_EXTRA + extrasKeySuffix, typeStrings.toArray(new String[0])); } private static void addClippingPropertiesToIntent( 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 d373ace8b6..59b8f72fdf 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 @@ -56,6 +56,7 @@ import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.DefaultDataSource; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Util; +import com.google.common.collect.ImmutableList; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -63,7 +64,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; @@ -367,12 +367,21 @@ public class SampleChooserActivity extends AppCompatActivity case "extension": extension = reader.nextString(); break; - case "drm_scheme": - mediaItem.setDrmUuid(Util.getDrmUuid(reader.nextString())); + case "clip_start_position_ms": + mediaItem.setClipStartPositionMs(reader.nextLong()); + break; + case "clip_end_position_ms": + mediaItem.setClipEndPositionMs(reader.nextLong()); + break; + case "ad_tag_uri": + mediaItem.setAdTagUri(reader.nextString()); break; case "is_live": isLive = reader.nextBoolean(); break; + case "drm_scheme": + mediaItem.setDrmUuid(Util.getDrmUuid(reader.nextString())); + break; case "drm_license_url": mediaItem.setDrmLicenseUri(reader.nextString()); break; @@ -385,14 +394,11 @@ public class SampleChooserActivity extends AppCompatActivity reader.endObject(); mediaItem.setDrmLicenseRequestHeaders(requestHeaders); break; - case "drm_session_for_clear_types": - HashSet drmSessionForClearTypes = new HashSet<>(); - reader.beginArray(); - while (reader.hasNext()) { - drmSessionForClearTypes.add(toTrackType(reader.nextString())); + case "drm_session_for_clear_content": + if (reader.nextBoolean()) { + mediaItem.setDrmSessionForClearTypes( + ImmutableList.of(C.TRACK_TYPE_VIDEO, C.TRACK_TYPE_AUDIO)); } - reader.endArray(); - mediaItem.setDrmSessionForClearTypes(new ArrayList<>(drmSessionForClearTypes)); break; case "drm_multi_session": mediaItem.setDrmMultiSession(reader.nextBoolean()); @@ -400,24 +406,6 @@ public class SampleChooserActivity extends AppCompatActivity case "drm_force_default_license_uri": mediaItem.setDrmForceDefaultLicenseUri(reader.nextBoolean()); break; - case "playlist": - checkState(!insidePlaylist, "Invalid nesting of playlists"); - children = new ArrayList<>(); - reader.beginArray(); - while (reader.hasNext()) { - children.add(readEntry(reader, /* insidePlaylist= */ true)); - } - reader.endArray(); - break; - case "clip_start_position_ms": - mediaItem.setClipStartPositionMs(reader.nextLong()); - break; - case "clip_end_position_ms": - mediaItem.setClipEndPositionMs(reader.nextLong()); - break; - case "ad_tag_uri": - mediaItem.setAdTagUri(reader.nextString()); - break; case "subtitle_uri": subtitleUri = Uri.parse(reader.nextString()); break; @@ -427,6 +415,15 @@ public class SampleChooserActivity extends AppCompatActivity case "subtitle_language": subtitleLanguage = reader.nextString(); break; + case "playlist": + checkState(!insidePlaylist, "Invalid nesting of playlists"); + children = new ArrayList<>(); + reader.beginArray(); + while (reader.hasNext()) { + children.add(readEntry(reader, /* insidePlaylist= */ true)); + } + reader.endArray(); + break; default: throw new ParserException("Unsupported attribute name: " + name); } @@ -471,17 +468,6 @@ public class SampleChooserActivity extends AppCompatActivity groups.add(group); return group; } - - private int toTrackType(String trackTypeString) { - switch (Util.toLowerInvariant(trackTypeString)) { - case "audio": - return C.TRACK_TYPE_AUDIO; - case "video": - return C.TRACK_TYPE_VIDEO; - default: - throw new IllegalArgumentException("Invalid track type: " + trackTypeString); - } - } } private final class SampleAdapter extends BaseExpandableListAdapter implements OnClickListener {