我正在开发一个Swing无线电项目,用户在其中输入一个URL,我的Java程序将从给定的链接中获取实时音频并为用户实时播放。问题是用户可能输入可能没有格式化为.mp3 / .wav / .aiff文件的实时无线电URL,它可能只是一个通过在线媒体播放器播放时播放音频的网站链接,例如和BBC Radio One一样(http://www.bbc.co.uk/radio/player/bbc_radio_one)。
我尝试过Java Sound API,但它只支持定向到音乐文件的网址(例如foo.com/bar.wav/)。声音API不支持http://www.bbc.co.uk/radio/player/bbc_radio_one等网址,因为它们不是音频文件。如果你要去BBC Radio One链接,你会发现它会自动开始播放现场音频。那个现场音频是我想在我的Java程序中播放的。
在StackOverflow上,我找到了与我有类似问题的人,但他们使用的是.mp3 / .wav / .aiff / etc网址,这很好,但对我不起作用。
我还在Program Creek上找到了一个页面,其中显示了多种通过网址播放音频的方法。我曾试图在那里使用许多示例,但由于我的URL格式或流错误,它们都不会起作用。例如,我稍微修改了其中一个方法(来自Program Creek上的示例4):
/**
* Plays the audio file specified in the 'url' parameter.
* @param url URL for Audio Loading
*/
public void play(final String url) {
try {
InputStream in = getClass().getResourceAsStream(url);
InputStream buf = new BufferedInputStream(in);
AudioInputStream ain = AudioSystem.getAudioInputStream(buf);
AudioFormat format = ain.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(ain);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
当我提供BBC Radio One网址(here)时,我会收到以下错误(http://www.bbc.co.uk/radio/player/bbc_radio_one)。
有什么方法可以摆脱这个IOException错误,或使用非音频文件URL以不同的方式接收实时音频流?你能引导我走上正确的道路来解决这个问题吗?
感谢。