MediaPlayer 是否只播放比特率模式为可变的 mp3 文件?

Does MediaPlayer only play mp3 files that have bit rate mode: variable?

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

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

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

虽然我认为没有必要,因为我的所有其他歌曲都有效,但我将 post 下面的一些代码。

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

MediaHandler Class:

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();
    }
}

is there a way to find an audio files Bit Rate Mode using java?

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

MediaInfo macOS version, then call the command line or get the "glue" between Java and MediaInfo + implement Java calls to MediaInfo获取命令行界面或DyLib界面。