-
Notifications
You must be signed in to change notification settings - Fork 6k
Open
Labels
Description
The 16:9 video played in portrait mode is displayed in the center by default. In order to prevent the video from switching to a black screen, I called playerView.setKeepContentOnPlayerReset(true);, but when switching the video, the last frame of the video appears at the top, or is pulled up by the full screen
private void play(int position) {
initPlayer();
Log.i(TAG, "play position: " + position);
MediaItem mediaItem = mediaItemList.get(position);
assert mediaItem.localConfiguration != null;
if (coverView != null) {
coverView.setVisibility(View.VISIBLE);
Glide.with(this).load(mediaItem.localConfiguration.tag).into(coverView);
}
exoPlayer.setMediaItem(mediaItem);
exoPlayer.prepare();
}
private void initData() {
MediaItem firstItem = new MediaItem.Builder()
.setUri(VIDEO_PATH + "1.mp4")
.setTag(VIDEO_PATH + "1.jpg")
.build();
MediaItem secondItem = new MediaItem.Builder()
.setUri(VIDEO_PATH + "2.mp4")
.setTag(VIDEO_PATH + "2.jpg")
.build();
mediaItemList.add(firstItem);
mediaItemList.add(secondItem);
}
private void initPlayer() {
if (exoPlayer != null) {
exoPlayer.release();
}
exoPlayer = new ExoPlayer
.Builder(this)
.build();
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT);
playerView.setPlayer(exoPlayer);
playerView.setKeepContentOnPlayerReset(true);
exoPlayer.addAnalyticsListener(new EventLogger(null));
exoPlayer.addListener(new MyListener());
exoPlayer.setPlayWhenReady(true);
exoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (exoPlayer != null) {
exoPlayer.release();
}
}
private class MyListener implements Player.Listener {
@Override
public void onPlayerError(@NonNull PlaybackException error) {
Log.e(TAG, "onPlayerError: ", error);
}
@Override
public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) {
Log.i(TAG, "onMediaItemTransition: mediaItem: " + mediaItem.localConfiguration.uri);
}
@Override
public void onRenderedFirstFrame() {
Log.i(TAG, "onRenderedFirstFrame: " + "gone view ");
if (coverView != null) {
coverView.setVisibility(View.GONE);
}
}
@Override
public void onPlaybackStateChanged(int playbackState) {
// Log.i(TAG, "onPlaybackStateChanged: playbackState: " + exoPlayer.getCurrentMediaItem().localConfiguration.uri);
switch (playbackState) {
case Player.STATE_IDLE:
Log.i(TAG, "STATE_IDLE");
break;
case Player.STATE_BUFFERING:
Log.i(TAG, "STATE_BUFFERING");
break;
case Player.STATE_READY:
Log.i(TAG, "STATE_READY");
break;
case Player.STATE_ENDED:
Log.i(TAG, "STATE_ENDED");
complete();
break;
}
}
@Override
public void onIsPlayingChanged(boolean isPlaying) {
Log.i(TAG, "onIsPlayingChanged: " + isPlaying);
}
}
private void complete() {
if (currentPosition >= mediaItemList.size() - 1) {
currentPosition = 0;
} else {
currentPosition++;
}
play(currentPosition);
}
- ExoPlayer version number: 2.16.1
- Android version: all
- Android device:all
Reactions are currently unavailable