JavaFX 媒体 - 暂停();方法使 MediaPlayer 快进?
Posted
技术标签:
【中文标题】JavaFX 媒体 - 暂停();方法使 MediaPlayer 快进?【英文标题】:JavaFX Media - pause(); method makes MediaPlayer fast-forward? 【发布时间】:2016-12-13 16:00:27 【问题描述】:MediaPlayer
的 pause()
方法使 Media
有点“寻找”。
真的很烦人,但我没发现问题出在哪里。
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;
结果不清楚,点d1和d2相差200-400ms左右。
当然,我在暂停媒体后尝试将我的播放器寻回 d1,但没有成功,恢复媒体后的结果相同。
提前感谢您的任何建议:)
【问题讨论】:
【参考方案1】:这是因为pause 方法不会立即停止播放(当pause
被调用时,媒体仍然在播放并恰好在statusProperty 更改的那一刻停止):
暂停播放器。 一旦播放器实际暂停,状态将 设置为 MediaPlayer.Status.PAUSED。
因此测量值并不真正相关,因为当您在暂停之前获得当前时间Duration d1 = player.getCurrentTime();
时,播放实际上并没有暂停,并且当您在调用pause
和Duration d2 = player.getCurrentTime();
之后获得当前时间时不正确,因为pause
已异步执行,因此无法保证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的方法.
【讨论】:
哇,太棒了!我看了很多视频并一直在阅读以了解如何做到这一点......非常感谢!感谢您的帮助。以上是关于JavaFX 媒体 - 暂停();方法使 MediaPlayer 快进?的主要内容,如果未能解决你的问题,请参考以下文章