mirror of
https://github.com/samsonjs/media.git
synced 2026-03-26 09:35:47 +00:00
SessionPlayerConnector: Use setter for ControlDispatcher
This brings SessionPlayerConnector in line with other components that use a ControlDispatcher in the ExoPlayer library, all of which have a setter. PiperOrigin-RevId: 329665767
This commit is contained in:
parent
56e622a2e5
commit
b79e2e069f
3 changed files with 29 additions and 20 deletions
|
|
@ -185,17 +185,20 @@ public class SessionPlayerConnectorTest {
|
|||
}
|
||||
};
|
||||
SimpleExoPlayer simpleExoPlayer = null;
|
||||
SessionPlayerConnector playerConnector = null;
|
||||
try {
|
||||
simpleExoPlayer =
|
||||
new SimpleExoPlayer.Builder(context)
|
||||
.setLooper(Looper.myLooper())
|
||||
.build();
|
||||
try (SessionPlayerConnector player =
|
||||
new SessionPlayerConnector(
|
||||
simpleExoPlayer, new DefaultMediaItemConverter(), controlDispatcher)) {
|
||||
assertPlayerResult(player.play(), RESULT_INFO_SKIPPED);
|
||||
}
|
||||
playerConnector =
|
||||
new SessionPlayerConnector(simpleExoPlayer, new DefaultMediaItemConverter());
|
||||
playerConnector.setControlDispatcher(controlDispatcher);
|
||||
assertPlayerResult(playerConnector.play(), RESULT_INFO_SKIPPED);
|
||||
} finally {
|
||||
if (playerConnector != null) {
|
||||
playerConnector.close();
|
||||
}
|
||||
if (simpleExoPlayer != null) {
|
||||
simpleExoPlayer.release();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import androidx.media2.common.MediaMetadata;
|
|||
import androidx.media2.common.SessionPlayer;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ControlDispatcher;
|
||||
import com.google.android.exoplayer2.DefaultControlDispatcher;
|
||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
|
|
@ -108,7 +109,6 @@ import java.util.List;
|
|||
|
||||
private final Player player;
|
||||
private final MediaItemConverter mediaItemConverter;
|
||||
private final ControlDispatcher controlDispatcher;
|
||||
private final ComponentListener componentListener;
|
||||
|
||||
@Nullable private MediaMetadata playlistMetadata;
|
||||
|
|
@ -117,6 +117,7 @@ import java.util.List;
|
|||
private final List<androidx.media2.common.MediaItem> media2Playlist;
|
||||
private final List<MediaItem> exoPlayerPlaylist;
|
||||
|
||||
private ControlDispatcher controlDispatcher;
|
||||
private boolean prepared;
|
||||
private boolean rebuffering;
|
||||
private int currentWindowIndex;
|
||||
|
|
@ -128,18 +129,13 @@ import java.util.List;
|
|||
* @param listener A {@link Listener}.
|
||||
* @param player The {@link Player}.
|
||||
* @param mediaItemConverter The {@link MediaItemConverter}.
|
||||
* @param controlDispatcher A {@link ControlDispatcher}.
|
||||
*/
|
||||
public PlayerWrapper(
|
||||
Listener listener,
|
||||
Player player,
|
||||
MediaItemConverter mediaItemConverter,
|
||||
ControlDispatcher controlDispatcher) {
|
||||
public PlayerWrapper(Listener listener, Player player, MediaItemConverter mediaItemConverter) {
|
||||
this.listener = listener;
|
||||
this.player = player;
|
||||
this.mediaItemConverter = mediaItemConverter;
|
||||
this.controlDispatcher = controlDispatcher;
|
||||
|
||||
controlDispatcher = new DefaultControlDispatcher();
|
||||
componentListener = new ComponentListener();
|
||||
player.addListener(componentListener);
|
||||
@Nullable Player.AudioComponent audioComponent = player.getAudioComponent();
|
||||
|
|
@ -160,6 +156,10 @@ import java.util.List;
|
|||
updatePlaylist(player.getCurrentTimeline());
|
||||
}
|
||||
|
||||
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
|
||||
this.controlDispatcher = controlDispatcher;
|
||||
}
|
||||
|
||||
public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) {
|
||||
return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
|
|||
* @param player The player to wrap.
|
||||
*/
|
||||
public SessionPlayerConnector(Player player) {
|
||||
this(player, new DefaultMediaItemConverter(), new DefaultControlDispatcher());
|
||||
this(player, new DefaultMediaItemConverter());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -100,22 +100,28 @@ public final class SessionPlayerConnector extends SessionPlayer {
|
|||
*
|
||||
* @param player The player to wrap.
|
||||
* @param mediaItemConverter The {@link MediaItemConverter}.
|
||||
* @param controlDispatcher The {@link ControlDispatcher}.
|
||||
*/
|
||||
public SessionPlayerConnector(
|
||||
Player player, MediaItemConverter mediaItemConverter, ControlDispatcher controlDispatcher) {
|
||||
public SessionPlayerConnector(Player player, MediaItemConverter mediaItemConverter) {
|
||||
Assertions.checkNotNull(player);
|
||||
Assertions.checkNotNull(mediaItemConverter);
|
||||
Assertions.checkNotNull(controlDispatcher);
|
||||
|
||||
state = PLAYER_STATE_IDLE;
|
||||
taskHandler = new Handler(player.getApplicationLooper());
|
||||
taskHandlerExecutor = (runnable) -> postOrRun(taskHandler, runnable);
|
||||
ExoPlayerWrapperListener playerListener = new ExoPlayerWrapperListener();
|
||||
this.player = new PlayerWrapper(playerListener, player, mediaItemConverter, controlDispatcher);
|
||||
|
||||
this.player = new PlayerWrapper(new ExoPlayerWrapperListener(), player, mediaItemConverter);
|
||||
playerCommandQueue = new PlayerCommandQueue(this.player, taskHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link ControlDispatcher}.
|
||||
*
|
||||
* @param controlDispatcher The {@link ControlDispatcher}.
|
||||
*/
|
||||
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
|
||||
player.setControlDispatcher(controlDispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<PlayerResult> play() {
|
||||
return playerCommandQueue.addCommand(
|
||||
|
|
|
|||
Loading…
Reference in a new issue