【发布时间】:2015-08-21 16:55:50
【问题描述】:
我在让 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 的创建上。经过几个冗长的调试会话后,我发现内部生成的异常是 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
【问题讨论】:
-
会不会是我的 libavcodec/libavformat 版本太新了?我有 libavcodec56 和 libavformat56,而JDK8 Certified System Configurations 页面列出了 libavcodec53 和 libavformat53
-
我遇到了完全相同的问题。有没有人想通了?
标签: java linux javafx debian gstreamer