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
This commit is contained in:
parent
da2f78505d
commit
a8a32d6bec
@ -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')
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -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<MediaItem> createMediaItemsFromIntent(Intent intent) {
|
||||
List<MediaItem> 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<String, String> 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<Integer> toTrackTypeList(@Nullable String[] trackTypeStringsArray) {
|
||||
if (trackTypeStringsArray == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
HashSet<Integer> 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<String> 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<Integer> 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(
|
||||
|
@ -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<Integer> 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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user