mirror of
https://github.com/androidx/media.git
synced 2025-05-03 21:57:46 +08:00
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
|
* 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 ###
|
||||||
|
|
||||||
|
@ -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. */
|
||||||
|
@ -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) {}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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() {}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
*
|
*
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user