如何从shoutcast流中检索元数据时获取新歌曲信息的通知

时间:2011-09-29 06:33:31

标签: android streaming metadata media-player shoutcast

背景 我正在使用双缓冲方法为html shoutcast传输无线电。我使用http://www.smackfu.com/stuff/programming/shoutcast.html

从流中获取元数据信息

问题 我有三个问题 1-我已经使用urlconnection和inputstream来收听广播。我不想打开新连接来检索元数据。但是当我试图从相同的输入流中获取两者时,我再也听不到无线电了。我想这是不可能的,我必须使用两个单独的连接?表现不是很糟糕吗?

2-应用程序启动时,我检索当前歌曲的信息。没问题。但是,如何在歌曲发生变化时获得通知。据说当歌曲改变时,服务器将发送信息。但我正在启动URLconnection,获取输入流,检索元数据并关闭连接。我无法理解我应该如何通知服务器?我应该保持连接打开吗?

3-最后一个问题。在Android 2.2之前,AFAIK渐进式流媒体是不可能的。这对于http来说是真的吗?如果协议是rtsp,我可以在android 2.2之前进行渐进式流式传输吗?有人请说清楚吗?

非常感谢,

2 个答案:

答案 0 :(得分:3)

  1. 您不应该为元数据打开新连接。元数据被集成到MP3流中(所有这些都在您发布的链接中描述)。
  2. 如果您关闭连接,显然您将无法再接收MP3流或元数据。
  3. 请参阅:Streaming Audio from A URL in Android using MediaPlayer?

答案 1 :(得分:2)

你必须记住icy-metaint标题字段中的数字。

从流(您发送到音频解码器)接收到许多字节后,您必须预期元数据部分,并读取此内容(也不会将这些数据发送到音频解码器)。 然后,您再次从流中接收编码音频,并继续在icy-metaint字节后定期读取元数据。

这意味着服务器会定期发送元数据(有关艺术家/歌曲标题的信息),您的代码必须将输入流分割为音频和元数据。