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,但没有成功,恢复媒体后结果相同。
预先感谢您的任何建议:)
最佳答案
这是因为pause方法不会立即停止播放(当调用 pause
时,媒体仍然播放并在 statusProperty 发生变化时停止):
Pauses the player. Once the player is actually paused the status will be set to MediaPlayer.Status.PAUSED.
因此测量并不真正相关,因为当您在暂停之前获取当前时间 Duration d1 = player.getCurrentTime();
时,播放实际上并未暂停,并且当您在使用 Duration d2 = player.getCurrentTime();
调用 pause
之后获取当前时间时也是不正确的,因为 pause
已异步执行,因此没有保证在 d2
视频停止播放:
The operation of a MediaPlayer is inherently asynchronous.
要获得播放停止时的正确时间,您可以使用例如观察 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 快进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819690/