我有来自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上使用它,到目前为止它能按预期工作。