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
7b692f96
authored
Feb 22, 2021
by
ibaker
Committed by
marcbaechinger
Feb 23, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Pass the session state to the onDrmSessionAcquired listener method
PiperOrigin-RevId: 358823166
parent
c64a1a0c
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
51 additions
and
18 deletions
RELEASENOTES.md
library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsListener.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionEventListener.java
library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
RELEASENOTES.md
View file @
7b692f96
...
...
@@ -37,6 +37,7 @@
when playing content that uses the same encryption keys for both audio &
video tracks (previously separate acquire and release events were
dispatched for each track in each period).
*
Include the session state in DRM session-acquired listener methods.
*
VP9 extension: Update to use NDK r22
(
[
#8581
](
https://github.com/google/ExoPlayer/issues/8581
)
).
*
FLAC extension: Update to use NDK r22
...
...
library/core/src/main/java/com/google/android/exoplayer2/MediaSourceList.java
View file @
7b692f96
...
...
@@ -21,6 +21,7 @@ import static java.lang.Math.min;
import
android.os.Handler
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.analytics.AnalyticsCollector
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionEventListener
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MaskingMediaPeriod
;
...
...
@@ -600,9 +601,11 @@ import java.util.Set;
@Override
public
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaSource
.
MediaPeriodId
mediaPeriodId
)
{
int
windowIndex
,
@Nullable
MediaSource
.
MediaPeriodId
mediaPeriodId
,
@DrmSession
.
State
int
state
)
{
if
(
maybeUpdateEventDispatcher
(
windowIndex
,
mediaPeriodId
))
{
drmEventDispatcher
.
drmSessionAcquired
();
drmEventDispatcher
.
drmSessionAcquired
(
state
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsCollector.java
View file @
7b692f96
...
...
@@ -37,6 +37,7 @@ import com.google.android.exoplayer2.audio.AudioAttributes;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
import
com.google.android.exoplayer2.decoder.DecoderReuseEvaluation
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionEventListener
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
...
...
@@ -753,12 +754,17 @@ public class AnalyticsCollector
// DefaultDrmSessionManager.EventListener implementation.
@Override
public
final
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
)
{
@SuppressWarnings
(
"deprecation"
)
// Calls deprecated listener method.
public
final
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
,
@DrmSession
.
State
int
state
)
{
EventTime
eventTime
=
generateMediaPeriodEventTime
(
windowIndex
,
mediaPeriodId
);
sendEvent
(
eventTime
,
AnalyticsListener
.
EVENT_DRM_SESSION_ACQUIRED
,
listener
->
listener
.
onDrmSessionAcquired
(
eventTime
));
listener
->
{
listener
.
onDrmSessionAcquired
(
eventTime
);
listener
.
onDrmSessionAcquired
(
eventTime
,
state
);
});
}
@Override
...
...
library/core/src/main/java/com/google/android/exoplayer2/analytics/AnalyticsListener.java
View file @
7b692f96
...
...
@@ -39,6 +39,7 @@ import com.google.android.exoplayer2.audio.AudioSink;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
import
com.google.android.exoplayer2.decoder.DecoderException
;
import
com.google.android.exoplayer2.decoder.DecoderReuseEvaluation
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
...
...
@@ -1021,12 +1022,17 @@ public interface AnalyticsListener {
*/
default
void
onSurfaceSizeChanged
(
EventTime
eventTime
,
int
width
,
int
height
)
{}
/** @deprecated Implement {@link #onDrmSessionAcquired(EventTime, int)} instead. */
@Deprecated
default
void
onDrmSessionAcquired
(
EventTime
eventTime
)
{}
/**
* Called each time a drm session is acquired.
*
* @param eventTime The event time.
* @param state The {@link DrmSession.State} of the session when the acquisition completed.
*/
default
void
onDrmSessionAcquired
(
EventTime
eventTime
)
{}
default
void
onDrmSessionAcquired
(
EventTime
eventTime
,
@DrmSession
.
State
int
state
)
{}
/**
* Called each time drm keys are loaded.
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
View file @
7b692f96
...
...
@@ -298,9 +298,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
&&
eventDispatchers
.
count
(
eventDispatcher
)
==
1
)
{
// If the session is already open and this is the first instance of eventDispatcher we've
// seen, then send the acquire event only to the provided dispatcher.
// TODO: Add a parameter to onDrmSessionAcquired to indicate whether the session is being
// re-used or not.
eventDispatcher
.
drmSessionAcquired
();
eventDispatcher
.
drmSessionAcquired
(
state
);
}
referenceCountListener
.
onReferenceCountIncremented
(
this
,
referenceCount
);
}
...
...
@@ -354,8 +352,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
try
{
sessionId
=
mediaDrm
.
openSession
();
mediaCrypto
=
mediaDrm
.
createMediaCrypto
(
sessionId
);
dispatchEvent
(
DrmSessionEventListener
.
EventDispatcher
::
drmSessionAcquired
);
state
=
STATE_OPENED
;
// Capture state into a local so a consistent value is seen by the lambda.
int
localState
=
state
;
dispatchEvent
(
eventDispatcher
->
eventDispatcher
.
drmSessionAcquired
(
localState
));
Assertions
.
checkNotNull
(
sessionId
);
return
true
;
}
catch
(
NotProvisionedException
e
)
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionEventListener.java
View file @
7b692f96
...
...
@@ -28,13 +28,19 @@ import java.util.concurrent.CopyOnWriteArrayList;
/** Listener of {@link DrmSessionManager} events. */
public
interface
DrmSessionEventListener
{
/** @deprecated Implement {@link #onDrmSessionAcquired(int, MediaPeriodId, int)} instead. */
@Deprecated
default
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
)
{}
/**
* Called each time a drm session is acquired.
*
* @param windowIndex The window index in the timeline this media period belongs to.
* @param mediaPeriodId The {@link MediaPeriodId} associated with the drm session.
* @param state The {@link DrmSession.State} of the session when the acquisition completed.
*/
default
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
)
{}
default
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
,
@DrmSession
.
State
int
state
)
{}
/**
* Called each time keys are loaded.
...
...
@@ -149,13 +155,20 @@ public interface DrmSessionEventListener {
}
}
/** Dispatches {@link #onDrmSessionAcquired(int, MediaPeriodId)}. */
public
void
drmSessionAcquired
()
{
/**
* Dispatches {@link #onDrmSessionAcquired(int, MediaPeriodId, int)} and {@link
* #onDrmSessionAcquired(int, MediaPeriodId)}.
*/
@SuppressWarnings
(
"deprecation"
)
// Calls deprecated listener method.
public
void
drmSessionAcquired
(
@DrmSession
.
State
int
state
)
{
for
(
ListenerAndHandler
listenerAndHandler
:
listenerAndHandlers
)
{
DrmSessionEventListener
listener
=
listenerAndHandler
.
listener
;
postOrRun
(
listenerAndHandler
.
handler
,
()
->
listener
.
onDrmSessionAcquired
(
windowIndex
,
mediaPeriodId
));
()
->
{
listener
.
onDrmSessionAcquired
(
windowIndex
,
mediaPeriodId
);
listener
.
onDrmSessionAcquired
(
windowIndex
,
mediaPeriodId
,
state
);
});
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/CompositeMediaSource.java
View file @
7b692f96
...
...
@@ -19,6 +19,7 @@ import android.os.Handler;
import
androidx.annotation.CallSuper
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionEventListener
;
import
com.google.android.exoplayer2.upstream.TransferListener
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
@@ -290,9 +291,10 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
// DrmSessionEventListener implementation
@Override
public
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
)
{
public
void
onDrmSessionAcquired
(
int
windowIndex
,
@Nullable
MediaPeriodId
mediaPeriodId
,
@DrmSession
.
State
int
state
)
{
if
(
maybeUpdateEventDispatcher
(
windowIndex
,
mediaPeriodId
))
{
drmEventDispatcher
.
drmSessionAcquired
();
drmEventDispatcher
.
drmSessionAcquired
(
state
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java
View file @
7b692f96
...
...
@@ -35,6 +35,7 @@ import com.google.android.exoplayer2.analytics.AnalyticsListener;
import
com.google.android.exoplayer2.audio.AudioAttributes
;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
import
com.google.android.exoplayer2.decoder.DecoderReuseEvaluation
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
...
...
@@ -479,8 +480,8 @@ public class EventLogger implements AnalyticsListener {
}
@Override
public
void
onDrmSessionAcquired
(
EventTime
eventTime
)
{
logd
(
eventTime
,
"drmSessionAcquired"
);
public
void
onDrmSessionAcquired
(
EventTime
eventTime
,
@DrmSession
.
State
int
state
)
{
logd
(
eventTime
,
"drmSessionAcquired"
,
"state="
+
state
);
}
@Override
...
...
library/core/src/test/java/com/google/android/exoplayer2/analytics/AnalyticsCollectorTest.java
View file @
7b692f96
...
...
@@ -80,6 +80,7 @@ import com.google.android.exoplayer2.Timeline.Window;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
import
com.google.android.exoplayer2.drm.DefaultDrmSessionManager
;
import
com.google.android.exoplayer2.drm.DrmInitData
;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.drm.ExoMediaDrm
;
import
com.google.android.exoplayer2.drm.MediaDrmCallback
;
...
...
@@ -2261,7 +2262,7 @@ public final class AnalyticsCollectorTest {
}
@Override
public
void
onDrmSessionAcquired
(
EventTime
eventTime
)
{
public
void
onDrmSessionAcquired
(
EventTime
eventTime
,
@DrmSession
.
State
int
state
)
{
reportedEvents
.
add
(
new
ReportedEvent
(
EVENT_DRM_SESSION_ACQUIRED
,
eventTime
));
}
...
...
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