【问题标题】:How to read icy protocol in Java ?如何在 Java 中读取 icy 协议?
【发布时间】:2011-07-31 08:27:21
【问题描述】:

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

这是我尝试过的代码:

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 票反对!你认为他会回来为 SO 做出贡献吗?
  • 好吧,既然你们不知道答案,我并不感到惊讶。
  • 顺便说一句,您目前的评分为 -1,因为您有两个反对票和一个赞成票:我是给您 +1 的人。

标签: java streaming protocols shoutcast


【解决方案1】:

试试这个:

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

这对我来说非常有用!

【讨论】:

    【解决方案2】:

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

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

    我使用来自here 的信息编写了这段代码。

    【讨论】:

    • 但是 tulskiy 为什么我从 HttpUtlConnection 收到无效的 http 响应?我在网上看到了使用 HttpUrlConnection 的代码,但是为什么我会收到那个错误呢?所以返回的代码是 -1。
    • @aureliantx:因为 SHOUTCast 不是真正的 HTTP,你自己说的:它返回 ICY 200 OK。 IceCast 服务器使用普通的 HTTP 和 HttpURLCONnection 可以解析它们的头部,SHOUTCast 使用自定义的返回码。使用抽象 URLCONnection 而不是 HttpUrlConnection。
    • 这是我试过的代码: URLConnection connection = new URL("89.47.247.59:8020").openConnection(); InputStream in = connection.getInputStream(); System.out.println("getting lots of bytes" ); in.close(); .错误是:线程“main”中的异常 java.io.IOException:sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1328) 处的 Http 响应无效javaapplication1.JavaApplication1.main(JavaApplication1.java:46) Java Result: 1 .抱歉无法弄清楚如何格式化代码或添加换行符。
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2021-04-22
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2012-10-07
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多