我有来自icecast服务器下载的流,并且可以通过执行以下操作来获取标题中的信息:

 URLConnection cn = new URL(mediaUrl).openConnection();
    cn.connect();

    int pos=1;
    String x;
    String y;


而(cn.getHeaderField(pos)!= null)
        {
   x = cn.getHeaderFieldKey(pos);
   y = cn.getHeaderField(x);
   Log.e(“ :::::”,“” + x +“:” + y);
   pos ++;
        }

当我这样做时,我收到的所有标头都显示为:

内容类型:音频/ mpeg
 冰冷的:64
 ice-audio-info:ice-samplerate = 22050; ice-bitrate = 64; ice-channels = 2
 冰冷的:64
 冰冷描述:RadioStation
 icy-genre:古典,新时代,环境
 icy-name:RadioStation示例
 icy-private:0
 icy-pub:1
 icy-url:http://exampleradio.com
 服务器:Icecast 2.3.2
 缓存控制:无缓存

但是,如果我在mplayer中打开流,则会得到:

 ICY Info: StreamTitle='artist - album - trackname'


每次更改歌曲时,新的曲目信息都会以mplayer的相同方式发送。

在android中,当我尝试读取icy-info时,返回的所有内容均为null。另外,当我从流中缓冲时,我将如何从标头中检索新信息?因为即使我尝试读取的内容的标题我在缓冲时也已经知道,例如:

  Log.e(getClass().getName()," "+cn.getHeaderField("icy-br"));


我返回的所有内容都是null。

我希望这是有道理的,我可以根据要求发布更多代码。

最佳答案

我意识到这个问题已经过时了,但是对于其他面临挑战的人来说,我正在使用以下项目:http://code.google.com/p/streamscraper/从Icecast流中获取跟踪信息。我在android上使用它,到目前为止它能按预期工作。

10-04 13:06