在 Ubuntu 23.10 上使用 mp3 创建 JavaFX MediaPlayer 时出错

问题描述 投票:0回答:1

以下代码:

public class HelloWorld extends Application {
    @Override
    public void start(Stage primaryStage) {
//        String audioFilePath = "AudioFileWithWavFormat.wav";
        String audioFilePath = "AudioFileWithMp3Format.mp3";

        String url = getClass().getClassLoader().getResource(audioFilePath).toExternalForm();
        Media media = new Media(url);
        MediaPlayer mp3Player = new MediaPlayer(media);
        mp3Player.setOnPlaying(() -> System.out.println("Playback started"));
        mp3Player.play();

        StackPane root = new StackPane();
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

...适用于 .wav,但 .mp3 会导致此错误:

MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
    at javafx.media@21/javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:147)
    at javafx.media@21/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:518)
    at javafx.media@21/javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:421)
    at ca.footeware.javafx.squeaker/ca.footeware.javafx.squeaker.HelloWorld.start(HelloWorld.java:25)
    at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
    at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
    at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
    at javafx.graphics@21/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at javafx.graphics@21/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at javafx.graphics@21/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(GtkApplication.java:263)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player!
    at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:298)
    at javafx.media@21/com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118)
    at javafx.media@21/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:474)


❯ neofetch
            .-/+oossssoo+/-.               craig@notebook 
        `:+ssssssssssssssssss+:`           -------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 23.10 x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: XPS 13 9310 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 6.5.0-14-generic 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 59 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 2388 (dpkg), 55 (flatpak), 17 (snap) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: bash 5.2.15 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 3456x2160 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   DE: GNOME 45.1 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   WM: Mutter 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   WM Theme: Adwaita 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Yaru-sage-dark [GTK2/3] 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/    Icons: Yaru-sage [GTK2/3] 
  +sssssssssdmydMMMMMMMMddddyssssssss+     Terminal: gnome-terminal 
   /ssssssssssshdmNNNNmyNMMMMhssssss/      CPU: 11th Gen Intel i7-1195G7 (8) @ 5.000GHz 
    .ossssssssssssssssssdMMMNysssso.       GPU: Intel TigerLake-LP GT2 [Iris Xe Graphics] 
      -+sssssssssssssssssyyyssss+-         Memory: 6506MiB / 15692MiB 
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-. 

Google 告诉我,这种情况过去已经发生过好几次,但未找到 mp3 编解码器。我已经安装了 ubuntu-restricted-extras、libavcodec60、libavformat60 和 ffmpeg。我可以在 Rhythmbox 和 Audacious 中播放 mp3。

有什么想法吗?

编辑:多一点环境。详情:

❯ java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Ubuntu-223.10)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Ubuntu-223.10, mixed mode, sharing)

https://gluonhq.com/products/javafx/ 下载 v21.0.1 javafx sdk 和模块并提取到主文件夹,然后在 Netbeans 中引用。使用生成模块的 pom 进行构建,然后将运行时 JLink 在一起。不过,当我编写代码时,主要在 Netbeans 中运行。

java linux javafx mp3
1个回答
0
投票

正如 CraigFoote 在评论中指出的那样,现有问题涵盖了您设置上的媒体播放问题。

Ubuntu 23.10 使用 libavcodec60 (https://packages.ubuntu.com/mantic/libavcodec60)。我们需要添加 支持 libavcodec60。

注意:仅添加对基于 ffmpeg 的 libavcodec 的支持。利巴夫 没有 libavcodec60 的版本。

该问题被标记为影响通过 ffmpeg 安装的 JavaFX 21 和 libavcodec 60,它们与您问题中提到的软件版本相同。

该问题已在 JavaFX 22 中修复。JavaFX 22 计划于 3 月 24 日正式发布 (GA)。因此,截至创建此答案之日,JavaFX 开发尚未最终确定。但是,JavaFX 的早期访问版本可用于尝试即将发布的版本的新功能和错误修复。这些可以在这些地方找到:

我建议尝试早期访问版本之一,看看 JDK-8317508 的修复是否已纳入这些版本之一。

使用 JavaFX 版本,对所有 JavaFX 组件使用相同版本。例如,如果您对 JavaFX Media 使用版本

22-ea+16
,请对其他 JavaFX 依赖项使用相同版本。

该问题也已向后移植到 JavaFX

22.0.2
分支,该分支尚未发布(JavaFX 目前最新的稳定版本是
22.0.1
)。

© www.soinside.com 2019 - 2024. All rights reserved.