VideoView seekTo 0 вместо указанной c позиции - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь запустить видео с указанной c позиции, но VideoView ведет себя странно. Когда я запускаю такой код

videoView.seekTo(2000)
int current = videoView.getCurrentPosition()
Log.e("Current Time", String.valueOf(current))

Журнал дает мне значение 0. Он должен дать 2000, потому что это текущая позиция. Даже если я реализую onPreparedListener, он не работает (но по-другому). Он отображает правильное значение (2000), но видео по-прежнему не ищет.

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp)
            {
                videoView.getDuration();
                videoView.seekTo(2000);
                Log.e("Current: ", String.valueOf(videoView.getCurrentPosition()));
            }
        });

Как с этим бороться? Если я создам MediaPlayer + SurfaceView, это поможет или будет вести себя так же, как VideoView?

1 Ответ

2 голосов
/ 27 апреля 2020

На самом деле, VideoView.seekTo () является оболочкой для MediaPlayer.seekTo (). Эта функция возвращается почти сразу, хотя фактический поиск все еще выполняется. Поэтому вы хотите дождаться завершения поиска через MediaPlayer.OnSeekCompleteListener .

Однако стандартный VideoView не поддерживает OnSeekCompleteListener .

Но вы можете скопировать и локально настроить класс VideoView, чтобы добавить эту поддержку самостоятельно.

Или, Вы можете попробовать это

mVideoView.setOnPreparedListener(new MediaPlayer .OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {

    mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
        @Override
        public void onSeekComplete(MediaPlayer mp) {


            Log.e("Current: ", String.valueOf(videoView.getCurrentPosition()));
        }
    });

}
});
videoView.seekTo(2000); //or wherever the call is to be made

Надеюсь, это должно помочь.

...