gpt4 book ai didi

JavaFX 媒体 - 暂停();方法使 MediaPlayer 快进?

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:21 25 4
gpt4 key购买 nike

MediaPlayerpause() 方法使 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com