首页 > 解决方案 > MediaPlayer 是否仅播放具有比特率模式的 mp3 文件:变量?

问题描述

我正在构建一个 mp3 播放器应用程序,某些 mp3 文件无法播放。每次播放时都是相同的 mp3 文件。没有错误被抛出,当我点击播放它们时,一切正常,就好像音频即将播放一样,但是没有音频出来,就像歌曲冻结一样。

使用 MediaInfo 工具(来自 mac 应用商店),我比较了 2 个有效的文件和 2 个无效的文件,并对结果进行了截图。(红色表示字段值不同,黑色表示相同)

比较 2 个有效的文件和 2 个无效的文件

左边的 2 是有效的,右边的 2 是无效的。我能看到的唯一区别是导致问题的歌曲具有比特率模式:恒定。这可能是导致问题的原因吗?如果是这样,有没有办法使用java找到音频文件比特率模式?以及如何将其从常量更改为变量?

尽管我认为没有必要,因为我所有其他歌曲都可以,但我将在下面发布一些代码。

String songPath = "";
Media mediaFile = MediaHandler.strToMedia(songPath);
MediaHandler.newSong(mediaFile);
MediaHandler.playSong();

MediaHandler 类:

public class MediaHandler {

    private static MediaPlayer player;
    private static Media media;


    public static MediaPlayer getPlayer(){
        return player;
    }

    public static Media strToMedia(String songPath) {
        File song = new File(songPath);
        return new Media(song.toURI().toString());
    }

    public static void newSong(Media mediaFile) {
        if (player != null){
            player.stop();
        }
        MediaHandler.media = mediaFile;
        newPlayer();
    }

    private static void newPlayer() {
       player = new MediaPlayer(media);
    }

    public static void playSong() {
        player.play();
    }
}

标签: javajavafxmediabitratemediainfo

解决方案


有没有办法使用java找到音频文件比特率模式?

您可以使用MediaInfo图形界面来发现问题,也可以使用其命令行界面(从 Java 调用命令行)或其库 (DyLib) 界面(从 Java 调用 API)。

从MediaInfo macOS 版本中获取命令行接口或 DyLib 接口,然后调用命令行或获取 Java 和 MediaInfo 之间的“胶水” +实现对 MediaInfo 的 Java 调用


推荐阅读