我想在不使用自己的广播公司的情况下将音频数据提供到 SHOUTcast 或 Icecast 服务器,因为我将在包括移动设备在内的各种平台上使用它。
我需要协议描述、开源项目或示例,以便能够使用 Objective-C、C 或 C++ 将音频数据(来自麦克风或文件)发送到 SHOUTcast 和 Icecast 服务器。
我在哪里可以找到构建适当的 SHOUTcast/Icecast 源客户端所需的信息?
我想在不使用自己的广播公司的情况下将音频数据提供到 SHOUTcast 或 Icecast 服务器,因为我将在包括移动设备在内的各种平台上使用它。
我需要协议描述、开源项目或示例,以便能够使用 Objective-C、C 或 C++ 将音频数据(来自麦克风或文件)发送到 SHOUTcast 和 Icecast 服务器。
我在哪里可以找到构建适当的 SHOUTcast/Icecast 源客户端所需的信息?
评论:是时候有人为移动设备制作 SHOUTcast 源客户端了。我已经需要这个有一段时间了,但没有时间构建它,所以向你致敬。请在某个时候制作一个 Android 版本。
您应该做的第一件事是下载 Wireshark。
启动数据包捕获,启动 SHOUTcast 服务器,然后启动源客户端,并将其连接到服务器。为这个协议的可怕简单性做好准备。
CrLf
(或\r\n
)。如果密码错误,它会说invalid password
或类似的东西。如果它是正确的,你会得到这样的东西:
OK2
icy-caps:11
请注意,每一行CrLf
后面都有,并且在发送这两个标头之后,还有一对CrLf
.
现在,由源客户端发送一堆标头: 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
.
完成这一切后,开始发送您的流数据!无需从任何特定位置开始,只需发送数据即可。由接收端的客户端同步到帧。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 管理面板中找到。
我开发了一个可以从设备麦克风 -> android-icecast-broadcast流式传输的示例 android 应用程序以及一个示例 android 应用程序的喊声包装器原生 C 文件。
它从麦克风捕获、编码 pcm 音频。并广播冰服务器。