Icecast 2:协议描述,使用C#流式传输

Dan*_*ara 15 .net c# icecast

我需要编写一个Icecast 2客户端,它能够将来自计算机的音频(mp3文件,声卡录音等)传输到服务器.我决定在C#上写这样一个客户端.

两个问题:

1)了解我可能/应该/必须使用的通用指南(最佳实践,可能是技巧)非常有用,以便在C#中无缝地使用流式音频(当然是通过网络流式传输).一些关于TCP/IP流通用的一般技术文档,特别是ICY,关于应用程序整体架构的建议和注释将非常受欢迎.

2)是否有关于Icecast 2流媒体协议的良好文档?我在Icecast的官方网站上找不到那些文档.我不想直接从它的源代码中提取协议描述.如果协议真的很简单,那么有人可以在这里提供它的摘要吗?

Bra*_*rad 28

据我所知,在Icecast源代码之外的任何地方都没有协议规范.这是我从数据包嗅探中发现的:

音频流

该协议类似于HTTP.源客户端将连接到服务器,使用mountpoint发出请求,并传递一些包含有关流的信息的标头:

SOURCE /mp3test ICE/1.0
content-type: audio/mpeg
Authorization: Basic c291cmNlOmhhY2ttZQ==
ice-name: This is my server name
ice-url: http://www.google.com
ice-genre: Rock
ice-bitrate: 128
ice-private: 0
ice-public: 1
ice-description: This is my server description
ice-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2
Run Code Online (Sandbox Code Playgroud)

如果一切正常,服务器会响应:

HTTP/1.0 200 OK
Run Code Online (Sandbox Code Playgroud)

然后源客户端继续发送二进制流数据.请注意,似乎某些编码器200 OK在开始发送流数据之前甚至不等待服务器响应.只是标题,空行,然后流数据.

元数据

使用带外HTTP请求发送元数据.源客户端发送:

GET /admin/metadata?pass=hackme&mode=updinfo&mount=/mp3test&song=Even%20more%20meta%21%21 HTTP/1.0
Authorization: Basic c291cmNlOmhhY2ttZQ==
User-Agent: (Mozilla Compatible)
Run Code Online (Sandbox Code Playgroud)

服务器响应:

HTTP/1.0 200 OK
Content-Type: text/xml
Content-Length: 113

<?xml version="1.0"?>
<iceresponse><message>Metadata update successful</message><return>1</return></iceresponse>
Run Code Online (Sandbox Code Playgroud)

另请注意,音频流和元数据请求都在同一端口上发送.与SHOUTcast不同,这是运行服务器的基本端口.

  • @JonathanC,没有格式......只需发送原始编码音频数据.您甚至可以在流中的任意位置启动. (3认同)

TBR*_*TBR 6

尽管这个问题很老,我还是要在这里发表评论.

Icecast符合HTTP标准.对于侦听器端(简单和简单的HTTP1.0,RFC 1945)来说总是如此,从2.4.0开始,对于源客户端也是如此.

要实现源客户端,它是符合HTTP 1.1 aka RFC2616的PUT请求.某些选项可以通过HTTP标头设置,有关详细信息,请参阅当前的Icecast文档.

如果你发送一种支持的容器格式:Ogg或WebM(技术上是EBML),那么这就是你需要知道的.为清楚起见,这至少涵盖了Opus,Vorbis,Theora和VP8编解码器.

请注意,虽然通常工作正常,但从技术上讲,其他格式不受支持.在这种情况下,Icecast仅通过流而不进行任何处理.

如果您需要帮助或有其他问题,那么官方邮件列表和IRC频道是正确的选择.