Но не простой, а более-менее автоматизированный.
Сделаем круглосуточное радио с периодическими диджейскими трансляциями, автоматическим созданием лоу-стримов и записью эфиров.
Несмотря на то, что использованные решения достаточно тривиальны, тема предназначена в первую очередь для того, чтобы увидеть эти тривиальные решения.
Для этого нам нужны только mpd и Icecast. Я не буду рассматривать их установку и общую настройку, потому что первое тривиально, а для второго приведены примеры конфигов.
Будем считать, что вы это уже сделали.
Задача ноль: Подготовка.
Нам понадобятся три точки монтирования в Icecast. Давайте определим их: <mount>
<mount-name>/mpd.ogg</mount-name>
</mount>
<mount>
<mount-name>/radio_high.ogg</mount-name>
</mount>
<mount>
<mount-name>/radio_low.ogg</mount-name>
</mount>
Первый нам понадобится для круглосуточного вещания с mpd, два других для DJ-вещания.
Задача первая: Круглосуточное вещание с периодическими выступлениями диджеев.
Нам нужно, чтобы слушателям не приходилось переподключаться каждый раз, когда начинается/заканчивается трансляция.
В Icecast это сделать очень просто: Fallback-mount.
Приведем наш конфиг монтирования в Icecast к такому виду: <mount>
<mount-name>/mpd.ogg</mount-name>
</mount>
<mount>
<mount-name>/radio_high.ogg</mount-name>
<fallback-mount>/mpd.ogg</fallback-mount>
<fallback-override>1</fallback-override>
</mount>
<mount>
<mount-name>/radio_low.ogg</mount-name>
<fallback-mount>/mpd.ogg</fallback-mount>
<fallback-override>1</fallback-override>
</mount>
Используя резервное монтирование, мы сказали ISCAS предоставлять клиентам поток /mpd.ogg, когда нет трансляции на /radio_low.ogg и /radio_high.ogg.
А флаг Fallback-override позволяет возвращать клиентов на это монтирование при запуске трансляции на него.
Очень просто, не так ли? Вроде все хорошо, но не все диджеи могут позволить себе вещание в два потока, да и это не очень удобно.
Задача вторая: автоматическое создание малорасхода.
Для этого мы будем использовать тот же mpd, но напишем для него новый конфиг.
Вам нужно будет изменить как минимум пути к библиотеке, плейлистам и pid-файлу, чтобы не было конфликтов между двумя копиями mpd. Вывод необходимо будет отправить на монтирование Icecast /radio-low.ogg. Теперь все, что нам нужно сделать, это запустить новую копию mpd с этим конфигом и добавить в плейлист адрес высокоскоростного радио.
Таким образом, MPD, как и любой другой клиент, принимает либо трансляцию от основного MPD, либо DJ-трансляцию, перекодирует ее и отправляет в low-поток.
Задача решена.
Последнее задание: автоматическая запись трансляции.
Icecast поддерживает запись потока в файл.
К сожалению, он не умеет сам разбивать файлы, а потому при каждой новой трансляции старый файл будет перезаписываться.
К счастью, он может выполнять сценарии при начале/окончании трансляции.
Нам нужно записать только высокий поток, так как диджеи вещают только на него.
Немного подправим конфиг Icecast: <mount>
<mount-name>/mpd.ogg</mount-name>
</mount>
<mount>
<mount-name>/radio_high.ogg</mount-name>
<fallback-mount>/mpd.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<dump-file>/tmp/radio_high.ogg</dump-file>
<on-disconnect>/path/to/my/script/stend.pl</on-disconnect>
</mount>
<mount>
<mount-name>/radio_low.ogg</mount-name>
<fallback-mount>/mpd.ogg</fallback-mount>
<fallback-override>1</fallback-override>
</mount>
Мы указали, куда записывать поток и какой скрипт запустить после окончания трансляции.
Я рекомендую называть файл дампа по имени точки монтирования, поскольку именно точка монтирования передается сценарию в качестве параметра.
Остаётся только написать вот такой скрипт: #!/usr/bin/env perl
use strict;
use warnings;
use DateTime;
my $path="/path/to/my/archive/";
my $mn=$ARGV[0];
$mn=~s|/||;
my $dt=DateTime->now;
my $dmy = $dt->dmy('_');
my $fname=$path.$dmy."_".
time().
"_".
$mn;
`mv /tmp/$mn $fname`;
Все, что делает сценарий, — это перемещает файл дампа в каталог, указанный в $path, называя его по текущей дате и имени потока.
Вот и все, собственно.
Если сообществу будет интересно, в следующей статье я расскажу, как сделать уведомление о текущих треках и трансляциях с помощью бота в Jabber-конференции.
Теги: #радио #howto #mpd #icecast #Čulan
-
Простая История
19 Oct, 24 -
Курсор Мыши — Источник Скрытой Угрозы
19 Oct, 24 -
Сервис Backports Становится Официальным
19 Oct, 24 -
Проект Итэр В 2019 Году
19 Oct, 24