организация вещания потокового аудио в локальной сети
Хотелось бы поделиться своим опытом в установке и настройке сервера потокового аудио IceCast. В нашей локальной сети находится несколько десятков компьютеров. Основная масса – под управлением ОС семейства Windows. Мой рабочий компьютер – полигон для испытания различных сервисов. Однажды после прослушивания потокового аудио через Интернет я задался вопросом, можно ли организовать нечто подобное в масштабе нашей сети. Это ведь здорово — разобраться как работает такой интересный интернет-сервис. Итак, приступим к поискам нужного ПО.
Я использую программу управления пакетами aptitude, но вы вольны воспользоваться любой другой, которую предоставляет ваш любимый дистрибутив. Итак, я направляюсь прямиком в раздел Audio, и что я вижу там? Порядка 300 пакетов для работы с аудио! Трудный выбор. Начинаем просмотр пакетов по порядку. Плееры, синтезаторы, аудиомикшеры, плагины, front-end’ы к различным консольным аудиопрограммам и сами консольные утилиты. Черт как же тяжело сделать выбор между ними – по ходу дела все хочется поставить и попробовать, но не отвлекаемся, а ищем сервер потокового аудио. После моих изысканий нарисовался небольшой списочек. Так-с:
— DarkIce;
— Gnump3d;
— IceCast;
— slimp3.
Вооружаемся словарем и пытаемся понять, что написано в описаниях пакетов.
DarkIce – захватывает аудиопоток из звуковой карты, кодирует в mp3/oggVorbis и посылает серверу потокового аудио IceCast – немного не то. (но тоже может пригодиться).
Gnump3d – сервер, который предоставляет веб-интерфейс к коллекции музыкальных файлов на нашем жестком диске – тоже не то.
Остаются IceCast2 и slimp3 – и это, похоже, то, что нам нужно.
Общий принцип функционирования IceCast можно пояснить следующей упрощенной схемой (см. рис. 1).
Файлы из музыкальной коллекции передаются посредством указания их в плейлисте так называемому streamer’у, в качестве которого предлагаю использовать Ices. Ices кодирует их и посылает серверу потокового аудио IceCast. К серверу IceCast подключаются клиентские машины, с которых возможно прослушивание музыки.
Попробуем разобраться, как настроить IceCast. А что если в лоб?
# icecast
usage: icecast [-h -b -v] -c
options:
-c Specify configuration file
-h Display usage
-v Display version info
-b Run icecast in the background
Ага! Надо указать конфигурационный файл. Пример конфигурационного файла в XML формате, поставляемого с IceCast – icecast_minimal.in. Я немного покромсал этот файл и убрал из него все лишнее.
Рассмотрим его подробнее с пояснениями по ходу дела.
Секция ограничений.
50
Количество одновременно подключенных пользователей. Выставляем желаемое. Сеть небольшая – поставлю-ка я 50.
2
Количество обрабатываемых сервером аудиопотоков. Я хотел бы организовать 2 разных потока аудио, поэтому ставлю 2.
Количество потоков, запускаемых сервером для поддержания соединений с клиентами. В оригинальных комментариях к файлу значение 5 рекомендовано для серверов с малым и средним траффиком. Оставлю 5.
102400
Максимальный размер (в байтах) очереди для клиентов, подключенных к нашему серверу. Оставляем значение по умолчанию.
15
Максимальное время ожидания в секундах для запросов от клиентов. Оставляю без изменений.
10
Если подключенный к серверу аудиопоток не посылает данные 10 секунд, этот аудиопоток удаляется. Оставляем как есть.
Настройка номера TCP-порта. Значение по умолчанию 8000.
192.168.1.229
Привязка к сетевому адресу. Если параметр не указан, используется значение hostname. Поставим для страховки 192.168.1.229.
В этой секции меня заинтересовали некоторые параметры, которые придают нашему серверу профессиональный вид. Здесь задаются специальные параметры для точек монтирования. Пока точка монтирования у нас одна – она описывается далее в файле настроек Ices.
/paradiselost.ogg
Имя точки монтирования.
source
Имя пользователя – оставляем source.
Пароль – в моем случае mypass.
/intro.ogg
Интересный параметр, в котором следует указать имя файла, который должен быть помещен в каталог webroot — в моем случае это каталог /home/kirill/icecastwebroot.
Этот файл будет проигрываться всем новым пользователям, которые подключаются к нашему аудиосерверу. В этот файл я записал свое приветствие слушателям.
/fall.ogg
В этом параметре также указывается имя файла, который должен находиться в каталоге webroot. Этот файл будет проигран клиентам в том случае, если что-то пошло не так и нормальный аудиопоток недоступен. В этот файл лично я записал сообщение “Аудиопоток недоступен – попробуйте присоединиться позже” и добавил свой любимый аудиотрек.
Секция «Пути».
/var/log/icecast
Каталог для записи логов (всегда есть куда глянуть, если что-то пойдет не так).
/home/kirill/icecastwebroot
В этой директиве определяется базовый каталог для статических файлов. Этот каталог может содержать любые файлы. Допустим, мы указали в этой директиве /home/kirill/icecaswebroot. Если теперь в строке браузера указатьhttp://192.168.1.229:8000/mp3/example.mp3,то на компьютер клиента будет загружен файл /home/kirill/icecastwebroot/mp3/example.mp3.
/home/kirill/icecastwebroot/admin
В этой директиве указывается каталог для инструментов администрирования. При инсталляции IceCast устанавливается ряд скриптов в формате XSL для администрирования сервера через веб.
Если поместить эти скрипты (в моем случае) в /home/kirill/icecastwebroot/admin, то в панель веб-администрирования можно будет попасть, набрав в строке браузераhttp://192.168.1.229:8000/admin/.
В этой строке задается имя и путь к так называемому pid-файлу, который создается при старте и удаляется при завершении работы сервера. Файл содержит process ID сервера, который используется для посылки сигналов серверу.
Лог проигрываемых аудиофайлов.
4
Что будет записываться в логи. От 4 — максимум отладочной информации — и до 1 – только ошибки.
Секция «безопасность».
0
Указывает, будет ли использоваться chroot(). Директория, в которую делается chroot, указывается в директиве .
kirill
kirill
Эта директива указывает серверу от чьего имени и группы стартовать. Следует указывать реально существующих пользователей. Я решил не добавлять пользователей, а запускать сервер от своего имени.
Я записываю этот файл в свой домашний каталог под именем mynewicecastconfig. Ну вроде все! Можно попробовать стартовать сервер следующей командой:
#icecast -c /home/kirill/mynewicecastconfig -b
Starting icecast2
Detaching from the console
# Changed groupid to 1000.
Changed userid to 1000.
Опция -b заставляет сервер запуститься в фоновом режиме. Внимательно просмотрите файл на предмет наличия незакрытых тегов, иначе IceCast стартовать не захочет.
Похоже, что все в порядке. В лог-файлах ошибок не наблюдается, в списке процессов появился icecast, nmap показывает, что порт 8000 открыт —
Starting nmap 3.81 (http://www.insecure.org/nmap/) at 2005-10-01 12:57 EEST
Interesting ports on Kirill (192.168.1.229):
(The 1653 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
25/tcp open smtp
.
8000/tcp open http-alt
Nmap finished: 1 IP address (1 host up) scanned in 0.623 seconds
и вводя в строку браузераhttp://192.168.1.229:8000/admin/,мы можем попасть в административный интерфейс.
Итак сервер IceCast настроен – теперь надо заставить его что-нибудь проиграть. Для этого требуется на этот самый сервер послать поток аудиоданных. После недолгих копаний в интернете и в списке пакетов я нашел то, что мне было нужно – Ices. Установка Ices прохоходит стандартным для Linux образом:
./configure
make
make install
Попробуем запустить программу:
#ices2
IceS 2.0.1
(c) Copyright 2001-2004 The IceS Development Team
Michael Smith
Karl Heyes
and others
Usage: "ices config.xml"
Понятно – опять требуется файл конфигурации. Рассмотрим его подробнее.
1
Тут все понятно – запускать ли ices в фоне. Мне как раз это и нужно – ставлю 1.
/var/log/ices
Куда записывать логи.
ices.log
Имя лог файла.
4
Уровень записи отладочных сообщений. 1 — ошибки, 2 — предупреждения, 3 — информация, 4 — отладочные сообщения. Ставлю 4 – потом всегда можно изменить.
0
Установка этого флага в 1 заставляет Ices выводить сообщения в консоль. Не хочу – ставлю 0.
Имя файла для записи PID. Оставлю как есть. Для моих нужд этот файл не потребуется.
My Great Rock Stream
ROCK
IMHO My best music
>http://xxx.xxx.com
В секции metadata описывается мета-информация, передаваемая в IceCast:
— name – имя аудиопотока. С долей самолюбования запишу сюда My Great Rock Stream;
— genre – жанр (ROCK, конечно);
— description – описание аудиопотока;
— url – ссылочка на сайт.
Эта секция отвечает за получение исходных аудиоданных. Есть два варианта:
1) аудиоинформация снимается со звуковой карты;
2) используется плейлист.
Поддерживается два типа плейлистов:
— basic — обыкновенный текстовый файл с именами музыкальных файлов;
— script — используется вывод какого-либо скрипта либо команды, возвращающей имя файла.
Для моих целей подходит значение basic.
playlist
Случайный порядок проигрывания. Поставлю ка я это значение равным 1 для непредсказуемости нашего аудиовещания.
Если файл плейлиста изменился, то воспроизведение начнется с начала. Ставим что хотим. Лично я поставил 0.
Если этот параметр имеет значение 1, то после проигрывания всего плейлиста будет произведен выход из программы. Меня это не устраивает – ставлю 0.
В этой секции можно определить один или несколько аудиопотоков. Эти потоки можно направить в разные точки монтирования на сервер Icecast.
192.168.1.229
Имя хоста на котором запущен сервер IceCast. В моем случае это 192.168.1.229.
Порт на котором работает IceCast.
Пароль для соединения с сервером. Вспоминаем что писали в файле конфигурации IceCast. Я использовал пароль mypass, поэтому его и прописываю.
/paradiselost.ogg
Имя аудиопотока. Используя это имя, клиенты будут прослушивать музыку. Использую /paradiselost.ogg.
2
80
Максимальная длина очереди. Параметр для продвинутых пользователей, к коим я себя не отношу. Оставим по умолчанию.
64000
44100
2
Параметры кодирования. Номинальный битрейт, частота, количество каналов.
Запишем этот файл в /home/kirill/icesconfig.
Ну вот, с файлом конфигурации Ices мы закончили. Теперь стоит задача сформировать плейлист. Это можно сделать различными способами. Я создавал два плейлиста при помощи команд:
# locate *.ogg | grep paradise_lost > /home/kirill/playlist.txt
# locate *.ogg | grep oggs > /home/kirill/all_ogg_files.txt
Первый плейлист – треки исполнителя Paradise Lost, второй – все файлы ogg vorbis из моей музыкальной коллекции.
Уфф!, теперь точно почти все готово – попробуем запустить ices.
#ices2 /home/kirill/icesconfig
Ошибок при запуске ices не последовало. Переходим к тестированию. Запускаем XMMS, жмем Ctrl-L и вводим в строкуhttp://192.168.1.229:8000/paradiselost.ogg.
С замиранием сердца жмем play.
Ура! Проигрывается intro.ogg, а потом из колонок льются мощные аккорды! Получилось! Теперь пробуем соединиться с сервером с других компьютеров – все OK.
Но это еще не все. Я хотел организовать 2 аудиопотока – paradiselost.ogg и all.ogg (для этого я и создавал два разных плейлиста. Сколько я не пытался прописать в файле конфигурации Ices два аудиопотока, мне так это и не удалось. Вернее получилось создавать два одинаковых с разным битрейтом. После поисков в интернет я нашел решение, и очень удивился, почему я до него не дошел сам. Решение следующее – запускать два процесса Ices – и каждому из процессов указывать свой файл конфигурации. После этого все прекрасно заработало. Дело осталось за малым – добавить запуск IceCast и Ices в инициализационные скрипты, либо вручную создать скрипт, который бы проделывал всю работу по запуску IceCast и Ices. Мой скрипт для запуска выглядит следующим образом:
Icecast –c /home/kirill/mynewicecastconfig
Рассматриваемая в статье версия IceCast – 2.3.0.
В качестве streamer-а могут выступать DarkIce, Muse-Streamer и другие программы, найти и настроить которые вам теперь не составит труда (см. также врезку).
Streamer Ices2 на данный момент не поддерживает формат mp3. Так как в моей музыкальной коллекции содержатся только файлы формата Ogg Vorbis, то у меня никаких проблем не возникло. Если Ваша музыкальная коллекция содержит только mp3 файлы то есть 2 пути решения проблемы:
- выбор streamer’а, который поддерживает mp3 (например, Muse Streamer и др.);
- конвертация музыкальной коллекции в формат Ogg Vorbis (можно воспользоваться для этой цели конвертером sox или другой доступной утилитой, коих, надеюсь, в вашем дистрибутиве предостаточно).
Рабочие файлы конфигурации с моими комментариями можно загрузить отсюда:http://sutulo.at.tut.by/icecasconfig.tar.gz.
В статье были использованы материалы сайта www.icecast.org.
Если появились вопросы - пишите мне на sutulo@tut.by.
программы, совместимые с IceCast
Медиаплееры, которые работают с IceCast:
- foobar2000 (mp3 + ogg vorbis), Windows 98/NT/2000/XP,http://www.foobar2000.org;
- winamp 2.x, 5.x (mp3 + ogg vorbis), Windows 98/NT/2000/XP,http://www.winamp.com;
- XMMS(mp3 + ogg vorbis), Unix,http://www.xmms.org;
- Zinf(mp3 + ogg vorbis), Unix/Windows,http://zinf.sourceforge.net;
- Mplayer, Windows 98/NT/2000/XP Unix Mac OSX,http://www.mplayerhq.hu;
- Xine, Unix,http://www.xinehq.de;
- VLC, Windows 98/NT/2000/XP Unix Mac OSX,http://www.videolan.org.
Сетевые решения. Статья была опубликована в номере 10 за 2005 год в рубрике sysadmin