遗憾的是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();
}
但我的问题是我只有完整 MP3 文件的块,我需要在它们到达时播放它们。有没有更好的选择?
编辑
发现了一个有趣的类似问题:MP3 不会使用 JMF 流式传输另外:使用 JLayer 解码 MP3 文件
创建一个实现 InputStream 的类,并在块到达时接收它们,但将字节提供给播放器。只需确保在每个块请求字节时跟踪您在每个块中的位置,然后在烧录该块并开始从下一个块提供数据时丢弃该块。
由于玩家希望处理输入流,因此不会更明智。您可能不需要将其包装在 BufferedInputStream 中,因为您将在类中处理它。