遗憾的是,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 won't stream with JMF 另外:Decoding MP3 files with JLayer
答案 0 :(得分:1)
创建一个实现InputStream的类,并在它们到达时接收块,但将字节提供给播放器。只需确保在请求字节时跟踪每个块中的位置,然后在烧掉它时丢弃块并开始提供下一个块中的数据。
由于玩家希望处理一个InputStream,因此它不会更明智。你可能不需要将它包装在BufferedInputStream中,因为你将在你的类中处理它。