我有一个来自icecast服务器下载的流,我可以通过执行以下操作来获取标题中的信息:
URLConnection cn = new URL(mediaUrl).openConnection();
cn.connect();
int pos=1;
String x;
String y;
while(cn.getHeaderField(pos)!= null) { X = cn.getHeaderFieldKey(POS); y = cn.getHeaderField(x); Log.e(“:::::”,“”+ x +“:”+ y); POS ++; }
当我这样做时,我收到的所有标题都显示为:
content-type:audio / mpeg 冰冷的:64 ice-audio-info:ice-samplerate = 22050; ice-bitrate = 64; ice-channels = 2 冰冷的:64 冰冷的描述:RadioStation 冰冷的流派:古典,新时代,环境 icy-name:RadioStation示例 icy-private:0 icy-pub:1 icy-url:http://exampleradio.com 服务器:Icecast 2.3.2 cache-control:no-cache
但是如果我在mplayer中打开我的流,我得到:
ICY Info: StreamTitle='artist - album - trackname'
每次更改歌曲时,新的曲目信息都会以相同的方式发送到mplayer。
在android中,当我尝试读取所有返回的icy-info时,返回null。另外,当我从流缓冲时,如何从标题中检索新信息?因为即使我尝试读取我已经知道的东西的标题,同时缓冲如下:
Log.e(getClass().getName()," "+cn.getHeaderField("icy-br"));
我得到的所有内容都是null。
我希望这是有道理的,我可以根据要求发布更多代码。
答案 0 :(得分:1)
我意识到这个问题已经过时了,但对于面临这一挑战的其他人来说,我正在使用这个项目:http://code.google.com/p/streamscraper/来获取来自冰流的信息。我在android上使用它,到目前为止它按预期工作。
答案 1 :(得分:0)
您只需要setDataSource()并将URL作为String传递,然后您必须prepareAsync()和mp.setOnPreparedListener(this);或等等。当MediaPlayer完成缓冲时你会得到注意,然后你需要做的就是mp.start(); P.S。:在销毁应用程序时不要忘记mp.stop,mp.reset和mp.release。 ;)我还在想一种读取ICY信息的方法......我必须制作自己的缓冲机制并编写一个缓冲文件(使用FileDescriptor初始化MediaPlayer)或不时进行单独连接以检查ICY信息标签并关闭连接...任何更好的想法吗?