Видеоплеер использует SurfaceView, но не может воспроизвести его должным образом

#java #android-studio #android-mediaplayer #surfaceview #android-seekbar

#java #android-studio #android-mediaplayer #surfaceview #android-seekbar

Вопрос:

Я пытаюсь создать видеоплеер с помощью SurfaceView, и там будет кнопка воспроизведения/паузы, а также панель поиска. Мое видео воспроизводится плавно, но всякий раз, когда я пытаюсь использовать код updateSeekBar, который я использовал для своего музыкального плеера, видео застревает (не может работать должным образом). Итак, есть ли какой-то другой способ обновить прогресс панели поиска или мне нужно внести некоторые изменения в мой текущий код?

Пользовательский интерфейс моего приложения:

Мой код:

 SurfaceView surfaceView; MediaPlayer mediaPlayer; ImageButton imageButton; CardView cardView; SeekBar seekBar; Runnable runnable; Handler handler;  @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);   imageButton = findViewById(R.id.imageButton);  cardView = findViewById(R.id.cardViewButton);  seekBar = findViewById(R.id.seekBar);  surfaceView = findViewById(R.id.surfaceView);   mediaPlayer = MediaPlayer.create(this, R.raw.vid);   mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {  @Override  public void onPrepared(MediaPlayer mediaPlayer) {  surfaceView.setKeepScreenOn(true);  SurfaceHolder surfaceHolder = surfaceView.getHolder();  surfaceHolder.addCallback(new SurfaceHolder.Callback() {  @Override  public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {  mediaPlayer.setDisplay(surfaceHolder);  }   @Override  public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {   }   @Override  public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {   }  });  seekBar.setMax(mediaPlayer.getDuration());  seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {  @Override  public void onProgressChanged(SeekBar seekBar, int i, boolean b) {  mediaPlayer.seekTo(i);  }   @Override  public void onStartTrackingTouch(SeekBar seekBar) {   }   @Override  public void onStopTrackingTouch(SeekBar seekBar) {   }  });  }  });  imageButton.setBackgroundResource(R.drawable.ic_play);  imageButton.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View view) {  if (mediaPlayer.isPlaying()) {  mediaPlayer.pause();  imageButton.setBackgroundResource(R.drawable.ic_play);  } else {  mediaPlayer.start();  imageButton.setBackgroundResource(R.drawable.ic_pause);  }  }  });  handler = new Handler();  updateSeekBar(); } private void updateSeekBar() {  int currentPosition = mediaPlayer.getCurrentPosition();  seekBar.setProgress(currentPosition);  runnable = new Runnable() {  @Override  public void run() {  updateSeekBar();  }  };  handler.postDelayed(runnable, 0); }