Организация сервера потокового вещания SHOUTcast в Linux

ShoutCast Server
ShoutCast Server

SHOUTcast — продукт от компании Nullsoft, позволяющий создавать потоковый аудиосервер (audio streaming server) для трансляции музыкальных файлов (MP3) и других аудиосигналов посредством интернета. Помимо самого аудиосервера разработчиками представлены и так называемые Broadcasting tools. Все программное обеспечение является бесплатным, но распространяется с закрытым кодом (в виде исполняемых файлов).

SHOUTcast server — самое ядро создаваемой потоковой аудиосистемы — работает под операционными системами Windows, Mac OS X, FreeBSD, Linux и Solaris. Скачать его последнюю версию можно на сайте SHOUTcast.

SHOUTcast Linux server (glibc) v1.9.8 [DOWNLOAD] This SHOUTcast server runs on Linux, and is an elf binary compiled with glibc6. SHOUTcast no longer supports older Linux kernels running libc5 or glibc

После того как скачается:

 $ tar xzvf sc_serv_1.9.8_Linux.tar.gz

В появившемся каталоге sc_serv_1.9.8_Linux расположен конфиг сервера SHOUTcast (sc_serv.conf).

Правим конфигурацию сервера:

; Максимальное количество пользователей, которые могут одновременно
; находится на сервере.
MaxUser=32

; Пароль для broadcasting-программ. Подробнее см. ниже. Это поле не может
; быть пустым.
Password=mypassword

; Порт аудиосервера.
PortBase=8000

; Файл, куда будут записываться все логи сервера.
LogFile=sc_serv.log

; Отображение статусной строки, которая будет ежесекундно обновляться и
; показывать последнюю информацию о сервере.
RealTime=0

; Вывод логируемых сообщений на экран. Полезно отключить, если сервер
; работает в фоновом режиме.
ScreenLog=0

; Количество песен, отображаемых в списке на www-странице /played.html
; (последние проигранные на сервере). Принимает значения от 1 до 20.
ShowLastSongs=10

; TchLog определяет, должен ли DNAS-лог записывать подключения
; yp.shoutcast.com к серверу.
TchLog=yes

; Не учитывать посещения www-странички.
WebLog=no

; Включение W3C-логирования. Информацию этого лога можно просматривать
; с помощью, например, Analog или WebTrends.
W3CEnable=Yes

; Название файла с W3C-логами.
W3CLog=sc_w3c.log

; Определяет IP допущенных к вещанию источников аудио потока… В нашем случае
; аудиосигнал на сервер будет подаваться с нашей локальной машины.
SrcIP=127.0.0.1

; Определяет IP допущенных к серверу слушателей.
DestIP=ANY

; Порт для подключения к yp.shoutcast.com. Менять, только если стоит proxy-сервер.
Yport=80

; Не смотреть DNS-имя у подключающихся к серверу.
NameLookups=0

; Дополнительные настройки, нужные, если сервер будет пересылать получаемый
; аудиопоток на другой.
; RelayPort=8000
; RelayServer=192.168.1.10

; Пароль для администрирования через Web-интерфейс. Подробнее см. ниже.
AdminPassword=mywebadminpassword

; Отключать слушателей, если источник аудиопотока отсоединяется.
AutoDumpUsers=1

; Время в секундах, которое источник аудиопотока может молчать (idle).
AutoDumpSourceTime=10

; Директория на жестком диске, где расположены стандартные аудиофайлы.
; См. следующие переменные.
ContentDir=./content

; MP3-файл, который будут слышать только подключившиеся к аудиосерверу
; пользователи. Во избежание глюков строго рекомендуется, чтобы параметры
; файла соответствовали качеству вещания. (%d определяет текущий bitrate.)
; IntroFile=intro%d.mp3

; MP3-файл, который будут слышать подключившиеся пользователи, если источник
; аудиопотока отключится. Уместны те же примечания, что и для IntroFile.
; AutoDumpUsers должен быть равен нулю.

; BackupFile=C:intro%d.mp3

; Формат строки, отображаемый в клиентах пользователях во время прослушивания
; радио. %s определяет строку, которая берется у источника аудиопотока.
TitleFormat=MyRadio: %s

; Формат строки, посылаемого слушателю URL'а.
; URLFormat=http://www.server.com/redirect.cgi?url=%s

; Является ли сервер публичным? Принимает значения always, never и default
; (для последнего информация берется у источника).
PublicServer=default

; Другие серверы не могут пересылать свой сигнал через этот.
AllowRelay=No

; Этот сервер не подлежит публикации в каталоге SHOUTcast.
AllowPublicRelay=No

; Частота отсылаемых данных (в байтах). Рекомендуется оставить значение
; по умолчанию (32768).
MetaInterval=32768

; Максимальное время (в минутах), которое слушатель может находится на сервере.
; Если не определено, то ограничений нет.
; ListenerTimer=600

; Текстовый файл, используемый для работы с забаненными пользователями.
; (Автоматически создается Web-интерфейсом.)
; BanFile=sc_serv.ban

; Текстовый файл, используемый для работы со списком клиентских IP-адресов,
; которые всегда могут подключиться к серверу.
; RipFile=sc_serv.rip

; Если включить, то к серверу смогут подключаться только клиенты с IP-адресами
; из файла RipFile.
; RIPOnly=No

; Подключение дополнительного общего конфига.
; Include=/usr/local/shoutcast/common.conf

; Следующие опции нужны для ускорения работы сервера. Менять их не рекомендуется.

; Количество процессоров.
; CpuCount=1

; Время "сна" процессора (в мс) в промежутках между отправлением данных
; пользователям. Значение по умолчанию (833) оптимально для 128kbps.
; Sleep=833

; Удаление некоторых лишних пробелов и строк в выводе XML.
; CleanXML=No

Исполняемый файл для запуска самого сервера — sc_serv. Вызывается он с одним параметром, указывающим на путь к конфигу:

 $ ./sc_serv sc_serv.conf

Все готово. Сервер должен запуститься без проблем.

Тестируем: http://localhost:8000

Часть2. sc_trans.

После того, как начнет работу сервер, нужно, направить ему аудиопоток. Для этого и нужны broadcasting-утилиты. На сайте SHOUTcast представлены родные программы:

Download the SHOUTcast DSP Plug-In for Mac OS X, Linux and FreeBSD
This archive is for advanced users who wish to source content on their Mac OS X, Linux or FreeBSD servers and feed the audio into a SHOUTcast DNAS instead of using Windows. The Linux version permits input from a soundcard in addition to MP3 files on disk. Please refer to the example .conf file included with the archive for more information on using this beta unsupported method of broadcasting.
To download these tools, please click here. [filesize — 226k] Instructions are included with the installer.

После того как скачается:

 $ tar xzvf sc_trans_posix_040.tgz

И в появившемся каталоге sc_trans_040 расположен конфиг для вещания на SHOUTcast-сервере (sc_trans.conf). Таким образом и будет создан вышеупомянутый «источник аудиопотока».

Правим его конфигурацию:

; Файл со списком проигрываемых mp3. Создать его можно с помощью find:
; find /path/to/mp3s/ -type f -name *.mp3 > playlist.txt
; find /path2/to/mp3s/ -type f -name *.mp3 >> playlist.txt
PlaylistFile=/path/to/playlist/playlist.txt

;Примечание:
;зависит от версии используемого шелла.
;Бывает ругается на недопустимость использования маски *.mp3
;В этом случае маску впишите в обычные кавычки.
;Например: find /path/to/mp3s/ -type f -name "*.mp3" > playlist.txt

; IP и порт для сервера, на котором будет вещание.
ServerIP=127.0.0.1
ServerPort=8000

; Пароль для broadcasting'а. (См. конфиг сервера.)
Password=mypassword

; Информация о музыке. Название аудиопотока, его адрес, жанр музыки.
StreamTitle=Testing
StreamURL=http://127.0.0.1:8000/
Genre=Classic

; Название файла для логирования.
LogFile=sc_trans.log

; Включение случайной выборки песен.
Shuffle=1

; Настройки воспроизводимого сигнала (обычно прямо пропорционально зависят
; от пропускной способности сети). Здесь указан битрейт 128 Кбит
Bitrate=131072
SampleRate=44100
Channels=1

; "Качество". Значения от 1 (лучшее) до 10.
Quality=1

; Режим "затухания". Песня по завершении проигрывания затихает.
; 0: отключение, 1: 100/100->100/0, 2: 0/100->100/0
CrossfadeMode=0

; Продолжительность этого "затухания" (в мс).
CrossfadeLength=0

; Читать ID3-теги.
UseID3=1

; Данная станция не является публичной.
Public=0

; Контакты для обратной связи.
AIM=---
ICQ=---
IRC=---

На этом конфигурация закончена.

Запуск аналогичен:

 ./sc_trans_linux sc_trans.conf

Теперь по адресу http://127.0.0.1:8000/ доступно online-радио, которое будет проигрывать mp3-файлы, перечисленные в /path/to/playlist/playlist.txt. Для того чтобы прослушать, что же получилось, достаточно в каком-либо плейере (будь то WinAMP, или любой другой поддерживающий потоковое воспроизведение) ввести http://127.0.0.1:8000/

Если зайти на этот же URL каким-нибудь браузером, то можно увидеть www-страничку с информацией об аудио сервере (текущий статус, последние проигранные песни). Там же есть ссылка на «Admin», по которой можно управлять списком подключенных слушателей (удалять их и банить), а также просматривать лог.
В качестве очень существенного недостатка SHOUTcast-сервера можно отметить отсутствие поддержки формата OGG. По заявлениям разработчиков, заниматься они этим в ближайшее время и не планируют.

Теперь о живом вещании (LIVE).

Audio-in: Линейный вход вашей звуковой карты.

Для трансляции сигнала с аналогого входа звуковой карты с помощью sc_trans необходимо в плей-лист (тот самый параметр PlaylistFile в конфиг-файле sc_trans.conf; по умолчанию это example.lst) добавить следующие строки:

DSP:/dev/dsp
DSP:/dev/dsp

Где /dev/dsp — устройство аудиокарты, с которой будет идти поток. (Строку обязательно надо указать именно два раза, т.к. по необъяснимым причинам первая строка playlist’а попросту игнорируется.)

На этом все.

_____________________________________

Источник:
неофициальный проект GNU/Linux ХМАО-Югра www.oslinux.ru
http://www.oslinux.ru/node/178