使用AudioStreamer获取MP3 ID3元数据和歌曲持续时间

时间:2009-10-11 12:48:49

标签: iphone iphone-sdk-3.0

我正在使用Matt Gallagher's AudioStreamer通过HTTP播放MP3。我需要知道歌曲的持续时间和ID3标签。

是否可以在AudioStreamer中实现它,以及如何实现?

2 个答案:

答案 0 :(得分:2)

来自他的Docs

  

范围有限

   应该有一点   在我继续之前澄清:这个   class用于流式传输音频。   通过流媒体,我不仅仅意味着“一个   通过HTTP传输的音频文件“。   相反,我的意思是连续的HTTP   没有结束的源继续   无限期地(就像一个广播电台,   不是一首歌。)

这似乎意味着持续时间可能会很艰难。

以下是获取ID3v2标签的方法:

  

获取元数据

   最简单的来源   元数据来自HTTP标头。   在 - 的里面   handleReadFromStream:事件类型:   方法,使用CFReadStreamCopyProperty   复制   kCFStreamPropertyHTTPResponseHeader   来自CFReadStreamRef的属性,   然后你可以使用   CFHTTPMessageCopyAllHeaderFields到   将标题字段复制出来   响应。对于许多流媒体音频   服务器,流名称是其中之一   这些领域。

     

相当难的来源   元数据是ID3标签。 ID3v1是   总是在文件的末尾(所以   流媒体时无用)。 ID3v2是   位于开头可能更多   访问。

     

我从来没有读过ID3标签,但是我   怀疑如果你缓存第一个   几百千字节的文件   在加载的某个地方,打开缓存   使用AudioFileOpenWithCallbacks和   然后读取kAudioFilePropertyID3Tag   您可以使用AudioFileGetProperty   能够读取ID3数据(如果它   存在)。就像我说的那样:我   从来没有真正这样做,所以我不这样做   确定它会起作用。

答案 1 :(得分:1)

MP3流分为“帧”,这是单个数据单元。有些流确实每隔几帧添加一个ID3元数据块,理论上你可以扫描和读取它。

有关详细信息,请参阅此处:http://jicyshout.sourceforge.net/oreilly-article/java-streaming-mp3-pt2/java-streaming-mp3-pt2.html