【问题标题】:Android streaming from icecast server get track information从icecast服务器Android流式传输获取曲目信息
【发布时间】:2011-02-13 10:00:53
【问题描述】:

我从 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); 正++; }

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

内容类型:音频/mpeg 冰冷的 : 64 冰音频信息:冰采样率=22050;冰比特率=64;冰通道=2 冰冷的 : 64 冰冷的描述:RadioStation 冰冷类型:古典、新时代、环境 冰冷名称:RadioStation 示例 冰冷的私人:0 冰酒吧:1 冰冷的网址: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"));

我得到的都是空的。

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

【问题讨论】:

    标签: android audio-streaming shoutcast icecast


    【解决方案1】:

    您只需要 setDataSource() 并将 URL 作为字符串传递,然后您必须 prepareAsync() 和 mp.setOnPreparedListener(this);等等。当 MediaPlayer 完成缓冲时你会注意到,那么你需要做的就是 mp.start(); P.S.:在销毁应用程序时不要忘记 mp.stop、mp.reset 和 mp.release。 ;) 我仍在考虑读取 ICY 信息的方法...我必须创建自己的缓冲机制并编写缓冲文件(使用 FileDescriptor 初始化 MediaPlayer)或不时建立单独的连接以检查ICY 信息标签并关闭连接...有更好的想法吗?

    【讨论】:

    • MediaPlayer 不支持或至少不支持我使用的流。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2014-11-15
      • 2013-07-23
      • 2019-06-02
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2011-05-20
      相关资源
      最近更新 更多