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
([#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 ###

View File

@ -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. */

View File

@ -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) {}
}

View File

@ -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;

View File

@ -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() {}
}

View File

@ -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.
*

View File

@ -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;