mirror of
https://github.com/samsonjs/media.git
synced 2026-04-17 13:15:47 +00:00
Add forceDefaultLicenseUri to MediaItem.DrmConfiguration
ISSUE: #7114 PiperOrigin-RevId: 311115835
This commit is contained in:
parent
c4cd559315
commit
66fd81401b
5 changed files with 48 additions and 8 deletions
|
|
@ -84,6 +84,7 @@ public class IntentUtil {
|
|||
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_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";
|
||||
|
|
@ -214,6 +215,8 @@ public class IntentUtil {
|
|||
.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);
|
||||
return builder;
|
||||
}
|
||||
|
|
@ -273,6 +276,9 @@ public class IntentUtil {
|
|||
DRM_LICENSE_URL_EXTRA + extrasKeySuffix,
|
||||
checkNotNull(drmConfiguration.licenseUri).toString());
|
||||
intent.putExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, drmConfiguration.multiSession);
|
||||
intent.putExtra(
|
||||
DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA + extrasKeySuffix,
|
||||
drmConfiguration.forceDefaultLicenseUri);
|
||||
|
||||
String[] drmKeyRequestProperties = new String[drmConfiguration.requestHeaders.size() * 2];
|
||||
int index = 0;
|
||||
|
|
|
|||
|
|
@ -417,6 +417,9 @@ public class SampleChooserActivity extends AppCompatActivity
|
|||
case "drm_multi_session":
|
||||
mediaItem.setDrmMultiSession(reader.nextBoolean());
|
||||
break;
|
||||
case "drm_force_default_license_uri":
|
||||
mediaItem.setDrmForceDefaultLicenseUri(reader.nextBoolean());
|
||||
break;
|
||||
case "playlist":
|
||||
Assertions.checkState(!insidePlaylist, "Invalid nesting of playlists");
|
||||
children = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -32,10 +32,10 @@ import java.util.UUID;
|
|||
public final class MediaItem {
|
||||
|
||||
/**
|
||||
* Creates a {@link MediaItem} for the given uri.
|
||||
* Creates a {@link MediaItem} for the given URI.
|
||||
*
|
||||
* @param uri The uri.
|
||||
* @return An {@link MediaItem} for the given uri.
|
||||
* @param uri The URI.
|
||||
* @return An {@link MediaItem} for the given URI.
|
||||
*/
|
||||
public static MediaItem fromUri(String uri) {
|
||||
return new MediaItem.Builder().setUri(uri).build();
|
||||
|
|
@ -67,6 +67,7 @@ public final class MediaItem {
|
|||
@Nullable private UUID drmUuid;
|
||||
private boolean drmMultiSession;
|
||||
private boolean drmPlayClearContentWithoutKey;
|
||||
private boolean drmForceDefaultLicenseUri;
|
||||
private List<Integer> drmSessionForClearTypes;
|
||||
@Nullable private byte[] drmKeySetId;
|
||||
private List<StreamKey> streamKeys;
|
||||
|
|
@ -108,6 +109,7 @@ public final class MediaItem {
|
|||
drmLicenseUri = drmConfiguration.licenseUri;
|
||||
drmLicenseRequestHeaders = drmConfiguration.requestHeaders;
|
||||
drmMultiSession = drmConfiguration.multiSession;
|
||||
drmForceDefaultLicenseUri = drmConfiguration.forceDefaultLicenseUri;
|
||||
drmPlayClearContentWithoutKey = drmConfiguration.playClearContentWithoutKey;
|
||||
drmSessionForClearTypes = drmConfiguration.sessionForClearTypes;
|
||||
drmUuid = drmConfiguration.uuid;
|
||||
|
|
@ -266,6 +268,18 @@ public final class MediaItem {
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether to use the license URI of the media item for key requests that include their own
|
||||
* license URI.
|
||||
*
|
||||
* <p>If a {@link PlaybackProperties#uri} is set, the drm force default license flag is used to
|
||||
* create a {@link PlaybackProperties} object. Otherwise it will be ignored.
|
||||
*/
|
||||
public Builder setDrmForceDefaultLicenseUri(boolean forceDefaultLicenseUri) {
|
||||
this.drmForceDefaultLicenseUri = forceDefaultLicenseUri;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether clear samples within protected content should be played when keys for the
|
||||
* encrypted part of the content have yet to be loaded.
|
||||
|
|
@ -426,6 +440,7 @@ public final class MediaItem {
|
|||
drmLicenseUri,
|
||||
drmLicenseRequestHeaders,
|
||||
drmMultiSession,
|
||||
drmForceDefaultLicenseUri,
|
||||
drmPlayClearContentWithoutKey,
|
||||
drmSessionForClearTypes,
|
||||
drmKeySetId)
|
||||
|
|
@ -462,7 +477,7 @@ public final class MediaItem {
|
|||
*/
|
||||
@Nullable public final Uri licenseUri;
|
||||
|
||||
/** The headers to attach to the request for the license uri. */
|
||||
/** The headers to attach to the request for the license URI. */
|
||||
public final Map<String, String> requestHeaders;
|
||||
|
||||
/** Whether the drm configuration is multi session enabled. */
|
||||
|
|
@ -474,6 +489,12 @@ public final class MediaItem {
|
|||
*/
|
||||
public final boolean playClearContentWithoutKey;
|
||||
|
||||
/**
|
||||
* Sets whether to use the license URI of the media item for key requests that include their own
|
||||
* license URI.
|
||||
*/
|
||||
public final boolean forceDefaultLicenseUri;
|
||||
|
||||
/** The types of clear tracks for which to use a drm session. */
|
||||
public final List<Integer> sessionForClearTypes;
|
||||
|
||||
|
|
@ -484,6 +505,7 @@ public final class MediaItem {
|
|||
@Nullable Uri licenseUri,
|
||||
Map<String, String> requestHeaders,
|
||||
boolean multiSession,
|
||||
boolean forceDefaultLicenseUri,
|
||||
boolean playClearContentWithoutKey,
|
||||
List<Integer> drmSessionForClearTypes,
|
||||
@Nullable byte[] keySetId) {
|
||||
|
|
@ -491,6 +513,7 @@ public final class MediaItem {
|
|||
this.licenseUri = licenseUri;
|
||||
this.requestHeaders = requestHeaders;
|
||||
this.multiSession = multiSession;
|
||||
this.forceDefaultLicenseUri = forceDefaultLicenseUri;
|
||||
this.playClearContentWithoutKey = playClearContentWithoutKey;
|
||||
this.sessionForClearTypes = drmSessionForClearTypes;
|
||||
this.keySetId = keySetId != null ? Arrays.copyOf(keySetId, keySetId.length) : null;
|
||||
|
|
@ -516,6 +539,7 @@ public final class MediaItem {
|
|||
&& Util.areEqual(licenseUri, other.licenseUri)
|
||||
&& Util.areEqual(requestHeaders, other.requestHeaders)
|
||||
&& multiSession == other.multiSession
|
||||
&& forceDefaultLicenseUri == other.forceDefaultLicenseUri
|
||||
&& playClearContentWithoutKey == other.playClearContentWithoutKey
|
||||
&& sessionForClearTypes.equals(other.sessionForClearTypes)
|
||||
&& Arrays.equals(keySetId, other.keySetId);
|
||||
|
|
@ -527,6 +551,7 @@ public final class MediaItem {
|
|||
result = 31 * result + (licenseUri != null ? licenseUri.hashCode() : 0);
|
||||
result = 31 * result + requestHeaders.hashCode();
|
||||
result = 31 * result + (multiSession ? 1 : 0);
|
||||
result = 31 * result + (forceDefaultLicenseUri ? 1 : 0);
|
||||
result = 31 * result + (playClearContentWithoutKey ? 1 : 0);
|
||||
result = 31 * result + sessionForClearTypes.hashCode();
|
||||
result = 31 * result + Arrays.hashCode(keySetId);
|
||||
|
|
@ -638,7 +663,7 @@ public final class MediaItem {
|
|||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @param uri The {@link Uri uri} to the subtitle file.
|
||||
* @param uri The {@link Uri URI} to the subtitle file.
|
||||
* @param mimeType The mime type.
|
||||
* @param language The optional language.
|
||||
*/
|
||||
|
|
@ -649,7 +674,7 @@ public final class MediaItem {
|
|||
/**
|
||||
* Creates an instance with the given selection flags.
|
||||
*
|
||||
* @param uri The {@link Uri uri} to the subtitle file.
|
||||
* @param uri The {@link Uri URI} to the subtitle file.
|
||||
* @param mimeType The mime type.
|
||||
* @param language The optional language.
|
||||
* @param selectionFlags The selection flags.
|
||||
|
|
|
|||
|
|
@ -95,7 +95,8 @@ public class MediaItemTest {
|
|||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri(licenseUri)
|
||||
.setDrmLicenseRequestHeaders(requestHeaders)
|
||||
.setDrmMultiSession(/* multiSession= */ true)
|
||||
.setDrmMultiSession(true)
|
||||
.setDrmForceDefaultLicenseUri(true)
|
||||
.setDrmPlayClearContentWithoutKey(true)
|
||||
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
||||
.setDrmKeySetId(keySetId)
|
||||
|
|
@ -107,6 +108,7 @@ public class MediaItemTest {
|
|||
assertThat(mediaItem.playbackProperties.drmConfiguration.requestHeaders)
|
||||
.isEqualTo(requestHeaders);
|
||||
assertThat(mediaItem.playbackProperties.drmConfiguration.multiSession).isTrue();
|
||||
assertThat(mediaItem.playbackProperties.drmConfiguration.forceDefaultLicenseUri).isTrue();
|
||||
assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isTrue();
|
||||
assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes)
|
||||
.containsExactly(C.TRACK_TYPE_AUDIO);
|
||||
|
|
@ -301,6 +303,7 @@ public class MediaItemTest {
|
|||
.setDrmLicenseRequestHeaders(
|
||||
Collections.singletonMap("Referer", "http://www.google.com"))
|
||||
.setDrmMultiSession(true)
|
||||
.setDrmForceDefaultLicenseUri(true)
|
||||
.setDrmPlayClearContentWithoutKey(true)
|
||||
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
||||
.setDrmKeySetId(new byte[] {1, 2, 3})
|
||||
|
|
|
|||
|
|
@ -306,7 +306,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||
private MediaDrmCallback createHttpMediaDrmCallback(MediaItem.DrmConfiguration drmConfiguration) {
|
||||
Assertions.checkNotNull(drmConfiguration.licenseUri);
|
||||
HttpMediaDrmCallback drmCallback =
|
||||
new HttpMediaDrmCallback(drmConfiguration.licenseUri.toString(), drmHttpDataSourceFactory);
|
||||
new HttpMediaDrmCallback(
|
||||
drmConfiguration.licenseUri.toString(),
|
||||
drmConfiguration.forceDefaultLicenseUri,
|
||||
drmHttpDataSourceFactory);
|
||||
for (Map.Entry<String, String> entry : drmConfiguration.requestHeaders.entrySet()) {
|
||||
drmCallback.setKeyRequestProperty(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue