Add onDrmSessionAcquired and onDrmSessionReleased callbacks.
To report DRM session metrics in the future as part of the listener, we need a callback at the end of the drm session to get the final metric state. For completion, the session acquired callback is also added. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=211328412
This commit is contained in:
parent
5335b258de
commit
3a802eb06c
@ -136,6 +136,8 @@
|
||||
* Prevent potential issues when reporting events for multi-period media sources
|
||||
([#4492](https://github.com/google/ExoPlayer/issues/4492) and
|
||||
[#4634](https://github.com/google/ExoPlayer/issues/4634)).
|
||||
* Add callbacks to `DefaultDrmSessionEventListener` and `AnalyticsListener` to
|
||||
get notified of acquired and released DRM sessions.
|
||||
|
||||
### 2.8.4 ###
|
||||
|
||||
|
@ -534,6 +534,14 @@ public class AnalyticsCollector
|
||||
|
||||
// DefaultDrmSessionManager.EventListener implementation.
|
||||
|
||||
@Override
|
||||
public final void onDrmSessionAcquired() {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onDrmSessionAcquired(eventTime);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onDrmKeysLoaded() {
|
||||
EventTime eventTime = generateReadingMediaPeriodEventTime();
|
||||
@ -566,6 +574,14 @@ public class AnalyticsCollector
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onDrmSessionReleased() {
|
||||
EventTime eventTime = generateLastReportedPlayingMediaPeriodEventTime();
|
||||
for (AnalyticsListener listener : listeners) {
|
||||
listener.onDrmSessionReleased(eventTime);
|
||||
}
|
||||
}
|
||||
|
||||
// Internal methods.
|
||||
|
||||
/** Returns read-only set of registered listeners. */
|
||||
|
@ -450,6 +450,13 @@ public interface AnalyticsListener {
|
||||
*/
|
||||
default void onRenderedFirstFrame(EventTime eventTime, Surface surface) {}
|
||||
|
||||
/**
|
||||
* Called each time a drm session is acquired.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
*/
|
||||
default void onDrmSessionAcquired(EventTime eventTime) {}
|
||||
|
||||
/**
|
||||
* Called each time drm keys are loaded.
|
||||
*
|
||||
@ -479,4 +486,11 @@ public interface AnalyticsListener {
|
||||
* @param eventTime The event time.
|
||||
*/
|
||||
default void onDrmKeysRemoved(EventTime eventTime) {}
|
||||
|
||||
/**
|
||||
* Called each time a drm session is released.
|
||||
*
|
||||
* @param eventTime The event time.
|
||||
*/
|
||||
default void onDrmSessionReleased(EventTime eventTime) {}
|
||||
}
|
||||
|
@ -184,6 +184,7 @@ import java.util.UUID;
|
||||
if (sessionId != null) {
|
||||
mediaDrm.closeSession(sessionId);
|
||||
sessionId = null;
|
||||
eventDispatcher.dispatch(DefaultDrmSessionEventListener::onDrmSessionReleased);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -279,6 +280,7 @@ import java.util.UUID;
|
||||
|
||||
try {
|
||||
sessionId = mediaDrm.openSession();
|
||||
eventDispatcher.dispatch(DefaultDrmSessionEventListener::onDrmSessionAcquired);
|
||||
mediaCrypto = mediaDrm.createMediaCrypto(sessionId);
|
||||
state = STATE_OPENED;
|
||||
return true;
|
||||
|
@ -20,6 +20,9 @@ import com.google.android.exoplayer2.Player;
|
||||
/** Listener of {@link DefaultDrmSessionManager} events. */
|
||||
public interface DefaultDrmSessionEventListener {
|
||||
|
||||
/** Called each time a drm session is acquired. */
|
||||
default void onDrmSessionAcquired() {}
|
||||
|
||||
/** Called each time keys are loaded. */
|
||||
void onDrmKeysLoaded();
|
||||
|
||||
@ -42,4 +45,7 @@ public interface DefaultDrmSessionEventListener {
|
||||
|
||||
/** Called each time offline keys are removed. */
|
||||
void onDrmKeysRemoved();
|
||||
|
||||
/** Called each time a drm session is released. */
|
||||
default void onDrmSessionReleased() {}
|
||||
}
|
||||
|
@ -390,6 +390,11 @@ public class EventLogger implements AnalyticsListener {
|
||||
logd(eventTime, "downstreamFormatChanged", Format.toLogString(mediaLoadData.trackFormat));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionAcquired(EventTime eventTime) {
|
||||
logd(eventTime, "drmSessionAcquired");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionManagerError(EventTime eventTime, Exception e) {
|
||||
printInternalError(eventTime, "drmSessionManagerError", e);
|
||||
@ -410,6 +415,11 @@ public class EventLogger implements AnalyticsListener {
|
||||
logd(eventTime, "drmKeysLoaded");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionReleased(EventTime eventTime) {
|
||||
logd(eventTime, "drmSessionReleased");
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a debug message.
|
||||
*
|
||||
|
@ -101,6 +101,8 @@ public final class AnalyticsCollectorTest {
|
||||
private static final int EVENT_DRM_ERROR = 34;
|
||||
private static final int EVENT_DRM_KEYS_RESTORED = 35;
|
||||
private static final int EVENT_DRM_KEYS_REMOVED = 36;
|
||||
private static final int EVENT_DRM_SESSION_ACQUIRED = 37;
|
||||
private static final int EVENT_DRM_SESSION_RELEASED = 38;
|
||||
|
||||
private static final int TIMEOUT_MS = 10000;
|
||||
private static final Timeline SINGLE_PERIOD_TIMELINE = new FakeTimeline(/* windowCount= */ 1);
|
||||
@ -1091,6 +1093,11 @@ public final class AnalyticsCollectorTest {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_RENDERED_FIRST_FRAME, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionAcquired(EventTime eventTime) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DRM_SESSION_ACQUIRED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysLoaded(EventTime eventTime) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DRM_KEYS_LOADED, eventTime));
|
||||
@ -1111,6 +1118,11 @@ public final class AnalyticsCollectorTest {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DRM_KEYS_REMOVED, eventTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionReleased(EventTime eventTime) {
|
||||
reportedEvents.add(new ReportedEvent(EVENT_DRM_SESSION_RELEASED, eventTime));
|
||||
}
|
||||
|
||||
private static final class ReportedEvent {
|
||||
|
||||
public final int eventType;
|
||||
|
Loading…
x
Reference in New Issue
Block a user