Введение процесс интернет-вещания¶
Для организации Интернет вещания необходимо иметь следующие компоненты:
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.
- Клиенты подключаются к серверу по протоколу 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")}}