iPhone 从 Icecast 流媒体广播中提取歌曲名

发布于 2024-10-13 06:21:11 字数 72 浏览 6 评论 0原文

我正在寻找从 Ice Cast 流媒体广播中提取歌曲名称。我得到了冰冷的流派、冰冷的名字等等。但不是歌名。我们可以从流中提取它吗?

I am looking to extract the Song name from an ice cast streaming radio. I am getting the icy-genre,icy-name n stuff. but not the song name. Can we extract it from the stream?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤千羽 2024-10-20 06:21:11

根据您的问题,我认为您已经将 Icy-Metadata: 1 添加到您的请求中。

您必须阅读“icy-metaint”响应标头,它将告诉您在流中的每个元数据更新之间要读取的字节数。

以下是伪代码:

byteinterval = int(response.getHeader("icy-metaint"))
stream = response.getBodyStream()
stream.read(byteinterval)
metadata_len = byte(stream.read(1)) * 16
metadata = stream.read(metadata_len)

元数据将如下所示:

StreamTitle='Some Song Name Stream Client Sent';StreamUrl='http://someurl.com/';

不幸的是,对于完整元数据缓冲区的编码或 StreamTitle 的内容,没有绝对的标准。

歌曲名称可能包含也可能不包含专辑名称、艺术家姓名和完整的歌曲名称或其他字段。

元数据缓冲区本身可能是也可能不是 UTF-8。由流客户端决定注入什么。大多数体面的客户端在被迫发送非 ASCII 数据时会使用 UTF-8,但不是全部(它们可能会发送一些本机编码,如 Windows-1521 或 UTF-16)。

如果您想继续获取元数据更新,您可以简单地使用“byteinterval”长度的字节块来获取更多元数据更新,或者稍后断开连接并轮询流。

From your question I presume you already added Icy-Metadata: 1 to you request.

You'll have to read the "icy-metaint" response header, that will tell you how bytes to read between each metadata update in the stream.

The following is pseudocode:

byteinterval = int(response.getHeader("icy-metaint"))
stream = response.getBodyStream()
stream.read(byteinterval)
metadata_len = byte(stream.read(1)) * 16
metadata = stream.read(metadata_len)

The metadata will look something like this:

StreamTitle='Some Song Name Stream Client Sent';StreamUrl='http://someurl.com/';

Unfortunately there's no absolute standard for either encoding of the complete metadata buffer, or the contents of the StreamTitle.

Song name may or may not contain album name, artist name and complete song name or other fields.

The metadata buffer itself may or may not be UTF-8. It's up to the streaming client to decide on what to inject. Most decent clients will use UTF-8 when forced to send non ASCII data, but not all (and they may send some native encoding like Windows-1521 or UTF-16).

If you want to keep getting metadata updates you can simply consume blocks of "byteinterval" length of bytes to get more metadata updates, or disconnect and poll the stream later.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文