Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
66fd8140
authored
May 12, 2020
by
bachinger
Committed by
Oliver Woodman
May 14, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add forceDefaultLicenseUri to MediaItem.DrmConfiguration
ISSUE: #7114 PiperOrigin-RevId: 311115835
parent
c4cd5593
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
48 additions
and
8 deletions
demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
View file @
66fd8140
...
@@ -84,6 +84,7 @@ public class IntentUtil {
...
@@ -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_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_TYPES_EXTRA
=
"drm_session_for_clear_types"
;
public
static
final
String
DRM_MULTI_SESSION_EXTRA
=
"drm_multi_session"
;
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
AD_TAG_URI_EXTRA
=
"ad_tag_uri"
;
public
static
final
String
SUBTITLE_URI_EXTRA
=
"subtitle_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_MIME_TYPE_EXTRA
=
"subtitle_mime_type"
;
...
@@ -214,6 +215,8 @@ public class IntentUtil {
...
@@ -214,6 +215,8 @@ public class IntentUtil {
.
setDrmSessionForClearTypes
(
toTrackTypeList
(
drmSessionForClearTypesExtra
))
.
setDrmSessionForClearTypes
(
toTrackTypeList
(
drmSessionForClearTypesExtra
))
.
setDrmMultiSession
(
.
setDrmMultiSession
(
intent
.
getBooleanExtra
(
DRM_MULTI_SESSION_EXTRA
+
extrasKeySuffix
,
false
))
intent
.
getBooleanExtra
(
DRM_MULTI_SESSION_EXTRA
+
extrasKeySuffix
,
false
))
.
setDrmForceDefaultLicenseUri
(
intent
.
getBooleanExtra
(
DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA
+
extrasKeySuffix
,
false
))
.
setDrmLicenseRequestHeaders
(
headers
);
.
setDrmLicenseRequestHeaders
(
headers
);
return
builder
;
return
builder
;
}
}
...
@@ -273,6 +276,9 @@ public class IntentUtil {
...
@@ -273,6 +276,9 @@ public class IntentUtil {
DRM_LICENSE_URL_EXTRA
+
extrasKeySuffix
,
DRM_LICENSE_URL_EXTRA
+
extrasKeySuffix
,
checkNotNull
(
drmConfiguration
.
licenseUri
).
toString
());
checkNotNull
(
drmConfiguration
.
licenseUri
).
toString
());
intent
.
putExtra
(
DRM_MULTI_SESSION_EXTRA
+
extrasKeySuffix
,
drmConfiguration
.
multiSession
);
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
];
String
[]
drmKeyRequestProperties
=
new
String
[
drmConfiguration
.
requestHeaders
.
size
()
*
2
];
int
index
=
0
;
int
index
=
0
;
...
...
demos/main/src/main/java/com/google/android/exoplayer2/demo/SampleChooserActivity.java
View file @
66fd8140
...
@@ -417,6 +417,9 @@ public class SampleChooserActivity extends AppCompatActivity
...
@@ -417,6 +417,9 @@ public class SampleChooserActivity extends AppCompatActivity
case
"drm_multi_session"
:
case
"drm_multi_session"
:
mediaItem
.
setDrmMultiSession
(
reader
.
nextBoolean
());
mediaItem
.
setDrmMultiSession
(
reader
.
nextBoolean
());
break
;
break
;
case
"drm_force_default_license_uri"
:
mediaItem
.
setDrmForceDefaultLicenseUri
(
reader
.
nextBoolean
());
break
;
case
"playlist"
:
case
"playlist"
:
Assertions
.
checkState
(!
insidePlaylist
,
"Invalid nesting of playlists"
);
Assertions
.
checkState
(!
insidePlaylist
,
"Invalid nesting of playlists"
);
children
=
new
ArrayList
<>();
children
=
new
ArrayList
<>();
...
...
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
View file @
66fd8140
...
@@ -32,10 +32,10 @@ import java.util.UUID;
...
@@ -32,10 +32,10 @@ import java.util.UUID;
public
final
class
MediaItem
{
public
final
class
MediaItem
{
/**
/**
* Creates a {@link MediaItem} for the given
uri
.
* Creates a {@link MediaItem} for the given
URI
.
*
*
* @param uri The
uri
.
* @param uri The
URI
.
* @return An {@link MediaItem} for the given
uri
.
* @return An {@link MediaItem} for the given
URI
.
*/
*/
public
static
MediaItem
fromUri
(
String
uri
)
{
public
static
MediaItem
fromUri
(
String
uri
)
{
return
new
MediaItem
.
Builder
().
setUri
(
uri
).
build
();
return
new
MediaItem
.
Builder
().
setUri
(
uri
).
build
();
...
@@ -67,6 +67,7 @@ public final class MediaItem {
...
@@ -67,6 +67,7 @@ public final class MediaItem {
@Nullable
private
UUID
drmUuid
;
@Nullable
private
UUID
drmUuid
;
private
boolean
drmMultiSession
;
private
boolean
drmMultiSession
;
private
boolean
drmPlayClearContentWithoutKey
;
private
boolean
drmPlayClearContentWithoutKey
;
private
boolean
drmForceDefaultLicenseUri
;
private
List
<
Integer
>
drmSessionForClearTypes
;
private
List
<
Integer
>
drmSessionForClearTypes
;
@Nullable
private
byte
[]
drmKeySetId
;
@Nullable
private
byte
[]
drmKeySetId
;
private
List
<
StreamKey
>
streamKeys
;
private
List
<
StreamKey
>
streamKeys
;
...
@@ -108,6 +109,7 @@ public final class MediaItem {
...
@@ -108,6 +109,7 @@ public final class MediaItem {
drmLicenseUri
=
drmConfiguration
.
licenseUri
;
drmLicenseUri
=
drmConfiguration
.
licenseUri
;
drmLicenseRequestHeaders
=
drmConfiguration
.
requestHeaders
;
drmLicenseRequestHeaders
=
drmConfiguration
.
requestHeaders
;
drmMultiSession
=
drmConfiguration
.
multiSession
;
drmMultiSession
=
drmConfiguration
.
multiSession
;
drmForceDefaultLicenseUri
=
drmConfiguration
.
forceDefaultLicenseUri
;
drmPlayClearContentWithoutKey
=
drmConfiguration
.
playClearContentWithoutKey
;
drmPlayClearContentWithoutKey
=
drmConfiguration
.
playClearContentWithoutKey
;
drmSessionForClearTypes
=
drmConfiguration
.
sessionForClearTypes
;
drmSessionForClearTypes
=
drmConfiguration
.
sessionForClearTypes
;
drmUuid
=
drmConfiguration
.
uuid
;
drmUuid
=
drmConfiguration
.
uuid
;
...
@@ -267,6 +269,18 @@ public final class MediaItem {
...
@@ -267,6 +269,18 @@ public final class MediaItem {
}
}
/**
/**
* 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
* Sets whether clear samples within protected content should be played when keys for the
* encrypted part of the content have yet to be loaded.
* encrypted part of the content have yet to be loaded.
*/
*/
...
@@ -426,6 +440,7 @@ public final class MediaItem {
...
@@ -426,6 +440,7 @@ public final class MediaItem {
drmLicenseUri
,
drmLicenseUri
,
drmLicenseRequestHeaders
,
drmLicenseRequestHeaders
,
drmMultiSession
,
drmMultiSession
,
drmForceDefaultLicenseUri
,
drmPlayClearContentWithoutKey
,
drmPlayClearContentWithoutKey
,
drmSessionForClearTypes
,
drmSessionForClearTypes
,
drmKeySetId
)
drmKeySetId
)
...
@@ -462,7 +477,7 @@ public final class MediaItem {
...
@@ -462,7 +477,7 @@ public final class MediaItem {
*/
*/
@Nullable
public
final
Uri
licenseUri
;
@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
;
public
final
Map
<
String
,
String
>
requestHeaders
;
/** Whether the drm configuration is multi session enabled. */
/** Whether the drm configuration is multi session enabled. */
...
@@ -474,6 +489,12 @@ public final class MediaItem {
...
@@ -474,6 +489,12 @@ public final class MediaItem {
*/
*/
public
final
boolean
playClearContentWithoutKey
;
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. */
/** The types of clear tracks for which to use a drm session. */
public
final
List
<
Integer
>
sessionForClearTypes
;
public
final
List
<
Integer
>
sessionForClearTypes
;
...
@@ -484,6 +505,7 @@ public final class MediaItem {
...
@@ -484,6 +505,7 @@ public final class MediaItem {
@Nullable
Uri
licenseUri
,
@Nullable
Uri
licenseUri
,
Map
<
String
,
String
>
requestHeaders
,
Map
<
String
,
String
>
requestHeaders
,
boolean
multiSession
,
boolean
multiSession
,
boolean
forceDefaultLicenseUri
,
boolean
playClearContentWithoutKey
,
boolean
playClearContentWithoutKey
,
List
<
Integer
>
drmSessionForClearTypes
,
List
<
Integer
>
drmSessionForClearTypes
,
@Nullable
byte
[]
keySetId
)
{
@Nullable
byte
[]
keySetId
)
{
...
@@ -491,6 +513,7 @@ public final class MediaItem {
...
@@ -491,6 +513,7 @@ public final class MediaItem {
this
.
licenseUri
=
licenseUri
;
this
.
licenseUri
=
licenseUri
;
this
.
requestHeaders
=
requestHeaders
;
this
.
requestHeaders
=
requestHeaders
;
this
.
multiSession
=
multiSession
;
this
.
multiSession
=
multiSession
;
this
.
forceDefaultLicenseUri
=
forceDefaultLicenseUri
;
this
.
playClearContentWithoutKey
=
playClearContentWithoutKey
;
this
.
playClearContentWithoutKey
=
playClearContentWithoutKey
;
this
.
sessionForClearTypes
=
drmSessionForClearTypes
;
this
.
sessionForClearTypes
=
drmSessionForClearTypes
;
this
.
keySetId
=
keySetId
!=
null
?
Arrays
.
copyOf
(
keySetId
,
keySetId
.
length
)
:
null
;
this
.
keySetId
=
keySetId
!=
null
?
Arrays
.
copyOf
(
keySetId
,
keySetId
.
length
)
:
null
;
...
@@ -516,6 +539,7 @@ public final class MediaItem {
...
@@ -516,6 +539,7 @@ public final class MediaItem {
&&
Util
.
areEqual
(
licenseUri
,
other
.
licenseUri
)
&&
Util
.
areEqual
(
licenseUri
,
other
.
licenseUri
)
&&
Util
.
areEqual
(
requestHeaders
,
other
.
requestHeaders
)
&&
Util
.
areEqual
(
requestHeaders
,
other
.
requestHeaders
)
&&
multiSession
==
other
.
multiSession
&&
multiSession
==
other
.
multiSession
&&
forceDefaultLicenseUri
==
other
.
forceDefaultLicenseUri
&&
playClearContentWithoutKey
==
other
.
playClearContentWithoutKey
&&
playClearContentWithoutKey
==
other
.
playClearContentWithoutKey
&&
sessionForClearTypes
.
equals
(
other
.
sessionForClearTypes
)
&&
sessionForClearTypes
.
equals
(
other
.
sessionForClearTypes
)
&&
Arrays
.
equals
(
keySetId
,
other
.
keySetId
);
&&
Arrays
.
equals
(
keySetId
,
other
.
keySetId
);
...
@@ -527,6 +551,7 @@ public final class MediaItem {
...
@@ -527,6 +551,7 @@ public final class MediaItem {
result
=
31
*
result
+
(
licenseUri
!=
null
?
licenseUri
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
licenseUri
!=
null
?
licenseUri
.
hashCode
()
:
0
);
result
=
31
*
result
+
requestHeaders
.
hashCode
();
result
=
31
*
result
+
requestHeaders
.
hashCode
();
result
=
31
*
result
+
(
multiSession
?
1
:
0
);
result
=
31
*
result
+
(
multiSession
?
1
:
0
);
result
=
31
*
result
+
(
forceDefaultLicenseUri
?
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
);
result
=
31
*
result
+
Arrays
.
hashCode
(
keySetId
);
...
@@ -638,7 +663,7 @@ public final class MediaItem {
...
@@ -638,7 +663,7 @@ public final class MediaItem {
/**
/**
* Creates an instance.
* 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 mimeType The mime type.
* @param language The optional language.
* @param language The optional language.
*/
*/
...
@@ -649,7 +674,7 @@ public final class MediaItem {
...
@@ -649,7 +674,7 @@ public final class MediaItem {
/**
/**
* Creates an instance with the given selection flags.
* 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 mimeType The mime type.
* @param language The optional language.
* @param language The optional language.
* @param selectionFlags The selection flags.
* @param selectionFlags The selection flags.
...
...
library/common/src/test/java/com/google/android/exoplayer2/MediaItemTest.java
View file @
66fd8140
...
@@ -95,7 +95,8 @@ public class MediaItemTest {
...
@@ -95,7 +95,8 @@ public class MediaItemTest {
.
setDrmUuid
(
C
.
WIDEVINE_UUID
)
.
setDrmUuid
(
C
.
WIDEVINE_UUID
)
.
setDrmLicenseUri
(
licenseUri
)
.
setDrmLicenseUri
(
licenseUri
)
.
setDrmLicenseRequestHeaders
(
requestHeaders
)
.
setDrmLicenseRequestHeaders
(
requestHeaders
)
.
setDrmMultiSession
(
/* multiSession= */
true
)
.
setDrmMultiSession
(
true
)
.
setDrmForceDefaultLicenseUri
(
true
)
.
setDrmPlayClearContentWithoutKey
(
true
)
.
setDrmPlayClearContentWithoutKey
(
true
)
.
setDrmSessionForClearTypes
(
Collections
.
singletonList
(
C
.
TRACK_TYPE_AUDIO
))
.
setDrmSessionForClearTypes
(
Collections
.
singletonList
(
C
.
TRACK_TYPE_AUDIO
))
.
setDrmKeySetId
(
keySetId
)
.
setDrmKeySetId
(
keySetId
)
...
@@ -107,6 +108,7 @@ public class MediaItemTest {
...
@@ -107,6 +108,7 @@ public class MediaItemTest {
assertThat
(
mediaItem
.
playbackProperties
.
drmConfiguration
.
requestHeaders
)
assertThat
(
mediaItem
.
playbackProperties
.
drmConfiguration
.
requestHeaders
)
.
isEqualTo
(
requestHeaders
);
.
isEqualTo
(
requestHeaders
);
assertThat
(
mediaItem
.
playbackProperties
.
drmConfiguration
.
multiSession
).
isTrue
();
assertThat
(
mediaItem
.
playbackProperties
.
drmConfiguration
.
multiSession
).
isTrue
();
assertThat
(
mediaItem
.
playbackProperties
.
drmConfiguration
.
forceDefaultLicenseUri
).
isTrue
();
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
);
...
@@ -301,6 +303,7 @@ public class MediaItemTest {
...
@@ -301,6 +303,7 @@ public class MediaItemTest {
.
setDrmLicenseRequestHeaders
(
.
setDrmLicenseRequestHeaders
(
Collections
.
singletonMap
(
"Referer"
,
"http://www.google.com"
))
Collections
.
singletonMap
(
"Referer"
,
"http://www.google.com"
))
.
setDrmMultiSession
(
true
)
.
setDrmMultiSession
(
true
)
.
setDrmForceDefaultLicenseUri
(
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
})
.
setDrmKeySetId
(
new
byte
[]
{
1
,
2
,
3
})
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
View file @
66fd8140
...
@@ -306,7 +306,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
...
@@ -306,7 +306,10 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
private
MediaDrmCallback
createHttpMediaDrmCallback
(
MediaItem
.
DrmConfiguration
drmConfiguration
)
{
private
MediaDrmCallback
createHttpMediaDrmCallback
(
MediaItem
.
DrmConfiguration
drmConfiguration
)
{
Assertions
.
checkNotNull
(
drmConfiguration
.
licenseUri
);
Assertions
.
checkNotNull
(
drmConfiguration
.
licenseUri
);
HttpMediaDrmCallback
drmCallback
=
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
())
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
drmConfiguration
.
requestHeaders
.
entrySet
())
{
drmCallback
.
setKeyRequestProperty
(
entry
.
getKey
(),
entry
.
getValue
());
drmCallback
.
setKeyRequestProperty
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment