Comment Lire Une Vidéo MP4 Dans L'Application Java Swing


Quelqu'un sait-il comment je peux lire un fichier vidéo .mp4 dans un JPanel? J'ai essayé JMF avec .fichier avi mais n'a trouvé aucun succès et maintenant je suis déconcerté et frustré de voir comment une tâche aussi simple de lire un fichier vidéo devient si fastidieuse.

Quelqu'un là-bas s'il vous plait faire la lumière sur le chemin que je pourrais prendre et je l'apprécierais grandement.

J'ai entendu parler de VLCJ mais le problème est que je ne peux pas garantir que chaque machine exécutant cette application aura VLC player installé. Est-il un moyen Je peux regrouper VLC player dans le dossier de distribution?

A l'origine, la vidéo que nous utilisons est sur Vimeo mais il s'avère qu'il est pratiquement impossible de l'intégrer en raison d'un manque de support API et j'ai pensé que d'accord, je vais juste la jouer localement et même cela devient si difficile maintenant.

Author: Zana Daniel, 2018-08-27

1 answers

Merci à @VGR d'avoir porté JavaFX à mon attention, je viens d'intégrer un JFXPanel dans un JPanel de l'endroit où je voulais que la vidéo soit. Cela fonctionne parfaitement bien dans mon cas car c'est un simple écran avec une vidéo à lire.

Voici l'extrait de code complet ci-dessous:

private void getVideo(){
    final JFXPanel VFXPanel = new JFXPanel();

    File video_source = new File("tutorial.mp4");
    Media m = new Media(video_source.toURI().toString());
    MediaPlayer player = new MediaPlayer(m);
    MediaView viewer = new MediaView(player);

    StackPane root = new StackPane();
    Scene scene = new Scene(root);

    // center video position
    javafx.geometry.Rectangle2D screen = Screen.getPrimary().getVisualBounds();
    viewer.setX((screen.getWidth() - videoPanel.getWidth()) / 2);
    viewer.setY((screen.getHeight() - videoPanel.getHeight()) / 2);

    // resize video based on screen size
    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);

    // add video to stackpane
    root.getChildren().add(viewer);

    VFXPanel.setScene(scene);
    //player.play();
    videoPanel.setLayout(new BorderLayout());
    videoPanel.add(VFXPanel, BorderLayout.CENTER);
}

Une fois la fonction getVideo() créée, je l'ai appelée dans le constructeur du JFrame pour la déclencher au lancement des applications.

 1
Author: Zana Daniel, 2018-08-27 16:15:18