如何在linux上用javaFX播放视频

如何在linux上用javaFX播放视频,java,linux,video,javafx,javafx-8,Java,Linux,Video,Javafx,Javafx 8,我正在尝试制作一个多平台JAVAFX桌面应用程序,我希望它能播放视频。下面是一个示例代码- import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.M

我正在尝试制作一个多平台JAVAFX桌面应用程序,我希望它能播放视频。下面是一个示例代码-

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
import java.io.File;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        AnchorPane anchorPane = new AnchorPane();
        MediaView mediaview = new MediaView();
        anchorPane.getChildren().addAll(mediaview);
        primaryStage.setTitle("Linux Video Play Test");
        primaryStage.setScene(new Scene(anchorPane, 540, 210));
        primaryStage.show();

        File file=new File("video.flv");
        Media media=new Media(file.toURI().toString());
        MediaPlayer mediaplayer = new MediaPlayer(media);
        mediaview.setMediaPlayer(mediaplayer);
        mediaplayer.play();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
“video.flv”位于同一文件夹中,可以找到编解码器信息

上面的代码在Windows(Win 10、x64、JDK 1.8.92)上运行良好,但在Linux(Ubuntu 16.10、x64、JDK 1.8.112)上出现以下错误:

上面说

E: Unable to locate package glib
libavformat53也有同样的问题。请注意,视频格式限制不是问题,我将向我的应用程序的用户提供视频文件。所以,如果我能做到哪怕是一种格式(比如flv),那就行了,我可以把所有的视频转换成那种格式。另外,我不想让我的最终用户遇到任何麻烦,比如在终端上键入命令等。我打算将应用程序作为“.deb”文件分发,我希望这样,用户只需下载deb文件,单击并安装它(通过ubuntu软件中心等),它就可以工作(在linux上播放视频)。安装后,启动应用程序将首先启动bash脚本,然后启动主jar。我正在考虑两个选择:

1) -指定deb包本身中的所有依赖项(glib、libavformat),以便随应用程序一起安装。但问题是我使用的是ubuntu 16.10,旧版本的libs(glib2.28和libavformat53)在repo中不可用。我可以找到glib2.50和libavformat57,但它们似乎不起作用(或者我做错了什么)。那么,有没有一种方法可以在deb文件中同时指定依赖项和repo,从而使它们易于安装?如果没有,我可能希望用户给root用户一次访问权限,这样我就可以通过bash脚本安装这些lib,当应用程序启动时,这个脚本就会启动,这可能吗

2) -我也在考虑完全抛弃“javafx.scene.media.MediaPlayer”,并使用类似的第三方库。但是这些解决方案看起来都很复杂,所以如果有人能帮我指出正确的方向。此外,这些库中的大多数似乎都在copyleft(GPL3/LGPL3)下,我想保持我的应用程序的封闭源代码。可能吗


Ps:这是我第一次在Stackoverflow上发表文章,如果我有任何错误,请原谅。还有,很抱歉英语不好。:)

Mediaplayer需要libavformat54库及其所需的所有库。我用Debian 9(stretch)试了一下,结果成功了。所需的库大多在Debian7(wheezy)中,少数库仍在Debian9中。您必须手动下载所有不属于发行版的所需库,并使用dpkg进行安装。对于libmp3lame0,我遇到的问题最多,因为您需要纯库,但大多数情况下会找到重新打包的版本。 libavformat54需要libavcodec54和libavutil51_1.0.10。安装这两个库后,可以安装libavformat54。因此,从这两个图书馆开始,看看他们需要什么,并从互联网上获得所需的图书馆。我认为最好的方法是pkgs.org来获取所需的库

sudo apt-get install glib
E: Unable to locate package glib