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
8d329fb4
authored
May 23, 2019
by
aquilescanta
Committed by
Toni
May 23, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Move DefaultDrmSession resource acquisition to acquire
PiperOrigin-RevId: 249624318
parent
2f12374f
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
19 deletions
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/test/java/com/google/android/exoplayer2/drm/OfflineLicenseHelperTest.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
View file @
8d329fb4
...
...
@@ -74,7 +74,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
public
interface
ReleaseCallback
<
T
extends
ExoMediaCrypto
>
{
/**
* Called
when the session is released
.
* Called
immediately after releasing session resources
.
*
* @param session The session.
*/
...
...
@@ -85,7 +85,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private
static
final
int
MSG_PROVISION
=
0
;
private
static
final
int
MSG_KEYS
=
1
;
private
static
final
int
MAX_LICENSE_DURATION_TO_RENEW
=
60
;
private
static
final
int
MAX_LICENSE_DURATION_TO_RENEW
_SECONDS
=
60
;
/** The DRM scheme datas, or null if this session uses offline keys. */
public
final
@Nullable
List
<
SchemeData
>
schemeDatas
;
...
...
@@ -104,10 +104,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private
@DrmSession
.
State
int
state
;
private
int
openCount
;
private
HandlerThread
requestHandlerThread
;
private
PostRequestHandler
postRequestHandler
;
private
@Nullabl
e
T
mediaCrypto
;
private
@Nullabl
e
DrmSessionException
lastException
;
@Nullable
private
HandlerThread
requestHandlerThread
;
@Nullable
private
PostRequestHandler
postRequestHandler
;
@Nullable
privat
e
T
mediaCrypto
;
@Nullable
privat
e
DrmSessionException
lastException
;
private
byte
@MonotonicNonNull
[]
sessionId
;
private
byte
@MonotonicNonNull
[]
offlineLicenseKeySetId
;
...
...
@@ -166,35 +166,31 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
this
.
initialDrmRequestRetryCount
=
initialDrmRequestRetryCount
;
this
.
eventDispatcher
=
eventDispatcher
;
state
=
STATE_OPENING
;
postResponseHandler
=
new
PostResponseHandler
(
playbackLooper
);
requestHandlerThread
=
new
HandlerThread
(
"DrmRequestHandler"
);
requestHandlerThread
.
start
();
postRequestHandler
=
new
PostRequestHandler
(
requestHandlerThread
.
getLooper
());
}
// Life cycle.
public
void
acquire
()
{
if
(++
openCount
==
1
)
{
if
(
state
==
STATE_ERROR
)
{
return
;
}
requestHandlerThread
=
new
HandlerThread
(
"DrmRequestHandler"
);
requestHandlerThread
.
start
()
;
postRequestHandler
=
new
PostRequestHandler
(
requestHandlerThread
.
getLooper
());
if
(
openInternal
(
true
))
{
doLicense
(
true
);
}
}
}
// Assigning null to various non-null variables for clean-up. Class won't be used after release.
@SuppressWarnings
(
"assignment.type.incompatible"
)
public
void
release
()
{
if
(--
openCount
==
0
)
{
// Assigning null to various non-null variables for clean-up.
state
=
STATE_RELEASED
;
postResponseHandler
.
removeCallbacksAndMessages
(
null
);
postRequestHandler
.
removeCallbacksAndMessages
(
null
);
Util
.
castNonNull
(
postRequestHandler
)
.
removeCallbacksAndMessages
(
null
);
postRequestHandler
=
null
;
requestHandlerThread
.
quit
();
Util
.
castNonNull
(
requestHandlerThread
)
.
quit
();
requestHandlerThread
=
null
;
mediaCrypto
=
null
;
lastException
=
null
;
...
...
@@ -227,7 +223,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
public
void
provision
()
{
currentProvisionRequest
=
mediaDrm
.
getProvisionRequest
();
postRequestHandler
.
post
(
MSG_PROVISION
,
currentProvisionRequest
,
/* allowRetry= */
true
);
Util
.
castNonNull
(
postRequestHandler
)
.
post
(
MSG_PROVISION
,
Assertions
.
checkNotNull
(
currentProvisionRequest
),
/* allowRetry= */
true
);
}
public
void
onProvisionCompleted
()
{
...
...
@@ -335,7 +335,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
}
else
if
(
state
==
STATE_OPENED_WITH_KEYS
||
restoreKeys
())
{
long
licenseDurationRemainingSec
=
getLicenseDurationRemainingSec
();
if
(
mode
==
DefaultDrmSessionManager
.
MODE_PLAYBACK
&&
licenseDurationRemainingSec
<=
MAX_LICENSE_DURATION_TO_RENEW
)
{
&&
licenseDurationRemainingSec
<=
MAX_LICENSE_DURATION_TO_RENEW
_SECONDS
)
{
Log
.
d
(
TAG
,
"Offline license has expired or will expire soon. "
...
...
@@ -398,7 +398,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
try
{
currentKeyRequest
=
mediaDrm
.
getKeyRequest
(
scope
,
schemeDatas
,
type
,
optionalKeyRequestParameters
);
postRequestHandler
.
post
(
MSG_KEYS
,
currentKeyRequest
,
allowRetry
);
Util
.
castNonNull
(
postRequestHandler
)
.
post
(
MSG_KEYS
,
Assertions
.
checkNotNull
(
currentKeyRequest
),
allowRetry
);
}
catch
(
Exception
e
)
{
onKeysError
(
e
);
}
...
...
library/core/src/test/java/com/google/android/exoplayer2/drm/OfflineLicenseHelperTest.java
View file @
8d329fb4
...
...
@@ -17,6 +17,8 @@ package com.google.android.exoplayer2.drm;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
junit
.
Assert
.
fail
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyInt
;
import
static
org
.
mockito
.
ArgumentMatchers
.
nullable
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
when
;
...
...
@@ -25,6 +27,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.drm.DrmInitData.SchemeData
;
import
java.util.HashMap
;
import
java.util.List
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -46,6 +49,10 @@ public class OfflineLicenseHelperTest {
public
void
setUp
()
throws
Exception
{
MockitoAnnotations
.
initMocks
(
this
);
when
(
mediaDrm
.
openSession
()).
thenReturn
(
new
byte
[]
{
1
,
2
,
3
});
when
(
mediaDrm
.
getKeyRequest
(
nullable
(
byte
[].
class
),
nullable
(
List
.
class
),
anyInt
(),
nullable
(
HashMap
.
class
)))
.
thenReturn
(
new
ExoMediaDrm
.
KeyRequest
(
/* data= */
new
byte
[
0
],
/* licenseServerUrl= */
""
));
offlineLicenseHelper
=
new
OfflineLicenseHelper
<>(
C
.
WIDEVINE_UUID
,
mediaDrm
,
mediaDrmCallback
,
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