2016-08-08 6 views
1

pause() метод MediaPlayer делает Media «искать» немного. Это действительно раздражает, но я не узнал, где проблема.JavaFX Media - pause(); метод делает MediaPlayer быстрой перемоткой вперед?

private void playPauseClicked() 
    {  
     Status currentStatus = player.getStatus(); 
     if(currentStatus == Status.PLAYING) 
     { 
      Duration d1 = player.getCurrentTime(); //To measure the difference 
      player.pause(); 
      Duration d2 = player.getCurrentTime(); 
      VIDEO_PAUSED = true; 
     } 
     else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) 
     { 
      player.play(); 
      VIDEO_PAUSED = false; 
     } 
    } 

Результат не ясен, это примерно 200-400 мс разница между точками d1 и d2.

Конечно, я попытался найти плеер обратно в d1 после паузы в медиа, не работал, тот же результат после возобновления носителя.

Заранее спасибо за любые советы :)

ответ

0

Это потому, что метод pause не остановить играть мгновенно (когда pause называется, СМИ до сих пор играет и останавливается именно в тот момент, когда statusProperty изменения):

Приостанавливает плеер. Как только игрок на самом деле приостановлен, статус будет установлен на MediaPlayer.Status.PAUSED.

Поэтому измерения не очень актуальны, потому что, когда вы получите текущее время Duration d1 = player.getCurrentTime(); до паузы, игра на самом деле не приостановлена, а также, когда вы получите текущее время после вызова pause с Duration d2 = player.getCurrentTime(); не правильно, так как pause был выполнен асинхронно, следовательно, нет Garantie, что в d2 видео остановились, чтобы играть:

Работа в MediaPlayer по своей сути асинхронная.

Что вы можете сделать, чтобы получить правильное время, когда воспроизведение остановлено, - наблюдать изменения состояния MediaPlayer, используя, например, setOnPaused.

Пример:

private void playPauseClicked() { 
    Status currentStatus = player.getStatus(); 

    if(currentStatus == Status.PLAYING) 
     player.pause(); 
    else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) { 
     System.out.println("Player will start at: " + player.getCurrentTime()); 
     player.play(); 
    } 
} 

player.setOnPaused(() -> System.out.println("Paused at: " + player.getCurrentTime())); 

Пример вывода:

Paused at: 1071.0203000000001 ms 
Player will start at: 1071.0203000000001 ms 
Paused at: 2716.7345 ms 
Player will start at: 2716.7345 ms 

Примечание: Однако это не требуется, чтобы установить время на MediaPlayer в том случае, если вы просто хотите останавливаться и играть, но если вы хотите, вы можете использовать метод seek.

+0

Ничего себе, удивительный! Я смотрел много видео и читал, чтобы узнать, как это сделать ... Большое спасибо! Ценю вашу помощь. – Rouman

 Смежные вопросы

  • Нет связанных вопросов^_^