如何在 Java Swing 应用程序中播放 MP4 视频

Zan*_*iel 4 java video mp4 jpanel jframe

有谁知道我可以在 JPanel 中播放 .mp4 视频文件的任何方法?我曾尝试使用 .avi 文件使用 JMF,但没有成功,现在我对播放视频文件这样简单的任务变得如此乏味感到困惑和沮丧。

任何人都请阐明我可以走的道路,我将不胜感激。

我听说过 VLCJ,但问题是我不能保证每台运行这个应用程序的机器都会安装 VLC 播放器。有没有办法可以在分发文件夹中捆绑 VLC 播放器?

最初,我们使用的视频是在 Vimeo 上的,但事实证明,由于缺乏 API 支持,实际上不可能嵌入它,我想可以,我只会在本地播放,但现在甚至变得如此困难。

Zan*_*iel 5

感谢 @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);
}
Run Code Online (Sandbox Code Playgroud)

创建 getVideo() 函数后,我在 JFrame 的构造函数中调用它以在应用程序启动时触发它。