【问题标题】:Playing MP3 in chunks with Java?用 Java 分块播放 MP3?
【发布时间】:2014-02-10 14:14:17
【问题描述】:

遗憾的是,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

【问题讨论】:

标签: java stream mp3


【解决方案1】:

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

既然播放器希望处理一个 InputStream,那就再聪明不过了。您可能不需要将其包装在 BufferedInputStream 中,因为您将在课堂上处理它。

【讨论】:

  • 能否在您的答案中添加代码演示?
  • @avidProgrammer 并非没有关于如何提供数据的更多信息。
  • 在我的例子中,数据被连续写入一个临时文件,播放器从该文件作为输入流播放。这是我问过同样问题的一个问题stackoverflow.com/questions/35157247/…
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2012-08-30
相关资源
最近更新 更多