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
f64c28f2
authored
Nov 19, 2021
by
tonihei
Committed by
kim-vde
Nov 26, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Set LogSessionId on MediaDrm session.
PiperOrigin-RevId: 411047184
parent
4fd6d670
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
2 deletions
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
View file @
f64c28f2
...
...
@@ -31,6 +31,7 @@ import androidx.annotation.GuardedBy;
import
androidx.annotation.Nullable
;
import
androidx.annotation.RequiresApi
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.analytics.PlayerId
;
import
com.google.android.exoplayer2.decoder.CryptoConfig
;
import
com.google.android.exoplayer2.drm.DrmInitData.SchemeData
;
import
com.google.android.exoplayer2.drm.ExoMediaDrm.KeyRequest
;
...
...
@@ -133,6 +134,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private
final
HashMap
<
String
,
String
>
keyRequestParameters
;
private
final
CopyOnWriteMultiset
<
DrmSessionEventListener
.
EventDispatcher
>
eventDispatchers
;
private
final
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
;
private
final
PlayerId
playerId
;
/* package */
final
MediaDrmCallback
callback
;
/* package */
final
UUID
uuid
;
...
...
@@ -182,7 +184,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
HashMap
<
String
,
String
>
keyRequestParameters
,
MediaDrmCallback
callback
,
Looper
playbackLooper
,
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
)
{
LoadErrorHandlingPolicy
loadErrorHandlingPolicy
,
PlayerId
playerId
)
{
if
(
mode
==
DefaultDrmSessionManager
.
MODE_QUERY
||
mode
==
DefaultDrmSessionManager
.
MODE_RELEASE
)
{
Assertions
.
checkNotNull
(
offlineLicenseKeySetId
);
...
...
@@ -204,6 +207,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
this
.
callback
=
callback
;
this
.
eventDispatchers
=
new
CopyOnWriteMultiset
<>();
this
.
loadErrorHandlingPolicy
=
loadErrorHandlingPolicy
;
this
.
playerId
=
playerId
;
state
=
STATE_OPENING
;
responseHandler
=
new
ResponseHandler
(
playbackLooper
);
}
...
...
@@ -370,6 +374,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
try
{
sessionId
=
mediaDrm
.
openSession
();
mediaDrm
.
setPlayerIdForSession
(
sessionId
,
playerId
);
cryptoConfig
=
mediaDrm
.
createCryptoConfig
(
sessionId
);
state
=
STATE_OPENED
;
// Capture state into a local so a consistent value is seen by the lambda.
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
View file @
f64c28f2
...
...
@@ -304,6 +304,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
private
@MonotonicNonNull
Handler
playbackHandler
;
private
int
mode
;
@Nullable
private
byte
[]
offlineLicenseKeySetId
;
private
@MonotonicNonNull
PlayerId
playerId
;
/* package */
volatile
@Nullable
MediaDrmHandler
mediaDrmHandler
;
...
...
@@ -492,6 +493,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Override
public
void
setPlayer
(
Looper
playbackLooper
,
PlayerId
playerId
)
{
initPlaybackLooper
(
playbackLooper
);
this
.
playerId
=
playerId
;
}
@Override
...
...
@@ -777,7 +779,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
keyRequestParameters
,
callback
,
checkNotNull
(
playbackLooper
),
loadErrorHandlingPolicy
);
loadErrorHandlingPolicy
,
checkNotNull
(
playerId
));
// 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,
// to ensure that eventDispatcher receives all events related to the initial
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
View file @
f64c28f2
...
...
@@ -26,6 +26,7 @@ import android.os.PersistableBundle;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.analytics.PlayerId
;
import
com.google.android.exoplayer2.decoder.CryptoConfig
;
import
com.google.android.exoplayer2.drm.DrmInitData.SchemeData
;
import
java.lang.annotation.Documented
;
...
...
@@ -396,6 +397,14 @@ public interface ExoMediaDrm {
void
closeSession
(
byte
[]
sessionId
);
/**
* Sets the {@link PlayerId} of the player using a session.
*
* @param sessionId The ID of the session.
* @param playerId The {@link PlayerId} of the player using the session.
*/
default
void
setPlayerIdForSession
(
byte
[]
sessionId
,
PlayerId
playerId
)
{}
/**
* Generates a key request.
*
* @param scope If {@code keyType} is {@link #KEY_TYPE_STREAMING} or {@link #KEY_TYPE_OFFLINE},
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java
View file @
f64c28f2
...
...
@@ -15,6 +15,8 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
drm
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
android.annotation.SuppressLint
;
import
android.media.DeniedByServerException
;
import
android.media.MediaCrypto
;
...
...
@@ -23,12 +25,14 @@ import android.media.MediaDrm;
import
android.media.MediaDrmException
;
import
android.media.NotProvisionedException
;
import
android.media.UnsupportedSchemeException
;
import
android.media.metrics.LogSessionId
;
import
android.os.PersistableBundle
;
import
android.text.TextUtils
;
import
androidx.annotation.DoNotInline
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.RequiresApi
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.analytics.PlayerId
;
import
com.google.android.exoplayer2.drm.DrmInitData.SchemeData
;
import
com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
@@ -182,6 +186,13 @@ public final class FrameworkMediaDrm implements ExoMediaDrm {
mediaDrm
.
closeSession
(
sessionId
);
}
@Override
public
void
setPlayerIdForSession
(
byte
[]
sessionId
,
PlayerId
playerId
)
{
if
(
Util
.
SDK_INT
>=
31
)
{
Api31
.
setLogSessionIdOnMediaDrmSession
(
mediaDrm
,
sessionId
,
playerId
);
}
}
// Return values of MediaDrm.KeyRequest.getRequestType are equal to KeyRequest.RequestType.
@SuppressLint
(
"WrongConstant"
)
@Override
...
...
@@ -504,9 +515,22 @@ public final class FrameworkMediaDrm implements ExoMediaDrm {
@RequiresApi
(
31
)
private
static
class
Api31
{
private
Api31
()
{}
@DoNotInline
public
static
boolean
requiresSecureDecoder
(
MediaDrm
mediaDrm
,
String
mimeType
)
{
return
mediaDrm
.
requiresSecureDecoder
(
mimeType
);
}
@DoNotInline
public
static
void
setLogSessionIdOnMediaDrmSession
(
MediaDrm
mediaDrm
,
byte
[]
drmSessionId
,
PlayerId
playerId
)
{
LogSessionId
logSessionId
=
playerId
.
getLogSessionId
();
if
(!
logSessionId
.
equals
(
LogSessionId
.
LOG_SESSION_ID_NONE
))
{
MediaDrm
.
PlaybackComponent
playbackComponent
=
checkNotNull
(
mediaDrm
.
getPlaybackComponent
(
drmSessionId
));
playbackComponent
.
setLogSessionId
(
logSessionId
);
}
}
}
}
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