用Java播放MP3块?

dyn*_*mic 9 java mp3 stream

可悲的是,Java内部的MP3支持缺乏.我正在开发一个需要接收大块MP3并播放它们的应用程序.我正在使用这样的Jlayer MP3库:

import javazoom.jl.player.Player;
public class MP3 {
    private String filename;
    private Player player; 

    // constructor that takes the name of an MP3 file
    public MP3(String filename) {
        this.filename = filename;
    }

    public void close() { if (player != null) player.close(); }

    // play the MP3 file to the sound card
    public void play() {
        try {
            FileInputStream fis     = new FileInputStream(filename);
            BufferedInputStream bis = new BufferedInputStream(fis);
            player = new Player(bis);
        }
        catch (Exception e) {
            System.out.println("Problem playing file " + filename);
            System.out.println(e);
        }

        player.play();
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是我只有完整MP3文件的块,我需要在它们到达时播放它们.还有更好的选择吗?

编辑

发现了一个有趣的类似问题:MP3不会与JMF一起流式传输 :使用JLayer解码MP3文件

Bil*_*ill 1

创建一个实现 InputStream 的类,并在块到达时接收它们,并将字节提供给播放器。只需确保在每个块请求字节时跟踪您在其中的位置,然后在烧毁该块后丢弃该块并开始提供下一个块的数据。

由于玩家期望处理输入流,因此不会更明智。您可能不需要将其包装在 BufferedInputStream 中,因为您将在类中处理它。