据我所知,除了 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 不同,这是服务器运行的基本端口。