javafx - 无法通过 javafx 2.2 媒体播放器播放 mp3 文件

标签 javafx mp3

我正在开发我认为应该是使用 javafx 媒体播放器的简单任务,它将播放存储在本地硬盘驱动器上的 mp3 文件,在用户默认音乐文件夹路径中(使用 Fedora)。我可以从命令行正常播放所有 mp3 文件,但是当我尝试通过 javafx.scene.media 库播放时,javafx 一直告诉我 mp3 是一种受支持的媒体类型。我已经下载了我能找到的每个图书馆,但都无济于事。这是实际尝试打开文件并播放媒体的代码:

第一次尝试:

 public void playTrack( String audioFileName ) {
    System.out.println("going to play the file "+audioFileName);
    String filename = System.getProperty("user.home")+"/"+audioFileName;
    File audioFile = new File( filename);
    Media audioFileStream= null;
    try {
        audioFileStream = new Media(audioFile.toURI().toURL().toString());
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    MediaPlayer mediaPlayer = new MediaPlayer(audioFileStream);
    mediaPlayer.play();
}

方法二:
public void playTrack( String audioFileName ) {
    System.out.println("going to play the file "+audioFileName);
    String source = new File(System.getProperty("user.home")+"/"+audioFileName).toURI().toString();
    //String source = new File("07-Basket-Case.mp3").toURI().toString();
    System.out.println("going to play "+source);
    Media media = null;
    media = new Media(source);
    MediaPlayer mediaPlayer = new MediaPlayer(media);
    mediaPlayer.play();
}

两者都会产生完全相同的错误结果,如下所示:

播放文件:/home/cpeddie/workspace/parnassusfx/07-Basket-Case.mp3
线程“JavaFX 应用程序线程”中的异常 MediaException:MEDIA_UNSUPPORTED:com.sun.media.jfxmedia.MediaException:“不支持错误媒体音频格式”:com.sun.media.jfxmedia.MediaException:“不支持错误媒体音频格式”
在 javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:125)
在 javafx.scene.media.MediaPlayer.init(MediaPlayer.java:474)
在 javafx.scene.media.MediaPlayer.(MediaPlayer.java:383)
在 com.promptu.parnassusfx.sample.music.MusicController.playTrack(MusicController.java:218)
在 com.promptu.parnassusfx.sample.music.MusicController$3$1$1.handle(MusicController.java:357)
在 com.promptu.parnassusfx.sample.music.MusicController$3$1$1.handle(MusicController.java:1)
在 com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
在 com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
在 com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
在 javafx.event.Event.fireEvent(Event.java:171)
在 javafx.scene.Node.fireEvent(Node.java:6867)
在 javafx.scene.control.Button.fire(Button.java:179)
在 com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
在 com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
在 com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
在 com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
在 com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
在 com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
在 com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
在 javafx.event.Event.fireEvent(Event.java:171)
在 javafx.scene.Scene$MouseHandler.process(Scene.java:3311)
在 javafx.scene.Scene$MouseHandler.process(Scene.java:3151)
在 javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3106)
在 javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
在 javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2248)
在 com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
在 com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
在 java.security.AccessController.doPrivileged(Native Method)
在 com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
在 com.sun.glass.ui.View.handleMouseEvent(View.java:530)
在 com.sun.glass.ui.View.notifyMouse(View.java:924)
在 com.sun.glass.ui.gtk.GtkApplication._runLoop( native 方法)
在 com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:89)
在 java.lang.Thread.run(Thread.java:724)
引起:com.sun.media.jfxmedia.MediaException:“不支持错误媒体音频格式”
在 com.sun.media.jfxmediaimpl.MediaUtils.nativeError(MediaUtils.java:331)
在 com.sun.media.jfxmediaimpl.platform.gstreamer.GSTMedia.init(GSTMedia.java:50)
在 com.sun.media.jfxmediaimpl.platform.gstreamer.GSTMedia.(GSTMedia.java:33)
在 com.sun.media.jfxmediaimpl.platform.gstreamer.GSTMediaPlayer.(GSTMediaPlayer.java:39)
在 com.sun.media.jfxmediaimpl.platform.gstreamer.GSTPlatform.prerollMediaPlayer(GSTPlatform.java:100)
在 com.sun.media.jfxmediaimpl.platform.PlatformManager.createMediaPlayer(PlatformManager.java:173)
在 com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:260)
在 com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:139)
在 javafx.scene.media.MediaPlayer.init(MediaPlayer.java:431)
... 75 更多

我还应该提到,我正在使用在装有 OS 10.8.5 的 MacBook Pro 上运行的 VMWare fusion 来开发它。运行 Fedora 19。

任何帮助将被赞赏!

最佳答案

花了大约一天半的时间才弄明白,但需要安装以下软件包:

dirac-libs-1.0.2-9.fc18.i686.rpm

libavcodec52-0.7.15-32.fc18.i686.rpm

libavformat52-0.7.15-32.fc18.i686.rpm

libavutil50-0.7.15-32.fc18.i686.rpm

libxavs1-0.1.51-2.fc18.i686.rpm

一旦安装了这些,javafx 就会像魅力一样播放音乐。

关于javafx - 无法通过 javafx 2.2 媒体播放器播放 mp3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549902/

相关文章:

compression - 如何使用sox压缩mp3?

java - 为另一个类(视为组件)的对象内部的组件创建 Action 事件到在javaFx中创建对象的类中?

javafx - Tornadofx Javafx - 如何重新加载 View /组件

javascript - .mp3大小与.wav大小相比如何?

python - 如何将WMA文件合并到mp3(带有标题编辑)?

java - 如何使用 FMJ 播放 mp3?

java - 如何一次将多个对象添加到网格 Pane

java - 有没有办法在 Controller 中初始化变量并在 FXML 中使用它?

java - 如何修复maven中的 "package javafx.util does not exist"

python - 如何在 Python 中唯一标识媒体文件的内容,而不是元数据?