我在让 JavaFX MediaPlayer 组件在 Debian Jessie 中播放内容(任何容器/编码类型的视频/音频文件)时遇到问题(与其他一些问题一样)。我已经尝试并用尽了该问题的任何潜在解决方案(我安装了 GLIB 2.28,我已将 Java 升级到 u60,我已确保所有编解码器包已安装,包括 libavcodec/libavformat/libavutil/等,我使用的是 gtk2 2.18+)。我不知道还能做什么或尝试什么。我有一个非常简单的应用程序,在 Windows 7 下运行得非常好。
这是一个简单的应用程序:
public class MediaTest extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
Media media = new Media(new File("/path/to/file/test.flv").toURI().toString());
MediaPlayer player = new MediaPlayer(media);
MediaView view = new MediaView(player);
root.setCenter(view);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("For the love of God, please work");
primaryStage.setScene(scene);
primaryStage.show();
player.play();
}
public static void main(String[] args) {
launch(args);
}
}
问题出现在 MediaPlayer 的创建上。经过几次长时间的调试 session 后,我发现内部生成的异常是 MEDIA_UNSUPPORTED 消息的某种排列,无论媒体类型或格式如何,尽管捕获的异常将其列为
MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player!
我已经尝试了几乎所有我能想到的方法。我有一个示例视频文件,它以各种可能的方式进行编码,并且位于无数不同的容器中。什么都不起作用。我有一个以几乎所有可能的方式编码的示例音频文件,具有相同的结果。
我是否能够让 MediaPlayer 在 Debian 上运行?如果是这样,那就太令人失望了。我知道让某些东西在 Windows、Mac 和 Linux 的每个发行版上运行几乎是不可能的,但“一次编写,到处运行”似乎不适用于 Java8。
编辑:我有oracle的java8,而不是openjdk。
<小时/>编辑 2:内部错误似乎来自 gstreamer。 以下是进入 MediaException.getMediaException(Object source, int errorCode, String message) 的参数:
source : com.sun.media.jfxmediaimpl.platform.gstreamer.GSTMedia
errorCode : 265
message : ERROR_MEDIA_AUDIO_FORMAT_UNSUPPORTED
最佳答案
注意显卡驱动程序。例如,在Ubuntu 16.04中,AMD开源显卡驱动似乎不完整,javafx视频似乎不可能。
我让它在这个环境中工作: Ubuntu 14.04,intel 芯片组显卡,oracle jdk 8。 安装了 libavcodec54 和 libavformat54。不行(图形和声音都正常)。我的测试视频:http://www.sample-videos.com/video/flv/720/big_buck_bunny_720p_1mb.flv (容器:MP4/M4a,视频:H.264,声音:MPEG-4 AAC)
关于Debian Linux 中的 JavaFX MediaPlayer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145663/