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

  • 本文关键字:播放 控制 更新 时间戳 VLCJ vlcj
  • 更新时间 :
  • 英文 :


>我在播放器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) 方法来解决这个问题,以处理人们拖动滑块以更改播放位置的情况。

最新更新