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

Автор xdriver (C) xmaksim(@)mail(.)ru

Настройка потокового аудиосервера SHOUTcast в ОС Linux/FreeBSD

ЧАСТЬ 1 - sc_serv

Подробное описание процесса установки и настройки потокового аудиосервера SHOUTcast (и программного обеспечения, необходимого для работы с ним) для создания своего online-радио под операционной системой Linux.

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

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

SHOUTcast Linux server v1.9.4:
wget http://www.shoutcast.com/downloads/sc1-9-4/shoutcast-1-9-4-linux-glibc6.....

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

$ tar xzvf shoutcast-1-9-4-linux-glibc6.tar.gz

В появившемся каталоге shoutcast-1-9-4-linux-glibc6 расположен конфиг сервера 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

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

ЧАСТЬ 2 - sc_trans

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

SHOUTcast DSP Plug-In for Mac OS X, Linux and FreeBSD (v0.40):

wget http://www.shoutcast.com/downloads/sc_trans_posix_040.tgz.

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

$ 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

9.61538
в среднем: 9.6 (13 votes)
sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
OGG

> В качестве очень существенного недостатка SHOUTcast-сервера можно отметить отсутствие поддержки формата OGG. По заявлениям разработчиков, заниматься они этим в ближайшее время и не планируют.

Жаль! А есть другие серверы? Открытые?

______________________________
In the world without walls, who needs windows?

sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
В общем все написано,

В общем все написано, спасибо.

Думаю, что актальность "бесплатного закрытого" софта уходит.

Может открытые беслатные или платные аналоги рассмореть? В частности с поддержкой OGG

______________________________
In the world without walls, who needs windows?

Аноним (не проверено)
Я когда-то писал про icecast.

Я когда-то писал про icecast. ИМХО более интересное решение и совместимое с shoutcast.
SHOUTcast - верх извращения ИМХО не нужен
Icecast и Flumotion - Рулят !

User offline. Last seen 2 года 6 недель ago. Offline
Зарегистрирован: 05/19/2008
Альтенатива SHOUTcast

Как альтернатива SHOUTcast существуют еще другие продукты...

Альтернативы SHOUTcast server:
icecast
Sphinxter
GNUMP3d
Ample

Другие средства для потокового аудиовещания на SHOUTcast/icecast server:
ices
Darkice

sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
Альтенатива SHOUTcast

А статейку не сделаете, вроде народ просит)))

______________________________
In the world without walls, who needs windows?

Саша (не проверено)
Видимо нет:(

Видимо нет:(

Гость
ссылка

ссылка http://www.shoutcast.com/downloads/sc_trans_posix_040.tgz. не пашет что делать подкиньте ссылку или киньте утилиту в асю

Гость
418473581

418473581

sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
> ссылка

> ссылка http://www.shoutcast.com/downloads/sc_trans_posix_040.tgz. не пашет что делать подкиньте ссылку или киньте утилиту в асю

Очевидно посетить http://www.shoutcast.com

http://yp.shoutcast.com/downloads/sc_trans_posix_040.tgz

______________________________
In the world without walls, who needs windows?

Гость
СПАСИБО А НА СЧЕТ НАСТРОЙКИ

СПАСИБО А НА СЧЕТ НАСТРОЙКИ ЭТОГО ФАЙЛА КАК СОЗДАТЬ ПЛЕЙ ЛИСТ ПОЛНОЕ ПОШПГОВОЕ ОПИСАНИЕ
ЧТО ВПИСЫВАТЬ ВМЕСТО
; find /path/to/mp3/directory -type f -name "*.mp3" > playlist_filename.lst
PlaylistFile=example.lst
что вписывать вместо find
что вписывать вместо path
что вписывать вместо to
что вписывать вместо mp3
что вписывать вместо directory-type f -name".mp3" > playlist_filename.lst
PlaylistFile=/path/to/playlist/playlist.txt(сюда указать путь к плай листу

Гость
А как рассчитать производительность?

Помогите примерно подсчитать производительность. Нужно собрать или сделать апгрейт сервера для 500 слушателей в день. Планируют что число слушателей увеличится до 1000 посетителей в день.

Люди будут подключаться по www и слушать радио.
Вот например сервер с такими характеристиками сколько может принять слушателей единовременно?

Материнская плата SuperMicro X6DHR-8G2-B
CPU: Intel(R) Xeon(TM) CPU 3.06GHz (3065.81-MHz 686-class CPU)
Память: 4GB DDR2 400 SDRAM
диски 70ГБ (SCSI 10 000 оборотов)

На что идет основная нагрузка, память, проц, сеть..?

sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
> подсчитать производительность

Не уверен, но мне кажется что с точки зрения вычислительной мощности этого барахла хватит.

А вот способность сетевой карты отдавать поток, нужно считать из битрейта.

Удачи! Интересное у вас начинание.

______________________________
In the world without walls, who needs windows?

Гость
Все зависит от вашей скорости

Все зависит от вашей скорости инета, а так пускай хоть будет старючая машина

Гость
Для тех кто хочет иметь свой сервер радиостанции!

Предлагаю так же открыть радио хостинг, нужна малость даработка а так все нормально, скорость огромная, работает круглосуточно, на сайте радио Талк написан мой хостинг, правда ни так много клиентов, так как только начал сам этим заниматься..
icq 362296117

sa
sa аватар
User offline. Last seen 1 день 8 часов ago. Offline
Зарегистрирован: 05/11/2008
> Все зависит от вашей

> Все зависит от вашей скорости инета, а так пускай хоть будет старючая машина

Старая не пойдет, но такая как описал уважаемый, будет в самый раз. На глаз, субъективно.

______________________________
In the world without walls, who needs windows?

Гость
invalid password from 127.0.0.1
9

сделал все по инструкции, но сервер почему то постоянно выдает такую ошибку
invalid password from 127.0.0.1 при попытке начать вещание