代码之家  ›  专栏  ›  技术社区  ›  stealthcopter

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

  •  1
  • stealthcopter  · 技术社区  · 16 年前

    我有一个来自Icecast服务器的流正在下载,我可以通过执行以下操作获取头中的信息:

     URLConnection cn = new URL(mediaUrl).openConnection();   
        cn.connect();   
    
        int pos=1;
        String x;
        String y;
    

    同时(cn.getheaderfield(pos)!=空) { x=cn.getHeaderFieldkey(位置); y=cn.getheaderfield(x); log.e(“::::::”,“+x+”:“+y”); POS ++; }

    当我执行此操作时,收到的所有头都显示为:

    内容类型:音频/MPEG 冰br:64 冰音频信息:冰采样率=22050;冰比特率=64;冰通道=2 冰br:64 冰的描述:无线电台 冰冷的风格:古典、新时代、环境 冰名:无线电台示例 冰封私密:0 冰镇酒吧:1 结冰网址: http://exampleradio.com 服务器:Icecast 2.3.2 缓存控制:无缓存

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

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

    并且每次改变歌曲时,新的曲目信息都以同样的方式发送到mplayer中。

    在Android系统中,当我试图读取结冰信息时,我得到的所有返回都是空的。另外,当我从流中进行缓冲时,如何从头中检索新信息?因为即使我试图读取我已经知道的内容的标题,同时缓冲,例如:

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

    我得到的只是空的。

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   whiskeyjoe    14 年前

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

        2
  •  0
  •   iganev    15 年前

    您只需要setdatasource()并将url作为字符串传递,然后您必须准备好同步()并使用mp.setonPreparedListener(this);等等。当MediaPlayer完成缓冲时,您会注意到,然后您所要做的就是mp.start();p.s.:不要忘记mp.stop、mp.reset和mp.release销毁应用程序时。;)我还在想一种方法来读取冰冷的信息……我必须建立我自己的缓冲机制,并写一个缓冲文件(初始化带有文件描述符的MediaPlayer),或者不时地建立一个单独的连接来检查结冰的信息标签并关闭连接…有更好的主意吗?