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
6158b2fa
authored
Nov 18, 2019
by
aquilescanta
Committed by
Oliver Woodman
Nov 19, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Allow user to pick which track types to create placeholder sessions for
Issue:#4867 PiperOrigin-RevId: 281064793
parent
8c3e6663
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
17 deletions
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
View file @
6158b2fa
...
@@ -57,7 +57,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -57,7 +57,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
private
UUID
uuid
;
private
UUID
uuid
;
private
ExoMediaDrm
.
Provider
<
ExoMediaCrypto
>
exoMediaDrmProvider
;
private
ExoMediaDrm
.
Provider
<
ExoMediaCrypto
>
exoMediaDrmProvider
;
private
boolean
multiSession
;
private
boolean
multiSession
;
private
boolean
preferSecureDecoder
s
;
private
int
[]
useDrmSessionsForClearContentTrackType
s
;
@Flags
private
int
flags
;
@Flags
private
int
flags
;
private
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
;
private
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
;
...
@@ -70,7 +70,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -70,7 +70,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
* <li>{@link #setUuidAndExoMediaDrmProvider ExoMediaDrm.Provider}: {@link
* <li>{@link #setUuidAndExoMediaDrmProvider ExoMediaDrm.Provider}: {@link
* FrameworkMediaDrm#DEFAULT_PROVIDER}.
* FrameworkMediaDrm#DEFAULT_PROVIDER}.
* <li>{@link #setMultiSession multiSession}: {@code false}.
* <li>{@link #setMultiSession multiSession}: {@code false}.
* <li>{@link #set
PreferSecureDecoders preferSecureDecoders}: {@code false}
.
* <li>{@link #set
UseDrmSessionsForClearContent useDrmSessionsForClearContent}: No tracks
.
* <li>{@link #setPlayClearSamplesWithoutKeys playClearSamplesWithoutKeys}: {@code false}.
* <li>{@link #setPlayClearSamplesWithoutKeys playClearSamplesWithoutKeys}: {@code false}.
* <li>{@link #setLoadErrorHandlingPolicy LoadErrorHandlingPolicy}: {@link
* <li>{@link #setLoadErrorHandlingPolicy LoadErrorHandlingPolicy}: {@link
* DefaultLoadErrorHandlingPolicy}.
* DefaultLoadErrorHandlingPolicy}.
...
@@ -82,6 +82,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -82,6 +82,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
uuid
=
C
.
WIDEVINE_UUID
;
uuid
=
C
.
WIDEVINE_UUID
;
exoMediaDrmProvider
=
(
ExoMediaDrm
.
Provider
)
FrameworkMediaDrm
.
DEFAULT_PROVIDER
;
exoMediaDrmProvider
=
(
ExoMediaDrm
.
Provider
)
FrameworkMediaDrm
.
DEFAULT_PROVIDER
;
loadErrorHandlingPolicy
=
new
DefaultLoadErrorHandlingPolicy
();
loadErrorHandlingPolicy
=
new
DefaultLoadErrorHandlingPolicy
();
useDrmSessionsForClearContentTrackTypes
=
new
int
[
0
];
}
}
/**
/**
...
@@ -127,14 +128,27 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -127,14 +128,27 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
}
}
/**
/**
* Sets whether this session manager should hint the use of secure decoders for clear content.
* Sets whether this session manager should attach {@link DrmSession DrmSessions} to the clear
* sections of the media content.
*
*
* @param preferSecureDecoders Whether this session manager should hint the use of secure
* <p>Using {@link DrmSession DrmSessions} for clear content avoids the recreation of decoders
* decoders for clear content.
* when transitioning between clear and encrypted sections of content.
*
* @param useDrmSessionsForClearContentTrackTypes The track types ({@link C#TRACK_TYPE_AUDIO}
* and/or {@link C#TRACK_TYPE_VIDEO}) for which to use a {@link DrmSession} regardless of
* whether the content is clear or encrypted.
* @return This builder.
* @return This builder.
* @throws IllegalArgumentException If {@code useDrmSessionsForClearContentTrackTypes} contains
* track types other than {@link C#TRACK_TYPE_AUDIO} and {@link C#TRACK_TYPE_VIDEO}.
*/
*/
public
Builder
setPreferSecureDecoders
(
boolean
preferSecureDecoders
)
{
public
Builder
setUseDrmSessionsForClearContent
(
this
.
preferSecureDecoders
=
preferSecureDecoders
;
int
...
useDrmSessionsForClearContentTrackTypes
)
{
for
(
int
trackType
:
useDrmSessionsForClearContentTrackTypes
)
{
Assertions
.
checkArgument
(
trackType
==
C
.
TRACK_TYPE_VIDEO
||
trackType
==
C
.
TRACK_TYPE_AUDIO
);
}
this
.
useDrmSessionsForClearContentTrackTypes
=
useDrmSessionsForClearContentTrackTypes
.
clone
();
return
this
;
return
this
;
}
}
...
@@ -174,7 +188,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -174,7 +188,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
mediaDrmCallback
,
mediaDrmCallback
,
keyRequestParameters
,
keyRequestParameters
,
multiSession
,
multiSession
,
preferSecureDecoder
s
,
useDrmSessionsForClearContentTrackType
s
,
flags
,
flags
,
loadErrorHandlingPolicy
);
loadErrorHandlingPolicy
);
}
}
...
@@ -226,7 +240,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -226,7 +240,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
@Nullable
private
final
HashMap
<
String
,
String
>
optionalKeyRequestParameters
;
@Nullable
private
final
HashMap
<
String
,
String
>
optionalKeyRequestParameters
;
private
final
EventDispatcher
<
DefaultDrmSessionEventListener
>
eventDispatcher
;
private
final
EventDispatcher
<
DefaultDrmSessionEventListener
>
eventDispatcher
;
private
final
boolean
multiSession
;
private
final
boolean
multiSession
;
private
final
boolean
preferSecureDecoder
s
;
private
final
int
[]
useDrmSessionsForClearContentTrackType
s
;
@Flags
private
final
int
flags
;
@Flags
private
final
int
flags
;
private
final
ProvisioningManagerImpl
provisioningManagerImpl
;
private
final
ProvisioningManagerImpl
provisioningManagerImpl
;
private
final
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
;
private
final
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
;
...
@@ -320,7 +334,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -320,7 +334,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
callback
,
callback
,
optionalKeyRequestParameters
,
optionalKeyRequestParameters
,
multiSession
,
multiSession
,
/*
preferSecureDecoders= */
false
,
/*
useDrmSessionsForClearContentTrackTypes= */
new
int
[
0
]
,
/* flags= */
0
,
/* flags= */
0
,
new
DefaultLoadErrorHandlingPolicy
(
initialDrmRequestRetryCount
));
new
DefaultLoadErrorHandlingPolicy
(
initialDrmRequestRetryCount
));
}
}
...
@@ -333,7 +347,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -333,7 +347,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
MediaDrmCallback
callback
,
MediaDrmCallback
callback
,
@Nullable
HashMap
<
String
,
String
>
optionalKeyRequestParameters
,
@Nullable
HashMap
<
String
,
String
>
optionalKeyRequestParameters
,
boolean
multiSession
,
boolean
multiSession
,
boolean
preferSecureDecoder
s
,
int
[]
useDrmSessionsForClearContentTrackType
s
,
@Flags
int
flags
,
@Flags
int
flags
,
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
)
{
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
)
{
Assertions
.
checkNotNull
(
uuid
);
Assertions
.
checkNotNull
(
uuid
);
...
@@ -344,7 +358,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -344,7 +358,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
this
.
optionalKeyRequestParameters
=
optionalKeyRequestParameters
;
this
.
optionalKeyRequestParameters
=
optionalKeyRequestParameters
;
this
.
eventDispatcher
=
new
EventDispatcher
<>();
this
.
eventDispatcher
=
new
EventDispatcher
<>();
this
.
multiSession
=
multiSession
;
this
.
multiSession
=
multiSession
;
this
.
preferSecureDecoders
=
preferSecureDecoder
s
;
this
.
useDrmSessionsForClearContentTrackTypes
=
useDrmSessionsForClearContentTrackType
s
;
this
.
flags
=
flags
;
this
.
flags
=
flags
;
this
.
loadErrorHandlingPolicy
=
loadErrorHandlingPolicy
;
this
.
loadErrorHandlingPolicy
=
loadErrorHandlingPolicy
;
provisioningManagerImpl
=
new
ProvisioningManagerImpl
();
provisioningManagerImpl
=
new
ProvisioningManagerImpl
();
...
@@ -375,7 +389,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -375,7 +389,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
/**
/**
* Sets the mode, which determines the role of sessions acquired from the instance. This must be
* Sets the mode, which determines the role of sessions acquired from the instance. This must be
* called before {@link #acquireSession(Looper, DrmInitData)} or {@link
* called before {@link #acquireSession(Looper, DrmInitData)} or {@link
* #acquirePlaceholderSession
(Looper)
} is called.
* #acquirePlaceholderSession} is called.
*
*
* <p>By default, the mode is {@link #MODE_PLAYBACK} and a streaming license is requested when
* <p>By default, the mode is {@link #MODE_PLAYBACK} and a streaming license is requested when
* required.
* required.
...
@@ -460,15 +474,13 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
...
@@ -460,15 +474,13 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto> implements DrmSe
@Nullable
@Nullable
public
DrmSession
<
T
>
acquirePlaceholderSession
(
Looper
playbackLooper
,
int
trackType
)
{
public
DrmSession
<
T
>
acquirePlaceholderSession
(
Looper
playbackLooper
,
int
trackType
)
{
assertExpectedPlaybackLooper
(
playbackLooper
);
assertExpectedPlaybackLooper
(
playbackLooper
);
Assertions
.
checkNotNull
(
exoMediaDrm
);
ExoMediaDrm
<
T
>
exoMediaDrm
=
Assertions
.
checkNotNull
(
this
.
exoMediaDrm
);
boolean
avoidPlaceholderDrmSessions
=
boolean
avoidPlaceholderDrmSessions
=
FrameworkMediaCrypto
.
class
.
equals
(
exoMediaDrm
.
getExoMediaCryptoType
())
FrameworkMediaCrypto
.
class
.
equals
(
exoMediaDrm
.
getExoMediaCryptoType
())
&&
FrameworkMediaCrypto
.
WORKAROUND_DEVICE_NEEDS_KEYS_TO_CONFIGURE_CODEC
;
&&
FrameworkMediaCrypto
.
WORKAROUND_DEVICE_NEEDS_KEYS_TO_CONFIGURE_CODEC
;
// Avoid attaching a session to sparse formats.
// Avoid attaching a session to sparse formats.
avoidPlaceholderDrmSessions
|=
trackType
!=
C
.
TRACK_TYPE_VIDEO
&&
trackType
!=
C
.
TRACK_TYPE_AUDIO
;
if
(
avoidPlaceholderDrmSessions
if
(
avoidPlaceholderDrmSessions
||
!
preferSecureDecoders
||
Util
.
linearSearch
(
useDrmSessionsForClearContentTrackTypes
,
trackType
)
==
C
.
INDEX_UNSET
||
exoMediaDrm
.
getExoMediaCryptoType
()
==
null
)
{
||
exoMediaDrm
.
getExoMediaCryptoType
()
==
null
)
{
return
null
;
return
null
;
}
}
...
...
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