mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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;
|
SimpleExoPlayer simpleExoPlayer = null;
|
||||||
|
SessionPlayerConnector playerConnector = null;
|
||||||
try {
|
try {
|
||||||
simpleExoPlayer =
|
simpleExoPlayer =
|
||||||
new SimpleExoPlayer.Builder(context)
|
new SimpleExoPlayer.Builder(context)
|
||||||
.setLooper(Looper.myLooper())
|
.setLooper(Looper.myLooper())
|
||||||
.build();
|
.build();
|
||||||
try (SessionPlayerConnector player =
|
playerConnector =
|
||||||
new SessionPlayerConnector(
|
new SessionPlayerConnector(simpleExoPlayer, new DefaultMediaItemConverter());
|
||||||
simpleExoPlayer, new DefaultMediaItemConverter(), controlDispatcher)) {
|
playerConnector.setControlDispatcher(controlDispatcher);
|
||||||
assertPlayerResult(player.play(), RESULT_INFO_SKIPPED);
|
assertPlayerResult(playerConnector.play(), RESULT_INFO_SKIPPED);
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
|
if (playerConnector != null) {
|
||||||
|
playerConnector.close();
|
||||||
|
}
|
||||||
if (simpleExoPlayer != null) {
|
if (simpleExoPlayer != null) {
|
||||||
simpleExoPlayer.release();
|
simpleExoPlayer.release();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import androidx.media2.common.MediaMetadata;
|
||||||
import androidx.media2.common.SessionPlayer;
|
import androidx.media2.common.SessionPlayer;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ControlDispatcher;
|
import com.google.android.exoplayer2.ControlDispatcher;
|
||||||
|
import com.google.android.exoplayer2.DefaultControlDispatcher;
|
||||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||||
import com.google.android.exoplayer2.MediaItem;
|
import com.google.android.exoplayer2.MediaItem;
|
||||||
import com.google.android.exoplayer2.PlaybackParameters;
|
import com.google.android.exoplayer2.PlaybackParameters;
|
||||||
|
|
@ -108,7 +109,6 @@ import java.util.List;
|
||||||
|
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final MediaItemConverter mediaItemConverter;
|
private final MediaItemConverter mediaItemConverter;
|
||||||
private final ControlDispatcher controlDispatcher;
|
|
||||||
private final ComponentListener componentListener;
|
private final ComponentListener componentListener;
|
||||||
|
|
||||||
@Nullable private MediaMetadata playlistMetadata;
|
@Nullable private MediaMetadata playlistMetadata;
|
||||||
|
|
@ -117,6 +117,7 @@ import java.util.List;
|
||||||
private final List<androidx.media2.common.MediaItem> media2Playlist;
|
private final List<androidx.media2.common.MediaItem> media2Playlist;
|
||||||
private final List<MediaItem> exoPlayerPlaylist;
|
private final List<MediaItem> exoPlayerPlaylist;
|
||||||
|
|
||||||
|
private ControlDispatcher controlDispatcher;
|
||||||
private boolean prepared;
|
private boolean prepared;
|
||||||
private boolean rebuffering;
|
private boolean rebuffering;
|
||||||
private int currentWindowIndex;
|
private int currentWindowIndex;
|
||||||
|
|
@ -128,18 +129,13 @@ import java.util.List;
|
||||||
* @param listener A {@link Listener}.
|
* @param listener A {@link Listener}.
|
||||||
* @param player The {@link Player}.
|
* @param player The {@link Player}.
|
||||||
* @param mediaItemConverter The {@link MediaItemConverter}.
|
* @param mediaItemConverter The {@link MediaItemConverter}.
|
||||||
* @param controlDispatcher A {@link ControlDispatcher}.
|
|
||||||
*/
|
*/
|
||||||
public PlayerWrapper(
|
public PlayerWrapper(Listener listener, Player player, MediaItemConverter mediaItemConverter) {
|
||||||
Listener listener,
|
|
||||||
Player player,
|
|
||||||
MediaItemConverter mediaItemConverter,
|
|
||||||
ControlDispatcher controlDispatcher) {
|
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.mediaItemConverter = mediaItemConverter;
|
this.mediaItemConverter = mediaItemConverter;
|
||||||
this.controlDispatcher = controlDispatcher;
|
|
||||||
|
|
||||||
|
controlDispatcher = new DefaultControlDispatcher();
|
||||||
componentListener = new ComponentListener();
|
componentListener = new ComponentListener();
|
||||||
player.addListener(componentListener);
|
player.addListener(componentListener);
|
||||||
@Nullable Player.AudioComponent audioComponent = player.getAudioComponent();
|
@Nullable Player.AudioComponent audioComponent = player.getAudioComponent();
|
||||||
|
|
@ -160,6 +156,10 @@ import java.util.List;
|
||||||
updatePlaylist(player.getCurrentTimeline());
|
updatePlaylist(player.getCurrentTimeline());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
|
||||||
|
this.controlDispatcher = controlDispatcher;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) {
|
public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) {
|
||||||
return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null);
|
return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
|
||||||
* @param player The player to wrap.
|
* @param player The player to wrap.
|
||||||
*/
|
*/
|
||||||
public SessionPlayerConnector(Player player) {
|
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 player The player to wrap.
|
||||||
* @param mediaItemConverter The {@link MediaItemConverter}.
|
* @param mediaItemConverter The {@link MediaItemConverter}.
|
||||||
* @param controlDispatcher The {@link ControlDispatcher}.
|
|
||||||
*/
|
*/
|
||||||
public SessionPlayerConnector(
|
public SessionPlayerConnector(Player player, MediaItemConverter mediaItemConverter) {
|
||||||
Player player, MediaItemConverter mediaItemConverter, ControlDispatcher controlDispatcher) {
|
|
||||||
Assertions.checkNotNull(player);
|
Assertions.checkNotNull(player);
|
||||||
Assertions.checkNotNull(mediaItemConverter);
|
Assertions.checkNotNull(mediaItemConverter);
|
||||||
Assertions.checkNotNull(controlDispatcher);
|
|
||||||
|
|
||||||
state = PLAYER_STATE_IDLE;
|
state = PLAYER_STATE_IDLE;
|
||||||
taskHandler = new Handler(player.getApplicationLooper());
|
taskHandler = new Handler(player.getApplicationLooper());
|
||||||
taskHandlerExecutor = (runnable) -> postOrRun(taskHandler, runnable);
|
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);
|
playerCommandQueue = new PlayerCommandQueue(this.player, taskHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link ControlDispatcher}.
|
||||||
|
*
|
||||||
|
* @param controlDispatcher The {@link ControlDispatcher}.
|
||||||
|
*/
|
||||||
|
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
|
||||||
|
player.setControlDispatcher(controlDispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<PlayerResult> play() {
|
public ListenableFuture<PlayerResult> play() {
|
||||||
return playerCommandQueue.addCommand(
|
return playerCommandQueue.addCommand(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue