mirror of
https://github.com/samsonjs/media.git
synced 2026-04-15 12:55:46 +00:00
Add DRM event plumbing to Playlist and CompositeMediaSource
Related to issue:#6765 PiperOrigin-RevId: 300539527
This commit is contained in:
parent
beab272a8c
commit
f08eed4145
2 changed files with 102 additions and 4 deletions
|
|
@ -18,6 +18,7 @@ package com.google.android.exoplayer2;
|
|||
import android.os.Handler;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
|
||||
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.source.LoadEventInfo;
|
||||
import com.google.android.exoplayer2.source.MaskingMediaPeriod;
|
||||
import com.google.android.exoplayer2.source.MaskingMediaSource;
|
||||
|
|
@ -425,9 +426,10 @@ import java.util.Set;
|
|||
MediaSource mediaSource = holder.mediaSource;
|
||||
MediaSource.MediaSourceCaller caller =
|
||||
(source, timeline) -> playlistInfoListener.onPlaylistUpdateRequested();
|
||||
MediaSourceEventListener eventListener = new ForwardingEventListener(holder);
|
||||
ForwardingEventListener eventListener = new ForwardingEventListener(holder);
|
||||
childSources.put(holder, new MediaSourceAndListener(mediaSource, caller, eventListener));
|
||||
mediaSource.addEventListener(Util.createHandler(), eventListener);
|
||||
mediaSource.addDrmEventListener(Util.createHandler(), eventListener);
|
||||
mediaSource.prepareSource(caller, mediaTransferListener);
|
||||
}
|
||||
|
||||
|
|
@ -588,7 +590,8 @@ import java.util.Set;
|
|||
}
|
||||
}
|
||||
|
||||
private final class ForwardingEventListener implements MediaSourceEventListener {
|
||||
private final class ForwardingEventListener
|
||||
implements MediaSourceEventListener, DrmSessionEventListener {
|
||||
|
||||
private final Playlist.MediaSourceHolder id;
|
||||
private EventDispatcher eventDispatcher;
|
||||
|
|
@ -598,6 +601,8 @@ import java.util.Set;
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
// MediaSourceEventListener implementation
|
||||
|
||||
@Override
|
||||
public void onMediaPeriodCreated(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId) {
|
||||
if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
|
||||
|
|
@ -685,6 +690,50 @@ import java.util.Set;
|
|||
}
|
||||
}
|
||||
|
||||
// DrmSessionEventListener implementation
|
||||
|
||||
@Override
|
||||
public void onDrmSessionAcquired() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysLoaded() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionManagerError(Exception error) {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(error),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysRestored() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysRemoved() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRemoved(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionReleased() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionReleased(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
/** Updates the event dispatcher and returns whether the event should be dispatched. */
|
||||
private boolean maybeUpdateEventDispatcher(
|
||||
int childWindowIndex, @Nullable MediaSource.MediaPeriodId childMediaPeriodId) {
|
||||
|
|
|
|||
|
|
@ -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.DrmSessionEventListener;
|
||||
import com.google.android.exoplayer2.upstream.TransferListener;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.UnknownNull;
|
||||
|
|
@ -110,9 +111,10 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
|
|||
Assertions.checkArgument(!childSources.containsKey(id));
|
||||
MediaSourceCaller caller =
|
||||
(source, timeline) -> onChildSourceInfoRefreshed(id, source, timeline);
|
||||
MediaSourceEventListener eventListener = new ForwardingEventListener(id);
|
||||
ForwardingEventListener eventListener = new ForwardingEventListener(id);
|
||||
childSources.put(id, new MediaSourceAndListener(mediaSource, caller, eventListener));
|
||||
mediaSource.addEventListener(Assertions.checkNotNull(eventHandler), eventListener);
|
||||
mediaSource.addDrmEventListener(Assertions.checkNotNull(eventHandler), eventListener);
|
||||
mediaSource.prepareSource(caller, mediaTransferListener);
|
||||
if (!isEnabled()) {
|
||||
mediaSource.disable(caller);
|
||||
|
|
@ -216,7 +218,8 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
|
|||
}
|
||||
}
|
||||
|
||||
private final class ForwardingEventListener implements MediaSourceEventListener {
|
||||
private final class ForwardingEventListener
|
||||
implements MediaSourceEventListener, DrmSessionEventListener {
|
||||
|
||||
@UnknownNull private final T id;
|
||||
private EventDispatcher eventDispatcher;
|
||||
|
|
@ -226,6 +229,8 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
// MediaSourceEventListener implementation
|
||||
|
||||
@Override
|
||||
public void onMediaPeriodCreated(int windowIndex, MediaPeriodId mediaPeriodId) {
|
||||
if (maybeUpdateEventDispatcher(windowIndex, mediaPeriodId)) {
|
||||
|
|
@ -316,6 +321,50 @@ public abstract class CompositeMediaSource<T> extends BaseMediaSource {
|
|||
}
|
||||
}
|
||||
|
||||
// DrmSessionEventListener implementation
|
||||
|
||||
@Override
|
||||
public void onDrmSessionAcquired() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionAcquired(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysLoaded() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysLoaded(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionManagerError(Exception error) {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionManagerError(error),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysRestored() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRestored(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmKeysRemoved() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmKeysRemoved(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrmSessionReleased() {
|
||||
eventDispatcher.dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) -> listener.onDrmSessionReleased(),
|
||||
DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
/** Updates the event dispatcher and returns whether the event should be dispatched. */
|
||||
private boolean maybeUpdateEventDispatcher(
|
||||
int childWindowIndex, @Nullable MediaPeriodId childMediaPeriodId) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue