Как играть в видео MP4 в приложении Java Swing - PullRequest
0 голосов
/ 27 августа 2018

Кто-нибудь знает, как я могу воспроизвести видеофайл .mp4 в JPanel? Я пробовал JMF с файлом .avi, но безуспешно, и теперь я сбит с толку и расстроен тем, как такая простая задача воспроизведения видеофайла становится такой утомительной.

Кто-нибудь, пожалуйста, пролите немного света на мой путь, и я был бы очень признателен.

Я слышал о VLCJ, но проблема в том, что я не могу гарантировать, что на каждой машине, на которой работает это приложение, будет установлен проигрыватель VLC. Можно ли как-нибудь связать VLC player в папке дистрибутива?

Изначально видео, которое мы используем, было на Vimeo, но оказалось, что встроить его практически невозможно из-за отсутствия поддержки API, и я подумал, что все в порядке, я просто воспроизведу его локально, а теперь даже это становится настолько сложным.

1 Ответ

0 голосов
/ 27 августа 2018

Спасибо @VGR за то, что я привлек внимание к JavaFX, я только что интегрировал JFXPanel в JPanel, где я хотел, чтобы видео было. В моем случае это прекрасно работает, так как это простой экран с одним видео для воспроизведения.

Вот полный фрагмент кода ниже:

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

После создания функции getVideo () я вызвал ее в конструкторе JFrame, чтобы запустить ее при запуске приложений.

...