JavaFX - 如何在计算机系统时钟的准确当前时间开始播放 24 小时视频(使用 javafx 媒体)?

标签 java javafx processing

我有一个从 00:00 开始到 24 小时后结束的 24 小时录音。我想运行该程序并让它在系统时钟显示的同时开始播放视频。例如,巴西现在是 20:14,所以如果我执行该程序,视频将在 20 小时 14 分钟处开始播放。

基本上,我想将视频时间与系统时钟上显示的实际时间同步。

我的代码有点乱,因为分配需要使用 Processing ide,但对于我来说,实际上我想做的是我正在尝试使用 Eclipse 导入 PApplet 等等。无论如何,我只是查看了如何使用 javafx 播放视频,即使我的视频很大,它也可以立即开始播放。

public class UsingProcessing extends PApplet{

  String Dir = System.getProperty("C:");
  Stage stage;

  public static void main(String[] args)  {

      PApplet.main("UsingProcessing");
  }

  public void settings(){

      size(1100, 618,FX2D);
  }

  public void setup(){

      try {

          Field field = PSurfaceFX.class.getDeclaredField("stage");
          field.setAccessible(true);
          stage = (Stage)field.get(surface);

          File f = new File(Dir, "narrativas.mp4");

          Media media = new Media(f.toURI().toURL().toString());
          javafx.scene.media.MediaPlayer player = new 
          javafx.scene.media.MediaPlayer(media);
          MediaView viewer = new MediaView(player);

          DoubleProperty width = viewer.fitWidthProperty();
          DoubleProperty height = viewer.fitHeightProperty();
          width.bind(Bindings.selectDouble(viewer.sceneProperty(), "width"));
          height.bind(Bindings.selectDouble(viewer.sceneProperty(), "height"));
          viewer.setPreserveRatio(true);

          StackPane root = new StackPane();
          root.getChildren().add(viewer);


          Scene scenes = new Scene(root, 1100, 618, Color.BLACK);
          stage.setScene(scenes);
          stage.setTitle("OBSV.CamFeed.6°07'08.3\"S 12°23'51.5\"E");
          stage.setFullScreen(false);
          stage.show();
          player.play();
      } 

      catch (Exception e) {

          e.printStackTrace();
      }
  }
}

我基本上使用的是在 Eclipse 中使用 javafx 播放视频的标准方式。

最佳答案

首先你需要得到从午夜开始的持续时间:

ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime startOfDay = now.toLocalDate().atStartOfDay();
java.time.Duration d = java.time.Duration.between(startOfDay, now);

转换 java.time.Duration反对 javafx.util.Duration对象。

javafx.util.Duration duration = new javafx.util.Duration( d.toMillis() ) ;

然后调用MediaPlayer::setStartTime .

player.setStartTime(duration);

关于JavaFX - 如何在计算机系统时钟的准确当前时间开始播放 24 小时视频(使用 javafx 媒体)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56084757/

相关文章:

combobox - JavaFX - 如何使 ComboBox hgrow?

java - 通过fxml添加observableHashMap

java - 警报类型无关闭 javafx

python - 从 .json 文件中获取特定数据并将它们保存到 python 中的 2D 矩阵/字典中

java - 如何使用processing.org计算文本位置x?

java - 获取图片信息

java - SpringBootTest - 如何在测试级别断言上下文不加载和更改属性?

java - 在 Android 的 LogCat 中显示的 jar 文件中使用 java.util.logging.Logger

java - 在 Java 中使用 .OCX 控件

javascript - 如何通过给定的 2 个点计算弧的 'start' 和 'end' Angular ?