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

标签 java javafx media pause

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/

相关文章:

java - 在 JavaFX 中使用鼠标滚轮缩放

JavaFX:仅在 Linux 上找不到或加载主类

Java 记录导航

java - 使用 Spring Security 检索 session ID

java - 如何使用java在文件中搜索单词

image - JavaFX - 资源路径和加载图像

php - Magento 1.9 - Media.phtml 内容未加载到我的可配置产品 View 页面中

android - Android:声卡采样率限制

python - 如何让歌曲在 WxPython MediaCtrl 中自动播放?

java - java.lang.SecurityManager 中的初始化字段有什么用?