mirror of
https://github.com/samsonjs/media.git
synced 2026-03-30 10:15:48 +00:00
Reshuffle the way listeners are attached to MediaSources
This better supports custom listener types defined by MediaSource subclasses. Part of issue:#6765 PiperOrigin-RevId: 308050575
This commit is contained in:
parent
84faa1ae3f
commit
a042346102
2 changed files with 27 additions and 32 deletions
|
|
@ -22,6 +22,7 @@ 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.MediaSourceEventDispatcher;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
|
|
@ -133,22 +134,44 @@ public abstract class BaseMediaSource implements MediaSource {
|
|||
|
||||
@Override
|
||||
public final void addEventListener(Handler handler, MediaSourceEventListener eventListener) {
|
||||
eventDispatcher.addEventListener(handler, eventListener);
|
||||
addEventListenerInternal(handler, eventListener, MediaSourceEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void removeEventListener(MediaSourceEventListener eventListener) {
|
||||
eventDispatcher.removeEventListener(eventListener);
|
||||
removeEventListenerInternal(eventListener, MediaSourceEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void addDrmEventListener(Handler handler, DrmSessionEventListener eventListener) {
|
||||
eventDispatcher.addEventListener(handler, eventListener, DrmSessionEventListener.class);
|
||||
addEventListenerInternal(handler, eventListener, DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void removeDrmEventListener(DrmSessionEventListener eventListener) {
|
||||
eventDispatcher.removeEventListener(eventListener, DrmSessionEventListener.class);
|
||||
removeEventListenerInternal(eventListener, DrmSessionEventListener.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a listener to the internal {@link MediaSourceEventDispatcher} with the provided type.
|
||||
*
|
||||
* <p>NOTE: Read the caveats on {@link MediaSourceEventDispatcher#addEventListener(Handler,
|
||||
* Object, Class)} when deciding what value to pass for {@code listenerClass}.
|
||||
*
|
||||
* @see MediaSourceEventDispatcher#addEventListener(Handler, Object, Class)
|
||||
*/
|
||||
protected final <T> void addEventListenerInternal(
|
||||
Handler handler, T eventListener, Class<T> listenerClass) {
|
||||
eventDispatcher.addEventListener(handler, eventListener, listenerClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a listener from the internal {@link MediaSourceEventDispatcher}.
|
||||
*
|
||||
* @see MediaSourceEventDispatcher#removeEventListener(Object, Class)
|
||||
*/
|
||||
protected final <T> void removeEventListenerInternal(T eventListener, Class<T> listenerClass) {
|
||||
eventDispatcher.removeEventListener(eventListener, listenerClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
package com.google.android.exoplayer2.source;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
|
|
@ -188,33 +187,6 @@ public interface MediaSourceEventListener {
|
|||
return new EventDispatcher(listenerInfos, windowIndex, mediaPeriodId, mediaTimeOffsetMs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a {@link MediaSourceEventListener} to the event dispatcher.
|
||||
*
|
||||
* <p>This is equivalent to {@link #addEventListener(Handler, Object, Class)} with {@code
|
||||
* listenerClass = MediaSourceEventListener.class} and is intended to ease the transition to
|
||||
* using {@link MediaSourceEventDispatcher} everywhere.
|
||||
*
|
||||
* @param handler A handler on the which listener events will be posted.
|
||||
* @param eventListener The listener to be added.
|
||||
*/
|
||||
public void addEventListener(Handler handler, MediaSourceEventListener eventListener) {
|
||||
addEventListener(handler, eventListener, MediaSourceEventListener.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a {@link MediaSourceEventListener} from the event dispatcher.
|
||||
*
|
||||
* <p>This is equivalent to {@link #removeEventListener(Object, Class)} with {@code
|
||||
* listenerClass = MediaSourceEventListener.class} and is intended to ease the transition to
|
||||
* using {@link MediaSourceEventDispatcher} everywhere.
|
||||
*
|
||||
* @param eventListener The listener to be removed.
|
||||
*/
|
||||
public void removeEventListener(MediaSourceEventListener eventListener) {
|
||||
removeEventListener(eventListener, MediaSourceEventListener.class);
|
||||
}
|
||||
|
||||
public void mediaPeriodCreated() {
|
||||
dispatch(
|
||||
(listener, windowIndex, mediaPeriodId) ->
|
||||
|
|
|
|||
Loading…
Reference in a new issue