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