如何在Java中阅读icy协议?

aur*_*gtx 5 java streaming protocols shoutcast

我想从流式冰冷协议中读取数据.问题是我尝试过的所有库(dsj,MP3SPI)都使用HttpUrlConnection来执行此操作.但是我已经在Windows 7上尝试了它并且我收到了"无效的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();
Run Code Online (Sandbox Code Playgroud)

错误是:

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
Run Code Online (Sandbox Code Playgroud)

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

编辑:我在下面的评论中包含了代码.

小智 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();
Run Code Online (Sandbox Code Playgroud)

这完全适合我!


Den*_*kiy 3

MP3SPI 在所有系统上都应该可以正常工作。

如果您想提取 ICY 元数据,请检查此代码: https: //gist.github.com/1008126有一个 IcyInputStream,可以打开 URL 并返回一个常规 InputStream,您可以将其附加到解码器,并且它还提取元数据,例如 Artist 和曲目标题。

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