Ось: Debian Jessie.
За основу взята статья: https://habrahabr.ru/post/156591/
Устанавливаю из репов:
apt-get install liquidsoap
Будут установлены следующие дополнительные пакеты:
libao-common libao4 libasound2 libasound2-data libasyncns0
libcamomile-ocaml-data libfaad2 libflac8 libgomp1 libgsm1 libice6 libltdl7
libmad0 libmp3lame0 libopencore-amrnb0 libopencore-amrwb0 libpulse0 libsm6
libsndfile1 libsox-fmt-alsa libsox-fmt-base libsox2 libtag1-vanilla
libtag1c2a libvo-aacenc0 libvorbisenc2 libvorbisfile3 libwavpack1
libx11-xcb1 libxtst6 liquidsoap-plugin-faad liquidsoap-plugin-flac
liquidsoap-plugin-icecast liquidsoap-plugin-lame liquidsoap-plugin-mad
liquidsoap-plugin-ogg liquidsoap-plugin-pulseaudio liquidsoap-plugin-taglib
liquidsoap-plugin-voaacenc liquidsoap-plugin-vorbis sox vorbis-tools
vorbisgain x11-common
Предлагаемые пакеты:
libaudio2 libesd0 libesd-alsa0 libasound2-plugins alsa-utils
libcamomile-ocaml-dev pulseaudio libsox-fmt-all festival mplayer liguidsoap
liquidsoap-plugin-samplerate liquidsoap-plugin-xmlplaylist
Рекомендуемые пакеты:
mp3gain
НОВЫЕ пакеты, которые будут установлены:
libao-common libao4 libasound2 libasound2-data libasyncns0
libcamomile-ocaml-data libfaad2 libflac8 libgomp1 libgsm1 libice6 libltdl7
libmad0 libmp3lame0 libopencore-amrnb0 libopencore-amrwb0 libpulse0 libsm6
libsndfile1 libsox-fmt-alsa libsox-fmt-base libsox2 libtag1-vanilla
libtag1c2a libvo-aacenc0 libvorbisenc2 libvorbisfile3 libwavpack1
libx11-xcb1 libxtst6 liquidsoap liquidsoap-plugin-faad
liquidsoap-plugin-flac liquidsoap-plugin-icecast liquidsoap-plugin-lame
liquidsoap-plugin-mad liquidsoap-plugin-ogg liquidsoap-plugin-pulseaudio
liquidsoap-plugin-taglib liquidsoap-plugin-voaacenc liquidsoap-plugin-vorbis
sox vorbis-tools vorbisgain x11-common
обновлено 0, установлено 45 новых пакетов, для удаления отмечено 0 пакетов, и 50 пакетов не обновлено.
Копирую полностью готовую структуру (как в статье) директорий с музыкой в /data/radio/. Вся музыка строго одного и того же формата: MP3 CBR 192kbps сконвертированная через WinLame.
Создаю скрипт start-radio.liq:
#!/usr/local/bin/liquidsoap
# создаём переменные быстрого исправления в одном месте по необходимости
# базовая информация о выводимом потоке
out = output.icecast(
# хост с icecast
host = "127.0.0.1",
# его порт
port = 8000,
# логин
user = "source",
# и пароль
password = "hackme",
# название
name = "Testing Radio",
# жанр
genre = "Rock",
# ссылка на сайт
url = "http://radio.ru",
# кодировка
encoding = "UTF-8"
)
# включаем telnet-сервер
set("server.telnet.bind_addr","127.0.0.1")
set("server.telnet",true)
# _____________________________________
# Описание файловой структуры нашего радиосервера.
# Переменные можно не использовать, а писать сразу полные пути к плейлистам, но при изменении названия одной из папок, придётся править довольно много строк в конфигурации. Как показала практика, такой подход удобнее.
# абсолютный путь к рабочей директории
wd = "/data/radio"
# путь к папке с аудиофайлами
pl = "#{wd}/collection"
# техническая папка
tech = "#{wd}/technical"
# логи
set("log.file.path","#{tech}/liquidsoap.log") # путь к файлу лога
set("log.level", 3) # уровень логирования
# папка с информационными вставками
promo_dir = "#{pl}/promo"
# папка с программами
# progr_dir = "#{pl}/programs"
# папка с изменяющимся эфиром
ef = "#{pl}/efir"
# папки соответствующих эфиров
ni = "#{ef}/night"
mo = "#{ef}/morning"
da = "#{ef}/daytime"
ev = "#{ef}/evening"
# папки с музыкой
mus_ni_dir = "#{ni}/music"
mus_mo_dir = "#{mo}/music"
mus_da_dir = "#{da}/music"
mus_ev_dir = "#{ev}/music"
# папки с джинглами
jin_ni_dir = "#{ni}/jingles"
jin_mo_dir = "#{mo}/jingles"
jin_da_dir = "#{da}/jingles"
jin_ev_dir = "#{ev}/jingles"
# плейлисты с программами. Обратите внимание - до этого указывались пути к папкам, а здесь - к простым текстовым файлам.
# 1_prog_pl = "#{progr_dir}/1_prog.pl"
# 2_prog_pl = "#{progr_dir}/2_prog.pl"
# _____________________________________
# Создаём объекты типа "source", в нашем случае это аудиоисточники.
# Здесь атрибут "reload" позволяет раз в 360 секунд перечитывать плейлист по пути, указанному далее.
# По умолчанию, музыка проигрывается рандомно, атрибут <code>mode = "normal"</code> указывает на проигрывание по порядку.
# загружаем плейлисты, джинглы, вставки, программы
mus_ni = playlist (reload = 360, "#{mus_ni_dir}")
mus_mo = playlist (reload = 360, "#{mus_mo_dir}")
mus_da = playlist (reload = 360, "#{mus_da_dir}")
mus_ev = playlist (reload = 360, "#{mus_ev_dir}")
jin_ni = playlist (reload = 360, "#{jin_ni_dir}")
jin_mo = playlist (reload = 360, "#{jin_mo_dir}")
jin_da = playlist (reload = 360, "#{jin_da_dir}")
jin_ev = playlist (reload = 360, "#{jin_ev_dir}")
promo = playlist (reload = 360, "#{promo_dir}")
# 1_prog = playlist (reload = 360, "#{1_prog_pl}", mode = "normal")
# 2_prog = playlist (reload = 360, "#{2_prog_pl}", mode = "normal")
# _____________________________________
# строим 4 потока, сразу всё перемешивая
# смешиваем вставки
ins_ni = rotate (weights = [2, 1], [jin_ni, promo])
ins_mo = rotate (weights = [2, 1], [jin_mo, promo])
ins_da = rotate (weights = [2, 1], [jin_da, promo])
ins_ev = rotate (weights = [2, 1], [jin_ev, promo])
# смешиваем вставки и потоки
ni = rotate (weights = [3, 1], [mus_ni, ins_ni])
mo = rotate (weights = [3, 1], [mus_mo, ins_mo])
da = rotate (weights = [3, 1], [mus_da, ins_da])
ev = rotate (weights = [3, 1], [mus_ev, ins_ev])
#_______________________________________________________________________
# конфигурируем расписание эфира
radio = switch (track_sensitive = true,
[
({ 2h - 6h }, ni),
({ 6h - 9h }, mo),
({ 9h - 19h }, da),
({ 19h - 2h }, ev)
])
#_______________________________________________________________________
# добавляем crossfade
radio = crossfade(start_next=1., fade_out=1., fade_in=1., radio)
# и, наконец, запускаем вещалку
out(
%mp3(bitrate = 192, id3v2 = true),
description = "MP3 192 Kbps",
mount = "music",
mksafe(radio)
)
В скрипте видно, что я закомментировал/удалил значения касательно первой и второй программы (пока не нужны):
# progr_dir = "#{pl}/programs"
# 1_prog_pl = "#{progr_dir}/1_prog.pl"
# 2_prog_pl = "#{progr_dir}/2_prog.pl"
# 1_prog = playlist (reload = 360, "#{1_prog_pl}", mode = "normal")
# 2_prog = playlist (reload = 360, "#{2_prog_pl}", mode = "normal")
Удалил:
({ (1w21h - 1w22h) or (3w21h - 3w22h) or (5w21h - 5w22h)}, 1_prog),
({ (1w18h - 1w19h) or (3w18h - 3w19h) or (4w18h - 4w19h) or (5w18h - 5w19h)}, 2_prog),
touch /data/radio/technical/liquidsoap.log
chown -R liquidsoap:liquidsoap /data/radio/
chmod -R 0775 /data/radio/
ln -s /data/radio/technical/start-radio.liq /etc/liquidsoap
2016/07/17 02:44:44 [mksafe:3] Switch to safe_blank.
Что делать?
P.S.: Странно - каты не работают...