小编典典

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

c#

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

两个问题:

1)知道我可能/应该/必须使用的,与C#中的流音频(当然是通过网络流)无缝协作的通用准则(最佳实践,也许是技巧)将非常有用。我们将非常感谢一些通用的技术文档,特别是有关通过TCP
/ IP进行流式传输(尤其是ICY),有关应用程序整体体系结构的建议和注释。

2)是否有关于Icecast
2流协议的良好文档?我在Icecast的官方网站上找不到这些文档。我不想直接从其源代码中提取协议描述。如果该协议确实非常简单和整洁,那么有人可以在此处提供它的摘要吗?


阅读 400

收藏
2020-05-19

共1个答案

小编典典

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

音频流

该协议类似于HTTP。源客户端将连接到服务器,并向安装点发出请求,并传递一些带有有关流信息的标头:

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

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

HTTP/1.0 200 OK

然后,源客户端继续发送二进制流数据。请注意,似乎有些编码器甚至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)

服务器响应:

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>

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

2020-05-19