我想要獲取代碼中提供的URL上的聲音文件並播放它(格式爲mp3
)。我查看了一些與此問題相關的Stack Overflow問題,他們都說我得到了mp3plugin.jar
。無法從輸入流獲取音頻輸入流
在Eclipse中,我在Configure Build Path下將它添加爲一個外部jar(因爲它位於我的Downloads文件夾中,不知道它是否適合它)。我再次運行它,它仍然給我這個錯誤:
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at Starter.main(Starter.java:21)
下面是代碼:
public class Starter {
public static void main(String[] args) {
AudioInputStream din = null;
try {
URL url = new URL("http://c5.rbxcdn.com/2e6d33a5b3b1d8f250c395816ff9f145");
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
InputStream bufferedIn = new BufferedInputStream(httpcon.getInputStream());
AudioInputStream in = AudioSystem.getAudioInputStream(bufferedIn);
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, decodedFormat);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
if(line != null) {
line.open(decodedFormat);
byte[] data = new byte[4096];
// Start
line.start();
int nBytesRead;
while ((nBytesRead = din.read(data, 0, data.length)) != -1) {
line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(din != null) {
try { din.close(); } catch(IOException e) { }
}
}
}
}
你有沒有檢查你正在讀什麼?你可能會把一個html錯誤頁面當作MP3。 – Marged
當我將該網址輸入到我的Chrome瀏覽器時,我在網絡標籤中看到了2行。它可能需要一些更多的標題給你實際的流 – Gavriel
我怎麼會得到這個媒體的一部分? (它說文件和媒體)。我聽說jSoup可以幫助處理java中的一些html處理。 –