Project

General

Profile

Введение процесс интернет-вещания

Для организации Интернет вещания необходимо иметь следующие компоненты:

1. Источник (программа передающая серверу поток данных, например SimpleCast, ezstream, Джинн);
2. Сервер (программа перенапрявляющая поток данных от источника всем подключившемся к нему пользователем, например Icecast, ShoutCast);
3. Клиент (программа, которая подключается к серверу, принимает поток данных и воспроизводит его, например Winamp)

Организация интернет вещания

1. Устанавливаем сервер, например icecast2. Настраиваем его. Запускаем.

{{Image("icecast1.JPG","nolink")}}

{{Image("icecast2.JPG","nolink")}}

Конфигурация сервера происходит в файле icecast.xml

Чтобы сервер мог связываться с клиентом, ему нужен источник.

2. Устанавливаем программу источник. (у нас источником будет ezstream).

{{Image("ezstream.JPG","nolink")}}

Конфигурация источника происходит в файле ezstream_mp3.xml (!пароль источника должен совпадать с паролем сервера)

Когда соединение с источником установлено, сервер будет передавать данные клиентам, когда они будут подключаться.

3. Подключаемся к серверу с помощью рукописного клиента (так же можно использовать Winamp и т.п.)

{{Image("http_client.JPG","nolink")}}

Слушаем музыку.

Взаимодействие между компонентами

1. Источник создает соединение с портом сервера;
2. Затем источник посылает пароль: password;
3. Если пароль правильный, сервер посылает в ответ: OK2, что информирует источник о том, что сервер авторизовал модуль в качестве источника и готов принимать данные. Если пароль неправильный, сервер отправит в ответ неправильный пароль: password;
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-поток. Ezstream например, читает созданный специально для этого дела плэйлист, выбирает определенный файл и считывая его блоками по 4кб отправляет данные серверу. Как только файл прочитан, выбирается следующий файл, и цикл продолжается, начиная с пункта 4.

  1. Клиенты подключаются к серверу по протоколу http, а в ответ получают заголовок и поток данных (см рисунок HttpLoader.exe), которые начинают считывать и воспроизводить.

Пример собственного клиента:

HttpWebRequest httpRequest = HttpWebRequest.Create("http://localhost:8000/radio");
HttpWebResponse response = httpRequest.GetResponse();
Stream rcvStream = response.GetResponseStream();
byte[] respBytes = new byter4096;
int byteCount = 0;
FileStream stream = new FileStream("C:\\audio.mp3", FileMode.Create, FileAccess.ReadWrite);
try {
do {
byteCount = rcvStream.Read(respBytes, 0, 4096);
stream.Write(respBytes, 0, byteCount);
} while (byteCount > 0);
}
catch (Exception except) {
Console.WriteLine("Exception: " + except.Message);
}
rcvStream.Close();
response.Close();
stream.Close();

Для того, чтобы получать в потоке метаданные, нужно добавить в заголовок запроса строку icy-metadata. Этот тэг указывает на то, что если val = 1, то клиент может обрабатывать названия песен (метаданные), передаваемые в потоке, и, таким образом, сервер будет посылать дополнительную информацию о названии. Если val=0,
то метаданные передаваться не будут.

httpRequest.Headers.Add("icy-metadata", "1");

Передача метаданных в ответе:

Когда клиент сообщает о том, что он может обрабатывать названия, *cast-сервер добавляет следующий тэг заголовка:

!icy-metaint:8192\r\n

который сообщает клиенту, сколько байт данных из потока нужно прочитать, прежде чем начнутся метаданные (в которых и содержится название). Они всегда начинаются в начале потока (а не в заголовке).

После этого клиент считывает один байт, который сообщает ему размер метаданных, деленный на 16, то есть если этот байт равнялся 4, то длина тэга метаданных - 64 байта. Если метаданные не равны в точности 64 байтам (например), Shoutcast помещает пробелы или "\0" в неиспользуемом пространстве.

Система администрирования

Сервер Icecast имеет систему администрирования.

В основном, там можно посмотреть статистику и текущее состояние сервера.

{{Image("icecast_admin.JPG","nolink")}}

Add picture from clipboard (Maximum size: 742 MB)