2011-07-31 39 views
5

我想读取数据流icy protocol.The问题是,我已经尝试过的所有库(dsj,MP3SPI)使用HttpUrlConnection来做到这一点。然而,我已经试过它在我的Windows 7上,已经收到“无效http响应”,这是正常的原因“HTTP 200 OK”与“ICY 200 OK”不同。我知道这可以用套接字来完成,但我是初学者,所以如果有的话可以提供几行代码我可以得到一个想法,我会很感激。如果你有一些解决方案,请分享他们。谢谢,祝你有美好的一天!如何阅读Java中的icy协议?

这是我试过的代码:

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 

对不起想不出指点迷津如何格式化代码或添加新行。

编辑:我包括从下面您的评论的代码..

+0

欢迎新用户的方式:2 downvotes!你认为他会回来并为此做出贡献吗? – SyntaxT3rr0r

+0

既然你们不知道答案我并不感到惊讶。 – aureliangtx

+0

顺便说一句,你现在-1,因为你有两个downvotes和一个upvote:我是给你+1的人。 – SyntaxT3rr0r

回答

3

MP3SPI应该能正常运行于所有系统。

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

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

+0

但tulskiy为什么我从HttpUtlConnection接收到无效的http响应?我在网上看到了使用HttpUrlConnection的代码,但为什么我会收到那个错误呢?所以返回的代码是-1。 – aureliangtx

+0

更新你的问题,包括你的代码,如果你想要一个答案.. – nfechner

+0

@aureliangtx:因为SHOUTCast是不是真正的HTTP,你自己说:它返回ICY 200 OK。 IceCast服务器使用正常的HTTP,而HttpURLCOnnection可以解析它们的头文件,SHOUTCast使用自定义的返回码。使用抽象URLCOnnection而不是HttpUrlConnection。 –

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(); 

这完全为我工作!