mirror of
https://github.com/androidx/media.git
synced 2025-05-07 23:50:44 +08:00
Add key set id to MediaItem
PiperOrigin-RevId: 307390673
This commit is contained in:
parent
cb51a1bfe6
commit
8d0d31e15c
@ -68,6 +68,7 @@ public final class MediaItem {
|
|||||||
private boolean drmMultiSession;
|
private boolean drmMultiSession;
|
||||||
private boolean drmPlayClearContentWithoutKey;
|
private boolean drmPlayClearContentWithoutKey;
|
||||||
private List<Integer> drmSessionForClearTypes;
|
private List<Integer> drmSessionForClearTypes;
|
||||||
|
@Nullable private byte[] drmKeySetId;
|
||||||
private List<StreamKey> streamKeys;
|
private List<StreamKey> streamKeys;
|
||||||
@Nullable private String customCacheKey;
|
@Nullable private String customCacheKey;
|
||||||
private List<Subtitle> subtitles;
|
private List<Subtitle> subtitles;
|
||||||
@ -110,6 +111,7 @@ public final class MediaItem {
|
|||||||
drmPlayClearContentWithoutKey = drmConfiguration.playClearContentWithoutKey;
|
drmPlayClearContentWithoutKey = drmConfiguration.playClearContentWithoutKey;
|
||||||
drmSessionForClearTypes = drmConfiguration.sessionForClearTypes;
|
drmSessionForClearTypes = drmConfiguration.sessionForClearTypes;
|
||||||
drmUuid = drmConfiguration.uuid;
|
drmUuid = drmConfiguration.uuid;
|
||||||
|
drmKeySetId = drmConfiguration.getKeySetId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -311,6 +313,20 @@ public final class MediaItem {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the key set ID of the offline license.
|
||||||
|
*
|
||||||
|
* <p>The key set ID identifies an offline license. The ID is required to query, renew or
|
||||||
|
* release an existing offline license (see {@code DefaultDrmSessionManager#setMode(int
|
||||||
|
* mode,byte[] offlineLicenseKeySetId)}).
|
||||||
|
*
|
||||||
|
* <p>If no valid DRM configuration is specified, the key set ID is ignored.
|
||||||
|
*/
|
||||||
|
public Builder setDrmKeySetId(@Nullable byte[] keySetId) {
|
||||||
|
this.drmKeySetId = keySetId != null ? Arrays.copyOf(keySetId, keySetId.length) : null;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the optional stream keys by which the manifest is filtered (only used for adaptive
|
* Sets the optional stream keys by which the manifest is filtered (only used for adaptive
|
||||||
* streams).
|
* streams).
|
||||||
@ -414,7 +430,8 @@ public final class MediaItem {
|
|||||||
drmLicenseRequestHeaders,
|
drmLicenseRequestHeaders,
|
||||||
drmMultiSession,
|
drmMultiSession,
|
||||||
drmPlayClearContentWithoutKey,
|
drmPlayClearContentWithoutKey,
|
||||||
drmSessionForClearTypes)
|
drmSessionForClearTypes,
|
||||||
|
drmKeySetId)
|
||||||
: null,
|
: null,
|
||||||
streamKeys,
|
streamKeys,
|
||||||
customCacheKey,
|
customCacheKey,
|
||||||
@ -463,19 +480,29 @@ public final class MediaItem {
|
|||||||
/** The types of clear tracks for which to use a drm session. */
|
/** The types of clear tracks for which to use a drm session. */
|
||||||
public final List<Integer> sessionForClearTypes;
|
public final List<Integer> sessionForClearTypes;
|
||||||
|
|
||||||
|
@Nullable private final byte[] keySetId;
|
||||||
|
|
||||||
private DrmConfiguration(
|
private DrmConfiguration(
|
||||||
UUID uuid,
|
UUID uuid,
|
||||||
@Nullable Uri licenseUri,
|
@Nullable Uri licenseUri,
|
||||||
Map<String, String> requestHeaders,
|
Map<String, String> requestHeaders,
|
||||||
boolean multiSession,
|
boolean multiSession,
|
||||||
boolean playClearContentWithoutKey,
|
boolean playClearContentWithoutKey,
|
||||||
List<Integer> drmSessionForClearTypes) {
|
List<Integer> drmSessionForClearTypes,
|
||||||
|
@Nullable byte[] keySetId) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.licenseUri = licenseUri;
|
this.licenseUri = licenseUri;
|
||||||
this.requestHeaders = requestHeaders;
|
this.requestHeaders = requestHeaders;
|
||||||
this.multiSession = multiSession;
|
this.multiSession = multiSession;
|
||||||
this.playClearContentWithoutKey = playClearContentWithoutKey;
|
this.playClearContentWithoutKey = playClearContentWithoutKey;
|
||||||
this.sessionForClearTypes = drmSessionForClearTypes;
|
this.sessionForClearTypes = drmSessionForClearTypes;
|
||||||
|
this.keySetId = keySetId != null ? Arrays.copyOf(keySetId, keySetId.length) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the key set ID of the offline license. */
|
||||||
|
@Nullable
|
||||||
|
public byte[] getKeySetId() {
|
||||||
|
return keySetId != null ? Arrays.copyOf(keySetId, keySetId.length) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -493,7 +520,8 @@ public final class MediaItem {
|
|||||||
&& Util.areEqual(requestHeaders, other.requestHeaders)
|
&& Util.areEqual(requestHeaders, other.requestHeaders)
|
||||||
&& multiSession == other.multiSession
|
&& multiSession == other.multiSession
|
||||||
&& playClearContentWithoutKey == other.playClearContentWithoutKey
|
&& playClearContentWithoutKey == other.playClearContentWithoutKey
|
||||||
&& sessionForClearTypes.equals(other.sessionForClearTypes);
|
&& sessionForClearTypes.equals(other.sessionForClearTypes)
|
||||||
|
&& Arrays.equals(keySetId, other.keySetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -504,6 +532,7 @@ public final class MediaItem {
|
|||||||
result = 31 * result + (multiSession ? 1 : 0);
|
result = 31 * result + (multiSession ? 1 : 0);
|
||||||
result = 31 * result + (playClearContentWithoutKey ? 1 : 0);
|
result = 31 * result + (playClearContentWithoutKey ? 1 : 0);
|
||||||
result = 31 * result + sessionForClearTypes.hashCode();
|
result = 31 * result + sessionForClearTypes.hashCode();
|
||||||
|
result = 31 * result + Arrays.hashCode(keySetId);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,7 @@ public class MediaItemTest {
|
|||||||
Uri licenseUri = Uri.parse(URI_STRING);
|
Uri licenseUri = Uri.parse(URI_STRING);
|
||||||
Map<String, String> requestHeaders = new HashMap<>();
|
Map<String, String> requestHeaders = new HashMap<>();
|
||||||
requestHeaders.put("Referer", "http://www.google.com");
|
requestHeaders.put("Referer", "http://www.google.com");
|
||||||
|
byte[] keySetId = new byte[] {1, 2, 3};
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setSourceUri(URI_STRING)
|
.setSourceUri(URI_STRING)
|
||||||
@ -100,6 +101,7 @@ public class MediaItemTest {
|
|||||||
.setDrmMultiSession(/* multiSession= */ true)
|
.setDrmMultiSession(/* multiSession= */ true)
|
||||||
.setDrmPlayClearContentWithoutKey(true)
|
.setDrmPlayClearContentWithoutKey(true)
|
||||||
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
||||||
|
.setDrmKeySetId(keySetId)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertThat(mediaItem.playbackProperties.drmConfiguration).isNotNull();
|
assertThat(mediaItem.playbackProperties.drmConfiguration).isNotNull();
|
||||||
@ -111,6 +113,7 @@ public class MediaItemTest {
|
|||||||
assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isTrue();
|
assertThat(mediaItem.playbackProperties.drmConfiguration.playClearContentWithoutKey).isTrue();
|
||||||
assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes)
|
assertThat(mediaItem.playbackProperties.drmConfiguration.sessionForClearTypes)
|
||||||
.containsExactly(C.TRACK_TYPE_AUDIO);
|
.containsExactly(C.TRACK_TYPE_AUDIO);
|
||||||
|
assertThat(mediaItem.playbackProperties.drmConfiguration.getKeySetId()).isEqualTo(keySetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -304,6 +307,7 @@ public class MediaItemTest {
|
|||||||
.setDrmMultiSession(true)
|
.setDrmMultiSession(true)
|
||||||
.setDrmPlayClearContentWithoutKey(true)
|
.setDrmPlayClearContentWithoutKey(true)
|
||||||
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
.setDrmSessionForClearTypes(Collections.singletonList(C.TRACK_TYPE_AUDIO))
|
||||||
|
.setDrmKeySetId(new byte[] {1, 2, 3})
|
||||||
.setMediaId("mediaId")
|
.setMediaId("mediaId")
|
||||||
.setMediaMetadata(new MediaMetadata.Builder().setTitle("title").build())
|
.setMediaMetadata(new MediaMetadata.Builder().setTitle("title").build())
|
||||||
.setMimeType(MimeTypes.APPLICATION_MP4)
|
.setMimeType(MimeTypes.APPLICATION_MP4)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user