7

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

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

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

4

2 回答 2

12

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

您应该做的第一件事是下载 Wireshark

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

主要音频协议

  1. 源客户端使用 TCP 连接到 SHOUTcast。使用从基本端口向上的端口一。例如,如果您的基本端口是 8000,那么您的侦听器将连接到 8000,而您将连接到 8001。
  2. 连接后,SHOUTcast 服务器不会说什么。只需发送广播密码,后跟一个新的CrLf(或\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

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

  • 经过
  • 模式
  • 歌曲
  • 网址

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

于 2012-02-11T15:59:47.550 回答
1

我开发了一个可以从设备麦克风 -> android-icecast-broadcast流式传输的示例 android 应用程序以及一个示例 android 应用程序的喊声包装器原生 C 文件。

它从麦克风捕获、编码 pcm 音频。并广播冰服务器。

于 2018-03-09T10:34:38.633 回答