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

Ray*_*and 8 audio shoutcast objective-c broadcast icecast

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

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

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

Bra*_*rad 12

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

你应该做的第一件事是下载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-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客户端并根据需要发送一堆文本.

更新元数据

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

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

http://yourserver:8000/admin.cgi?pass=yourpassword&mode=updinfo&song=your%20song&url=some_url_goes_here_but_hardly_any_clients_use_it
Run Code Online (Sandbox Code Playgroud)

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

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

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