我正在使用Matt Gallagher's AudioStreamer通过HTTP播放MP3。我需要知道歌曲的持续时间和ID3标签。
是否可以在AudioStreamer中实现它,以及如何实现?
答案 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