JavaFX - Как я могу запустить 24-часовое видео (используя javafx media) в точное текущее время с системных часов компьютера? - PullRequest
4 голосов
/ 10 мая 2019

У меня 24-часовая запись, начинающаяся в 00:00 и заканчивающаяся 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();
      }
  }
}

Я в основном использую стандартный способ воспроизведения видео с помощью javafx в Eclipse.

1 Ответ

2 голосов
/ 11 мая 2019

Сначала вам нужно получить длительность с полуночи:

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);
...