€
$
₴
₽
EN
RU
Vmeste.EU
Лента
Каталог
Файлы
Форумы
Услуги
Основное
Radiotalk
Пользовательское
Общие вопросы по интернет радио вещанию
6 •
Посмотреть все темы
Протокол "источник-Icecast2"
1
8
GPK
@GPK
31.05.2009
Извините, что, зарегистрировавшись, сразу создаю тему.
Интересует протокол взаимодействия источника аудио с сервером айскаст2: "как ему пихать данные?" :-)
Прочел сатью:
Показать текст
Источник-сервер (для нашей задачи взаимодействие “источник-сервер” можно пропустить)
Чтобы сервер мог связываться с клиентом, ему нужен источник. Когда соединение с источником установлено, сервер будет передавать данные клиентам, когда они будут подключаться.
Диалог происходит так (рассмотрим на примере Shoutcast, далее при подробном рассмотрении установления соединения будут описаны особенности и Shoutcast, и Icecast):
1. Источник создает соединение с портом сервера (служебным)
2. Затем источник посылает пароль:
password\r\n
3. Если пароль правильный, сервер посылает в ответ:
OK2\r\n
icy-caps:11\r\n\r\n
что информирует источник о том, что сервер авторизовал dsp-модуль в качестве источника и готов принимать данные. Если пароль неправильный, сервер отправит в ответ неправильный пароль:
password\r\n
4. Если источник получает в ответ OK2, он начинает посылать информацию о потоке серверу. Как правило, в форме:
icy-name:Unnamed
Server\r\n
icy-genre:Unknown
Genre\r\n
icy-pub:1\r\n
icy-br:56\r\n icy-url:http://www.shoutcast.com\r\n
icy-irc:%23shoutcast\r\n
icy-icq:0\r\n icy-aim:N%2FA\r\n
\r\n
Здесь для передачи информации и потоке используются заголовки:
* icy-name – название станции
* icy-genre – музыкальный жанр станции
* icy-pub - указывает допускает ли сервер публикацию себя в публичной директории (1 – да, 0 -нет)
* icy-br – битрейт потока
* icy-url - homepage потока
* icy-irc, icy-icq, icy-aim – контактная информация для публикации в публичной директории
5. Затем источник начинает отправлять mp3-поток.
Написал скрипт на пхп что-то вроде этого:
Показать текст
<?
$fp = fsockopen( '10.25.250.1', 9000, $e1, $e2, 3 );
if( !$fp )
echo "$er1 ($e2)\n";
else{
fwrite( $fp, "пароль\r\n" );
while( !feof( $fp ) )
echo fgets( $fp, 1 );
fclose( $fp );
}
?>
но он ничего не выводит. Сервер - Icecast2.