使用Objective-C,C或C ++向Icecast / SHOUTcast广播

时间:2012-02-11 09:04:11

标签: objective-c audio broadcast shoutcast icecast

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

我需要协议描述,开源项目或样本才能使用Objective-C,C或C ++向SHOUTcast和Icecast服务器发送音频数据(从麦克风或文件)。

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

2 个答案:

答案 0 :(得分:12)

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

您应该做的第一件事是download Wireshark

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

主要音频协议

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

    OK2

    icy-caps:11

    请注意,每行后面都有CrLf,在发送这两个标题后,会有一对CrLf

  4. 现在,由源客户端发送一堆标题:icy-nameicy-genreicy-pubicy-br,{{1} },icy-urlicy-ircicy-icqicy-aim。像这样发送:

    content-type

    每一行都应该跟icy-name:My Awesome Station后面,在您发送完所有标题后,发送一对CrLf

  5. 完成所有操作后,开始发送您的流数据!无需在任何特定位置启动,只需发送数据即可。接收端的客户端可以同步到帧。 SHOUTcast服务器对流经它的流量完全“愚蠢”。您可以连接Telnet客户端并根据需要发送大量文本。

  6. 更新元数据

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

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

    CrLf

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

    • 模式
    • URL

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

答案 1 :(得分:0)

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

它是从麦克风捕获,编码pcm音频。并播放冰服务器。