使用 Objective-C、C 或 C++ 广播到 Icecast / SHOUTcast

2024-01-12

我想在不使用自己的广播公司的情况下向 SHOUTcast 或 Icecast 服务器提供音频数据,因为我将在包括移动设备在内的各种平台上使用它。

我需要协议描述、开源项目或示例,以便能够使用 Objective-C、C 或 C++ 将音频数据(来自麦克风或文件)发送到 SHOUTcast 和 Icecast 服务器。

在哪里可以找到构建正确的 SHOUTcast/Icecast 源客户端所需的信息?


评论:是时候有人为移动设备制作 SHOUTcast 源客户端了。我已经需要这个有一段时间了,但没有时间构建它,所以向你致敬。请在某个时候制作一个 Android 版本。

你应该做的第一件事是下载Wireshark http://www.wireshark.org/download.html.

启动数据包捕获,启动 SHOUTcast 服务器,然后启动源客户端,并将其连接到服务器。请为该协议的简单性做好准备。

主要音频协议

  1. 源客户端通过 TCP 连接到 SHOUTcast。使用基本端口上一级的端口。例如,如果您的基本端口是 8000,您的侦听器将连接到 8000,您将连接到 8001。
  2. 连接后,SHOUTcast 服务器不会说什么。只需发送广播密码,然后发送新的密码CrLf (or \r\n).
  3. 如果密码错误的话会说invalid password或类似的东西。如果它是正确的,你会得到类似这样的信息:

    OK2

    icy-caps:11

    请注意,每行都有CrLf在它之后,并且在发送这两个标头之后,有一对CrLf.

  4. 现在,由源客户端发送一堆标头:icy-name, icy-genre, icy-pub, icy-br, icy-url, icy-irc, icy-icq, icy-aim, content-type。像这样发送它们:

    icy-name:My Awesome Station

    每行后面应该跟着CrLf,并在发送完所有标头后,发送一对CrLf.

  5. 全部完成后,开始发送流数据!无需从任何特定位置启动,只需发送数据即可。由接收端的客户端同步到帧。 SHOUTcast 服务器对于流经它的流量来说是完全“哑”的。如果需要,您可以连接 Telnet 客户端并发送一堆文本。

更新元数据

因此,您可能想知道如何发送下一首曲目的信息以及不发送什么信息。有趣的是,这与发送音频数据的连接完全是带外的。

您所要做的就是向端口库(在我们的示例中为 8000)发出 Web 请求:

http://yourserver:8000/admin.cgi?pass=yourpassword&mode=updinfo&song=your%20song&url=some_url_goes_here_but_hardly_any_clients_use_it

如果难以阅读,这些是参数:

  • pass
  • mode
  • song
  • url

您会注意到,这些相同的参数和其他参数都可以在 SHOUTcast 管理面板中找到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Objective-C、C 或 C++ 广播到 Icecast / SHOUTcast 的相关文章

随机推荐