Насколько я знаю, спецификации протоколов нет нигде, кроме исходного кода 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, это базовый порт, на котором работает сервер.