>我在播放器UI中有一个控制栏,它有一个播放按钮,一个滑块和一个时间戳(格式mm:ss/$video-duration
其中mm是当前分钟,ss是当前秒,$video持续时间是顾名思义,视频的持续时间(。
我的代码更新了 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 不是运行这种代码的好地方,你会建议我尝试什么?
我想出了原因(希望我犯的错误可以帮助别人(-
我的滑块使用 ChangeListener,在 stateChanged(ChangeEvent e)
方法中,我正在更新视频播放位置(即当人们拖动滑块时,我希望视频播放位置得到相应的更新(,所以本质上我创建了一个类似循环的情况,当视频播放位置更改时,滑块的位置会更新,当滑块的位置发生变化时, 它还更新了视频播放位置。
我通过使用 MouseMotionListener 并实现 mouseDragged(MouseEvent arg0)
方法来解决这个问题,以处理人们拖动滑块以更改播放位置的情况。