Skip to content

Last frame of video jumps when switching to new video with setKeepContentOnPlayerReset(true) #9835

@CleverSJX

Description

@CleverSJX

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

Recorded video

    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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions