vlcj更新控制栏(滑块和时间戳),而不会导致在播放时跳过帧

时间:2017-04-13 06:16:41

标签: vlcj

我在播放器用户界面中有一个控制栏,其中有一个播放按钮,一个滑块和一个时间戳(格式为mm:ss/$video-duration,其中mm为当前分钟,ss为当前秒,$ video-duration为其姓名状态,视频的持续时间)。

我的代码更新了MediaPlayerEventAdapter方法positionChanged(MediaPlayer mediaPlayer, float newPosition)中的滑块位置和时间戳。但是,我相信由于该方法中的代码,视频播放正在跳帧(当播放的视频帧速率较低时,波动性变得特别明显)。

@Override
public void positionChanged(MediaPlayer player, final float newPosition) {
   final float newTime = Math.round(newPosition*getVideoDuration());  
   slider.setValue(Math.round(newTime*VIDEO_FRAME_RATE));                            
   timeLabel.setText(formatTimeDisplay(newTime));
}

如果positionChanged不是运行此类代码的好地方,那么您建议我尝试一下?

1 个答案:

答案 0 :(得分:0)

我想出了原因(希望我犯的错误可以帮助别人) -

我的滑块使用了ChangeListener,在stateChanged(ChangeEvent e)方法中,我正在更新视频播放位置(当人们拖动滑块时,我希望视频播放位置相应地更新)所以基本上我创建了类似于循环的情况,当视频播放位置改变时滑块的位置得到更新,当滑块的位置改变时,它也会更新视频播放位置。

我通过使用MouseMotionListener来解决问题并实现mouseDragged(MouseEvent arg0)方法来处理人们拖动滑块以更改播放位置时的情况。