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
93a608d5
authored
Feb 19, 2021
by
ibaker
Committed by
bachinger
Feb 22, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Static import Assertions methods in DefaultDrmSessionManager
PiperOrigin-RevId: 358384778
parent
74ad0949
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
28 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 @
93a608d5
...
@@ -15,6 +15,10 @@
...
@@ -15,6 +15,10 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
drm
;
package
com
.
google
.
android
.
exoplayer2
.
drm
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkArgument
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
import
android.annotation.SuppressLint
;
import
android.annotation.SuppressLint
;
import
android.media.ResourceBusyException
;
import
android.media.ResourceBusyException
;
import
android.os.Handler
;
import
android.os.Handler
;
...
@@ -31,7 +35,6 @@ import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
...
@@ -31,7 +35,6 @@ import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
import
com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener
;
import
com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener
;
import
com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
...
@@ -127,8 +130,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -127,8 +130,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
*/
*/
public
Builder
setUuidAndExoMediaDrmProvider
(
public
Builder
setUuidAndExoMediaDrmProvider
(
UUID
uuid
,
ExoMediaDrm
.
Provider
exoMediaDrmProvider
)
{
UUID
uuid
,
ExoMediaDrm
.
Provider
exoMediaDrmProvider
)
{
this
.
uuid
=
Assertions
.
checkNotNull
(
uuid
);
this
.
uuid
=
checkNotNull
(
uuid
);
this
.
exoMediaDrmProvider
=
Assertions
.
checkNotNull
(
exoMediaDrmProvider
);
this
.
exoMediaDrmProvider
=
checkNotNull
(
exoMediaDrmProvider
);
return
this
;
return
this
;
}
}
...
@@ -164,8 +167,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -164,8 +167,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
public
Builder
setUseDrmSessionsForClearContent
(
public
Builder
setUseDrmSessionsForClearContent
(
int
...
useDrmSessionsForClearContentTrackTypes
)
{
int
...
useDrmSessionsForClearContentTrackTypes
)
{
for
(
int
trackType
:
useDrmSessionsForClearContentTrackTypes
)
{
for
(
int
trackType
:
useDrmSessionsForClearContentTrackTypes
)
{
Assertions
.
checkArgument
(
checkArgument
(
trackType
==
C
.
TRACK_TYPE_VIDEO
||
trackType
==
C
.
TRACK_TYPE_AUDIO
);
trackType
==
C
.
TRACK_TYPE_VIDEO
||
trackType
==
C
.
TRACK_TYPE_AUDIO
);
}
}
this
.
useDrmSessionsForClearContentTrackTypes
=
this
.
useDrmSessionsForClearContentTrackTypes
=
useDrmSessionsForClearContentTrackTypes
.
clone
();
useDrmSessionsForClearContentTrackTypes
.
clone
();
...
@@ -192,7 +194,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -192,7 +194,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
* @return This builder.
* @return This builder.
*/
*/
public
Builder
setLoadErrorHandlingPolicy
(
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
)
{
public
Builder
setLoadErrorHandlingPolicy
(
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
)
{
this
.
loadErrorHandlingPolicy
=
Assertions
.
checkNotNull
(
loadErrorHandlingPolicy
);
this
.
loadErrorHandlingPolicy
=
checkNotNull
(
loadErrorHandlingPolicy
);
return
this
;
return
this
;
}
}
...
@@ -212,7 +214,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -212,7 +214,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
* @return This builder.
* @return This builder.
*/
*/
public
Builder
setSessionKeepaliveMs
(
long
sessionKeepaliveMs
)
{
public
Builder
setSessionKeepaliveMs
(
long
sessionKeepaliveMs
)
{
Assertions
.
checkArgument
(
sessionKeepaliveMs
>
0
||
sessionKeepaliveMs
==
C
.
TIME_UNSET
);
checkArgument
(
sessionKeepaliveMs
>
0
||
sessionKeepaliveMs
==
C
.
TIME_UNSET
);
this
.
sessionKeepaliveMs
=
sessionKeepaliveMs
;
this
.
sessionKeepaliveMs
=
sessionKeepaliveMs
;
return
this
;
return
this
;
}
}
...
@@ -396,8 +398,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -396,8 +398,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
boolean
playClearSamplesWithoutKeys
,
boolean
playClearSamplesWithoutKeys
,
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
,
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
,
long
sessionKeepaliveMs
)
{
long
sessionKeepaliveMs
)
{
Assertions
.
checkNotNull
(
uuid
);
checkNotNull
(
uuid
);
Assertions
.
checkArgument
(!
C
.
COMMON_PSSH_UUID
.
equals
(
uuid
),
"Use C.CLEARKEY_UUID instead"
);
checkArgument
(!
C
.
COMMON_PSSH_UUID
.
equals
(
uuid
),
"Use C.CLEARKEY_UUID instead"
);
this
.
uuid
=
uuid
;
this
.
uuid
=
uuid
;
this
.
exoMediaDrmProvider
=
exoMediaDrmProvider
;
this
.
exoMediaDrmProvider
=
exoMediaDrmProvider
;
this
.
callback
=
callback
;
this
.
callback
=
callback
;
...
@@ -441,9 +443,9 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -441,9 +443,9 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
* @param offlineLicenseKeySetId The key set id of the license to be used with the given mode.
* @param offlineLicenseKeySetId The key set id of the license to be used with the given mode.
*/
*/
public
void
setMode
(
@Mode
int
mode
,
@Nullable
byte
[]
offlineLicenseKeySetId
)
{
public
void
setMode
(
@Mode
int
mode
,
@Nullable
byte
[]
offlineLicenseKeySetId
)
{
Assertions
.
checkState
(
sessions
.
isEmpty
());
checkState
(
sessions
.
isEmpty
());
if
(
mode
==
MODE_QUERY
||
mode
==
MODE_RELEASE
)
{
if
(
mode
==
MODE_QUERY
||
mode
==
MODE_RELEASE
)
{
Assertions
.
checkNotNull
(
offlineLicenseKeySetId
);
checkNotNull
(
offlineLicenseKeySetId
);
}
}
this
.
mode
=
mode
;
this
.
mode
=
mode
;
this
.
offlineLicenseKeySetId
=
offlineLicenseKeySetId
;
this
.
offlineLicenseKeySetId
=
offlineLicenseKeySetId
;
...
@@ -456,7 +458,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -456,7 +458,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
if
(
prepareCallsCount
++
!=
0
)
{
if
(
prepareCallsCount
++
!=
0
)
{
return
;
return
;
}
}
Assertions
.
checkState
(
exoMediaDrm
==
null
);
checkState
(
exoMediaDrm
==
null
);
exoMediaDrm
=
exoMediaDrmProvider
.
acquireExoMediaDrm
(
uuid
);
exoMediaDrm
=
exoMediaDrmProvider
.
acquireExoMediaDrm
(
uuid
);
exoMediaDrm
.
setOnEventListener
(
new
MediaDrmEventListener
());
exoMediaDrm
.
setOnEventListener
(
new
MediaDrmEventListener
());
}
}
...
@@ -477,7 +479,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -477,7 +479,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
}
}
releaseAllPreacquiredSessions
();
releaseAllPreacquiredSessions
();
Assertions
.
checkNotNull
(
exoMediaDrm
).
release
();
checkNotNull
(
exoMediaDrm
).
release
();
exoMediaDrm
=
null
;
exoMediaDrm
=
null
;
}
}
...
@@ -525,7 +527,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -525,7 +527,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Nullable
List
<
SchemeData
>
schemeDatas
=
null
;
@Nullable
List
<
SchemeData
>
schemeDatas
=
null
;
if
(
offlineLicenseKeySetId
==
null
)
{
if
(
offlineLicenseKeySetId
==
null
)
{
schemeDatas
=
getSchemeDatas
(
Assertions
.
checkNotNull
(
format
.
drmInitData
),
uuid
,
false
);
schemeDatas
=
getSchemeDatas
(
checkNotNull
(
format
.
drmInitData
),
uuid
,
false
);
if
(
schemeDatas
.
isEmpty
())
{
if
(
schemeDatas
.
isEmpty
())
{
final
MissingSchemeDataException
error
=
new
MissingSchemeDataException
(
uuid
);
final
MissingSchemeDataException
error
=
new
MissingSchemeDataException
(
uuid
);
Log
.
e
(
TAG
,
"DRM error"
,
error
);
Log
.
e
(
TAG
,
"DRM error"
,
error
);
...
@@ -573,7 +575,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -573,7 +575,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Nullable
@Nullable
public
Class
<?
extends
ExoMediaCrypto
>
getExoMediaCryptoType
(
Format
format
)
{
public
Class
<?
extends
ExoMediaCrypto
>
getExoMediaCryptoType
(
Format
format
)
{
Class
<?
extends
ExoMediaCrypto
>
exoMediaCryptoType
=
Class
<?
extends
ExoMediaCrypto
>
exoMediaCryptoType
=
Assertions
.
checkNotNull
(
exoMediaDrm
).
getExoMediaCryptoType
();
checkNotNull
(
exoMediaDrm
).
getExoMediaCryptoType
();
if
(
format
.
drmInitData
==
null
)
{
if
(
format
.
drmInitData
==
null
)
{
int
trackType
=
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
);
int
trackType
=
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
);
return
Util
.
linearSearch
(
useDrmSessionsForClearContentTrackTypes
,
trackType
)
!=
C
.
INDEX_UNSET
return
Util
.
linearSearch
(
useDrmSessionsForClearContentTrackTypes
,
trackType
)
!=
C
.
INDEX_UNSET
...
@@ -591,7 +593,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -591,7 +593,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Nullable
@Nullable
private
DrmSession
maybeAcquirePlaceholderSession
(
private
DrmSession
maybeAcquirePlaceholderSession
(
int
trackType
,
boolean
shouldReleasePreacquiredSessionsBeforeRetrying
)
{
int
trackType
,
boolean
shouldReleasePreacquiredSessionsBeforeRetrying
)
{
ExoMediaDrm
exoMediaDrm
=
Assertions
.
checkNotNull
(
this
.
exoMediaDrm
);
ExoMediaDrm
exoMediaDrm
=
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
;
...
@@ -657,8 +659,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -657,8 +659,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
this
.
playbackLooper
=
playbackLooper
;
this
.
playbackLooper
=
playbackLooper
;
this
.
playbackHandler
=
new
Handler
(
playbackLooper
);
this
.
playbackHandler
=
new
Handler
(
playbackLooper
);
}
else
{
}
else
{
Assertions
.
checkState
(
this
.
playbackLooper
==
playbackLooper
);
checkState
(
this
.
playbackLooper
==
playbackLooper
);
Assertions
.
checkNotNull
(
playbackHandler
);
checkNotNull
(
playbackHandler
);
}
}
}
}
...
@@ -707,8 +709,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -707,8 +709,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
// assume any error indicates resource shortage (ensuring we retry).
// assume any error indicates resource shortage (ensuring we retry).
return
session
.
getState
()
==
DrmSession
.
STATE_ERROR
return
session
.
getState
()
==
DrmSession
.
STATE_ERROR
&&
(
Util
.
SDK_INT
<
19
&&
(
Util
.
SDK_INT
<
19
||
Assertions
.
checkNotNull
(
session
.
getError
()).
getCause
()
||
checkNotNull
(
session
.
getError
()).
getCause
()
instanceof
ResourceBusyException
);
instanceof
ResourceBusyException
);
}
}
/**
/**
...
@@ -744,7 +745,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -744,7 +745,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Nullable
List
<
SchemeData
>
schemeDatas
,
@Nullable
List
<
SchemeData
>
schemeDatas
,
boolean
isPlaceholderSession
,
boolean
isPlaceholderSession
,
@Nullable
DrmSessionEventListener
.
EventDispatcher
eventDispatcher
)
{
@Nullable
DrmSessionEventListener
.
EventDispatcher
eventDispatcher
)
{
Assertions
.
checkNotNull
(
exoMediaDrm
);
checkNotNull
(
exoMediaDrm
);
// Placeholder sessions should always play clear samples without keys.
// Placeholder sessions should always play clear samples without keys.
boolean
playClearSamplesWithoutKeys
=
this
.
playClearSamplesWithoutKeys
|
isPlaceholderSession
;
boolean
playClearSamplesWithoutKeys
=
this
.
playClearSamplesWithoutKeys
|
isPlaceholderSession
;
DefaultDrmSession
session
=
DefaultDrmSession
session
=
...
@@ -760,7 +761,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -760,7 +761,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
offlineLicenseKeySetId
,
offlineLicenseKeySetId
,
keyRequestParameters
,
keyRequestParameters
,
callback
,
callback
,
Assertions
.
checkNotNull
(
playbackLooper
),
checkNotNull
(
playbackLooper
),
loadErrorHandlingPolicy
);
loadErrorHandlingPolicy
);
// Acquire the session once on behalf of the caller to DrmSessionManager - this is the
// Acquire the session once on behalf of the caller to DrmSessionManager - this is the
// reference 'assigned' to the caller which they're responsible for releasing. Do this first,
// reference 'assigned' to the caller which they're responsible for releasing. Do this first,
...
@@ -861,7 +862,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -861,7 +862,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
if
(
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
if
(
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
// The session has been acquired elsewhere so we want to cancel our timeout.
// The session has been acquired elsewhere so we want to cancel our timeout.
keepaliveSessions
.
remove
(
session
);
keepaliveSessions
.
remove
(
session
);
Assertions
.
checkNotNull
(
playbackHandler
).
removeCallbacksAndMessages
(
session
);
checkNotNull
(
playbackHandler
).
removeCallbacksAndMessages
(
session
);
}
}
}
}
...
@@ -870,7 +871,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -870,7 +871,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
if
(
newReferenceCount
==
1
&&
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
if
(
newReferenceCount
==
1
&&
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
// Only the internal keep-alive reference remains, so we can start the timeout.
// Only the internal keep-alive reference remains, so we can start the timeout.
keepaliveSessions
.
add
(
session
);
keepaliveSessions
.
add
(
session
);
Assertions
.
checkNotNull
(
playbackHandler
)
checkNotNull
(
playbackHandler
)
.
postAtTime
(
.
postAtTime
(
()
->
session
.
release
(
/* eventDispatcher= */
null
),
()
->
session
.
release
(
/* eventDispatcher= */
null
),
session
,
session
,
...
@@ -891,7 +892,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -891,7 +892,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
}
}
provisioningSessions
.
remove
(
session
);
provisioningSessions
.
remove
(
session
);
if
(
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
if
(
sessionKeepaliveMs
!=
C
.
TIME_UNSET
)
{
Assertions
.
checkNotNull
(
playbackHandler
).
removeCallbacksAndMessages
(
session
);
checkNotNull
(
playbackHandler
).
removeCallbacksAndMessages
(
session
);
keepaliveSessions
.
remove
(
session
);
keepaliveSessions
.
remove
(
session
);
}
}
}
}
...
@@ -903,7 +904,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -903,7 +904,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Override
@Override
public
void
onEvent
(
public
void
onEvent
(
ExoMediaDrm
md
,
@Nullable
byte
[]
sessionId
,
int
event
,
int
extra
,
@Nullable
byte
[]
data
)
{
ExoMediaDrm
md
,
@Nullable
byte
[]
sessionId
,
int
event
,
int
extra
,
@Nullable
byte
[]
data
)
{
Assertions
.
checkNotNull
(
mediaDrmHandler
).
obtainMessage
(
event
,
sessionId
).
sendToTarget
();
checkNotNull
(
mediaDrmHandler
).
obtainMessage
(
event
,
sessionId
).
sendToTarget
();
}
}
}
}
...
@@ -951,7 +952,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -951,7 +952,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
}
}
this
.
session
=
this
.
session
=
acquireSession
(
acquireSession
(
Assertions
.
checkNotNull
(
playbackLooper
),
checkNotNull
(
playbackLooper
),
eventDispatcher
,
eventDispatcher
,
format
,
format
,
/* shouldReleasePreacquiredSessionsBeforeRetrying= */
false
);
/* shouldReleasePreacquiredSessionsBeforeRetrying= */
false
);
...
@@ -964,7 +965,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
...
@@ -964,7 +965,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
// Ensure the underlying session is released immediately if we're already on the playback
// Ensure the underlying session is released immediately if we're already on the playback
// thread, to allow a failed session opening to be immediately retried.
// thread, to allow a failed session opening to be immediately retried.
Util
.
postOrRun
(
Util
.
postOrRun
(
Assertions
.
checkNotNull
(
playbackHandler
),
checkNotNull
(
playbackHandler
),
()
->
{
()
->
{
if
(
isReleased
)
{
if
(
isReleased
)
{
return
;
return
;
...
...
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