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
14b40506
authored
Nov 19, 2021
by
tonihei
Committed by
Ian Baker
Nov 22, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Set LogSessionId on MediaDrm session.
PiperOrigin-RevId: 411047184
parent
9ab02154
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
2 deletions
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSession.java
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManager.java
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/ExoMediaDrm.java
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSession.java
View file @
14b40506
...
...
@@ -38,6 +38,7 @@ import androidx.media3.common.util.CopyOnWriteMultiset;
import
androidx.media3.common.util.Log
;
import
androidx.media3.common.util.Util
;
import
androidx.media3.decoder.CryptoConfig
;
import
androidx.media3.exoplayer.analytics.PlayerId
;
import
androidx.media3.exoplayer.drm.ExoMediaDrm.KeyRequest
;
import
androidx.media3.exoplayer.drm.ExoMediaDrm.ProvisionRequest
;
import
androidx.media3.exoplayer.source.LoadEventInfo
;
...
...
@@ -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.
...
...
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManager.java
View file @
14b40506
...
...
@@ -307,6 +307,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
;
...
...
@@ -495,6 +496,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Override
public
void
setPlayer
(
Looper
playbackLooper
,
PlayerId
playerId
)
{
initPlaybackLooper
(
playbackLooper
);
this
.
playerId
=
playerId
;
}
@Override
...
...
@@ -780,7 +782,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
...
...
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/ExoMediaDrm.java
View file @
14b40506
...
...
@@ -29,6 +29,7 @@ import androidx.media3.common.C;
import
androidx.media3.common.DrmInitData.SchemeData
;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.decoder.CryptoConfig
;
import
androidx.media3.exoplayer.analytics.PlayerId
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
...
...
@@ -398,6 +399,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},
...
...
libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java
View file @
14b40506
...
...
@@ -15,6 +15,8 @@
*/
package
androidx
.
media3
.
exoplayer
.
drm
;
import
static
androidx
.
media3
.
common
.
util
.
Assertions
.
checkNotNull
;
import
android.annotation.SuppressLint
;
import
android.media.DeniedByServerException
;
import
android.media.MediaCrypto
;
...
...
@@ -23,6 +25,7 @@ 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
;
...
...
@@ -37,6 +40,7 @@ import androidx.media3.common.util.Log;
import
androidx.media3.common.util.ParsableByteArray
;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.common.util.Util
;
import
androidx.media3.exoplayer.analytics.PlayerId
;
import
androidx.media3.extractor.mp4.PsshAtomUtil
;
import
com.google.common.base.Charsets
;
import
java.nio.ByteBuffer
;
...
...
@@ -185,6 +189,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
...
...
@@ -507,9 +518,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