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:
tonihei 2018-09-03 02:43:29 -07:00 committed by Oliver Woodman
parent 5335b258de
commit 3a802eb06c
7 changed files with 62 additions and 0 deletions

View File

@ -136,6 +136,8 @@
* Prevent potential issues when reporting events for multi-period media sources * Prevent potential issues when reporting events for multi-period media sources
([#4492](https://github.com/google/ExoPlayer/issues/4492) and ([#4492](https://github.com/google/ExoPlayer/issues/4492) and
[#4634](https://github.com/google/ExoPlayer/issues/4634)). [#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 ### ### 2.8.4 ###

View File

@ -534,6 +534,14 @@ public class AnalyticsCollector
// DefaultDrmSessionManager.EventListener implementation. // DefaultDrmSessionManager.EventListener implementation.
@Override
public final void onDrmSessionAcquired() {
EventTime eventTime = generateReadingMediaPeriodEventTime();
for (AnalyticsListener listener : listeners) {
listener.onDrmSessionAcquired(eventTime);
}
}
@Override @Override
public final void onDrmKeysLoaded() { public final void onDrmKeysLoaded() {
EventTime eventTime = generateReadingMediaPeriodEventTime(); 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. // Internal methods.
/** Returns read-only set of registered listeners. */ /** Returns read-only set of registered listeners. */

View File

@ -450,6 +450,13 @@ public interface AnalyticsListener {
*/ */
default void onRenderedFirstFrame(EventTime eventTime, Surface surface) {} 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. * Called each time drm keys are loaded.
* *
@ -479,4 +486,11 @@ public interface AnalyticsListener {
* @param eventTime The event time. * @param eventTime The event time.
*/ */
default void onDrmKeysRemoved(EventTime eventTime) {} default void onDrmKeysRemoved(EventTime eventTime) {}
/**
* Called each time a drm session is released.
*
* @param eventTime The event time.
*/
default void onDrmSessionReleased(EventTime eventTime) {}
} }

View File

@ -184,6 +184,7 @@ import java.util.UUID;
if (sessionId != null) { if (sessionId != null) {
mediaDrm.closeSession(sessionId); mediaDrm.closeSession(sessionId);
sessionId = null; sessionId = null;
eventDispatcher.dispatch(DefaultDrmSessionEventListener::onDrmSessionReleased);
} }
return true; return true;
} }
@ -279,6 +280,7 @@ import java.util.UUID;
try { try {
sessionId = mediaDrm.openSession(); sessionId = mediaDrm.openSession();
eventDispatcher.dispatch(DefaultDrmSessionEventListener::onDrmSessionAcquired);
mediaCrypto = mediaDrm.createMediaCrypto(sessionId); mediaCrypto = mediaDrm.createMediaCrypto(sessionId);
state = STATE_OPENED; state = STATE_OPENED;
return true; return true;

View File

@ -20,6 +20,9 @@ import com.google.android.exoplayer2.Player;
/** Listener of {@link DefaultDrmSessionManager} events. */ /** Listener of {@link DefaultDrmSessionManager} events. */
public interface DefaultDrmSessionEventListener { public interface DefaultDrmSessionEventListener {
/** Called each time a drm session is acquired. */
default void onDrmSessionAcquired() {}
/** Called each time keys are loaded. */ /** Called each time keys are loaded. */
void onDrmKeysLoaded(); void onDrmKeysLoaded();
@ -42,4 +45,7 @@ public interface DefaultDrmSessionEventListener {
/** Called each time offline keys are removed. */ /** Called each time offline keys are removed. */
void onDrmKeysRemoved(); void onDrmKeysRemoved();
/** Called each time a drm session is released. */
default void onDrmSessionReleased() {}
} }

View File

@ -390,6 +390,11 @@ public class EventLogger implements AnalyticsListener {
logd(eventTime, "downstreamFormatChanged", Format.toLogString(mediaLoadData.trackFormat)); logd(eventTime, "downstreamFormatChanged", Format.toLogString(mediaLoadData.trackFormat));
} }
@Override
public void onDrmSessionAcquired(EventTime eventTime) {
logd(eventTime, "drmSessionAcquired");
}
@Override @Override
public void onDrmSessionManagerError(EventTime eventTime, Exception e) { public void onDrmSessionManagerError(EventTime eventTime, Exception e) {
printInternalError(eventTime, "drmSessionManagerError", e); printInternalError(eventTime, "drmSessionManagerError", e);
@ -410,6 +415,11 @@ public class EventLogger implements AnalyticsListener {
logd(eventTime, "drmKeysLoaded"); logd(eventTime, "drmKeysLoaded");
} }
@Override
public void onDrmSessionReleased(EventTime eventTime) {
logd(eventTime, "drmSessionReleased");
}
/** /**
* Logs a debug message. * Logs a debug message.
* *

View File

@ -101,6 +101,8 @@ public final class AnalyticsCollectorTest {
private static final int EVENT_DRM_ERROR = 34; private static final int EVENT_DRM_ERROR = 34;
private static final int EVENT_DRM_KEYS_RESTORED = 35; private static final int EVENT_DRM_KEYS_RESTORED = 35;
private static final int EVENT_DRM_KEYS_REMOVED = 36; 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 int TIMEOUT_MS = 10000;
private static final Timeline SINGLE_PERIOD_TIMELINE = new FakeTimeline(/* windowCount= */ 1); 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)); 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 @Override
public void onDrmKeysLoaded(EventTime eventTime) { public void onDrmKeysLoaded(EventTime eventTime) {
reportedEvents.add(new ReportedEvent(EVENT_DRM_KEYS_LOADED, 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)); 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 { private static final class ReportedEvent {
public final int eventType; public final int eventType;