来自icecast服务器的Android流媒体获取跟踪信息

时间:2010-04-28 15:15:15

标签: android audio-streaming shoutcast icecast

我有一个来自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。

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

2 个答案:

答案 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信息标签并关闭连接...任何更好的想法吗?