如何在Java中阅读icy协议?

时间:2011-07-31 08:27:22

标签: java streaming protocols shoutcast

我想从流式icy协议读取数据。问题是我尝试过的所有库(dsj,MP3SPI)都使用HttpUrlConnection来执行此操作。但是我已经在Windows 7和I上尝试过了已收到“无效的http响应”这是正常的原因“HTTP 200 OK”与“ICY 200 OK”不同。我知道这可以通过套接字完成但我是初学者所以如果有任何可以提供几行o代码所以我可以得到一个我会很感激的想法。如果你有一些解决方案,请分享一下。谢谢你们,祝你们度过愉快的一天!

这是我尝试过的代码:

URLConnection connection = new URL("89.47.247.59:8020").openConnection();
InputStream in = connection.getInputStream();
System.out.println("getting lots of bytes");
in.close();

错误是:

Exception in thread "main" java.io.IOException: Invalid Http response
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.jav‌​a:1328)
at javaapplication1.JavaApplication1.main(JavaApplication1.java:46) Java Result: 1

很抱歉无法弄清楚如何格式化代码或添加换行符。

编辑:我在下面的评论中添加了代码..

2 个答案:

答案 0 :(得分:5)

请改为尝试:

URL url=new URL("89.47.247.59:8020");
Socket socket=new Socket(url.getHost(), url.getPort());
OutputStream os=socket.getOutputStream();
String user_agent = "WinampMPEG/5.09";
String req="GET / HTTP/1.0\r\nuser-agent: "+user_agent+"\r\nIcy-MetaData: 1\r\nConnection: keep-alive\r\n\r\n";
os.write(req.getBytes());
is=socket.getInputStream();

这对我很有用!

答案 1 :(得分:3)

MP3SPI应该可以在所有系统上正常运行。

如果要提取ICY元数据,请检查以下代码:https://gist.github.com/1008126有一个IcyInputStream可以打开URL并返回一个可以附加到解码器的常规InputStream,它还可以提取艺术家和曲目标题等元数据。

我使用here中的信息编写了此代码。