Делаем интернет-радио: живое вещание и гостевой доступ

Делаем интернет-радио: живое вещание и гостевой доступ

А также приглашаем в эфир гостей и пишем веб-интерфейс для перезагрузки радио
8 минут3663

Привет! С вами Антон Чигарёв, и я продолжаю рассказ о создании интернет-радио. Этот материал появился благодаря вашим вопросам и комментариям к предыдущей статье на ту же тему. Сейчас вы узнаете, как вещать в прямом эфире — одному или вместе с гостями, — какие программы в этом помогут и как записывать живые трансляции. Ещё я поделюсь примером PHP-скрипта для быстрой перезагрузки радио через веб-интерфейс.

Зачем вообще нужно своё интернет-радио? Это способ увлекательно рассказать о чём-то важном, сплотить сообщество вокруг вашего проекта или позабавить знакомых. Кто-то собрал большую коллекцию аудиокниг и «виртуальную Шахерезаду». Кто-то организует дискотеку 90-х, зачитывает приветы и выполняет музыкальные заказы в прямом эфире.

Если вы собираетесь часто транслировать аудио со своего компьютера, важно найти для этого удобную программу. Информации о каждом решении море — можно долго экспериментировать, прежде чем станет ясно, что лучше подходит для ваших целей. Я расскажу о своём опыте и о том, с чем сталкивался на практике.

В прошлый раз мы выяснили, как поднять на своём сервере Icecast и Liquidsoap, чтобы круглосуточно играть музыку. Если вы пропустили начало, обязательно прочтите. И прежде чем браться за перечисленные ниже инструменты, убедитесь, что у вас в Icecast создан mount для живого DJ (например, /live). Без этого в эфир не выйти.

Программы для онлайн-вещания

Выходить в эфир, транслировать музыку и вещать своим голосом можно с помощью медиаплееров типа Winamp и VLC. Но гораздо удобнее использовать специализированные инструменты.

Я подготовил небольшой обзор популярных приложений для радиовещания, чтобы показать, чем интересно каждое из них. На рассказ о настройках каждой программы пришлось бы тратить много букв и вашего времени — но нужную информацию легко найти и в мануалах, причём одно из решений даже поддерживает русский язык. Поэтому ограничусь общей характеристикой.

RadioBoss

Это многофункциональное решение подойдёт большинству пользователей:

  • опытному диджею, который ведёт трансляции продолжительностью час-два, с позывным сигналом в начале каждого часа и периодическими отбивками (джинглами);
  • новичку, который хочет без лишних заморочек провести программу по заявкам слушателей и зачитать в эфире поздравления.

Для формирования плейлиста можно заранее выбрать папку с треками. Другой вариант — добавлять файлы для воспроизведения по одному и нажимать на Play в нужное время.

Разобраться в настройках довольно легко, тем более что интерфейс приложения полностью переведён на русский язык.

Загрузить программу можно с сайта разработчиков. Там же есть и другие полезные утилиты: например, программа RadioLogger для записи эфира на стороне пользователя (подробности чуть ниже) и система RadioCaster для потокового вещания любых звуков с вашего компьютера в интернет.

Sam Broadcaster

Это очень мощный инструмент, который подойдёт профессионалам и энтузиастам, всерьёз увлечённым радио. Встроенные возможности можно расширять с помощью собственных скриптов.

Лично моё мнение — этот софт не подходит новичку или рядовому диджею, который выходит в эфир, только чтобы сказать пару слов и поставить песню. В программе слишком много настроек и функций, о назначении которых трудно догадаться неподготовленному пользователю. Не у каждого будет время и желание разбираться в работе такого комбайна. Тем более, всё на английском языке.

Хорошая новость в том, что Sam Broadcaster позволяет планировать не только содержание эфиров, но и расписание включений, и время автоматического запуска программы.

Если вы не доверяете автодиджею, но уверены в стабильности своего интернет-соединения, можете настроить «Сэма» на круглосуточное вещание с вашего компьютера. Лично присутствовать не придётся: программа сама будет играть плейлисты, часовые отбивки, джинглы и прочее.

Как записать эфир

На сайте разработчиков RadioBoss вы можете скачать программу RadioLogger, которая умеет записывать эфиры. Разобраться очень просто: у приложения минимум настроек и интуитивно понятный интерфейс. Единственный значимый недостаток этого решения и его аналогов в том, что процесс записи создаёт дополнительную нагрузку на ваш компьютер. На старом железе или при скромном запасе оперативной памяти это может вести к «лагам» — задержкам и перебоям вещания.

Хорошо, что есть и другой путь! Вы можете настроить запись эфиров прямо в Liquidsoap. Для этого в конфиге своей радиостанции нужно прописать следующее:

output.file(%mp3(bitrate=128),
    "/Путь/до/АрхивЗаписей/live_%d_%m_%Y-%H_%M_%S.mp3",
    reopen_on_metadata=false,
    fallible=true,
bigmonster)
// Где bigmonster — это имя вашей точки монтирования.

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

Кстати, с сохранением через Liquidsoap проще организовать повтор программ: сразу после завершения эфира его запись уже находится на сервере. Ссылку на неё можно ставить в расписание трансляций.

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

Как пригласить в эфир гостя

Есть такая утилита — Virtual Audio Cable. Она позволяет создавать несколько входных и выходных потоков, которые могут одновременно давать звук в эфир и любой мессенджер — например, Skype.

Программа на английском языке, но настроек там совсем немного.

Работает всё следующим образом:

  1. Открываем наш мессенджер и в настройках звука выбираем устройство воспроизведения LineX, где X — номер виртуального кабеля.
  2. В программе, куда нужно вывести речь гостя, выбираем LineX уже в качестве микрофона. Номер тот же, что и в предыдущем пункте.
  3. Включаем Audio Repeater и смотрим, что у нас получилось. Если всё хорошо, слышим в эфире и себя, и гостя. Поздравляю! 

Вот так легко и просто это организовывается. Вы берёте интервью, а на фоне может играть музыка.

Веб-интерфейс для перезагрузки радио

Идея перезагрузки Liquidsoap из браузера возникла у меня, когда понадобилось наладить доступ к радиосерверу для второго диджея. Дело в том, что новые треки, которые мы загружаем на сервер по FTP, начинают играть только после перезапуска плейлиста. А любые обновления конфигурации вступают в силу после рестарта программы Liquidsoap. Каждый раз лезть на сервер через SSH и вводить команды ради мелких изменений очень неудобно. Гораздо проще открыть веб-страницу и нажать на кнопку. Это можно сделать и с Windows, и с мобильного устройства.

Я знаю, что у поставленной задачи есть множество решений и мой вариант может быть не оптимален. Буду рад прочесть адекватную критику и предложения от профи.

Что нам потребуется

Утилита Sudo. С её помощью мы создадим на сервере пользователя, из-под которого будет работать наш будущий PHP-скрипт. Назначим этому пользователю отдельные права root, которые он сможет использовать без root-пароля.

Любой текстовый редактор — для написания кода. В Windows я использую Notepad++, в Linux — стандартный Nano. Берите, что удобнее вам.

Готовим рабочее место

Сперва установим и настроим необходимые утилиты для дальнейшей работы.Сразу отмечу, что подходящих инструментов, кроме Sudo, я не нашёл, а действовать напрямую из-под рута побоялся.

Для начала поставим Sudo:

  • Заходим на сервер и устанавливаем утилиту Sudo командой: 
apt-get install sudo
  • Создаём пользователя, из-под которого будет работать наш скрипт:
adduser php-guard
  • В Sudo задаём список команд, которые разрешено выполнять пользователю (скрипту). Это простейшая мера безопасности, которую мы реализуем через конфиг sudoers.

Теперь Sudo нужно настроить. Открываем файл конфигурации в любом текстовом редакторе:

nano /etc/sudoers

Находим блок # User privilege specification и после строки root ALL=(ALL:ALL) ALL вставляем следующее:

php-guard ALL=(root) NOPASSWD: systemctl restart liquidsoap, systemctl start liquidsoap, systemctl stop liquidsoap

С помощью этой записи я разрешаю пользователю php-guard выполнять без root-пароля три команды: запускать, останавливать и перезагружать Liquidsoap. Всё, мы завершили ручную настройку Sudo — сохраняем и закрываем файл.

Теперь обязательно надо перезапустить утилиту, чтобы она не ругалась на отсутствие прав и не мешала работать нашему будущему PHP-скрипту. Для этого вызываем в терминале команду:

/etc/init.d sudo restart

Пишем управляющий скрипт

Обратите внимание! Делать управляющий скрипт без какой-либо защиты опасно — если веб-интерфейс попадёт в чужие руки, наш сервер будет уязвим. Допустим, вы, как и я, не программист и вам нужен простой в реализации, но более-менее надёжный способ спрятать кнопки перезагрузки от посторонних. В PHP я самоучка, но код, который я покажу, работает и решает поставленную задачу. Если вы знаете, как сделать лучше и проще, — буду признателен за толковые советы.

Сейчас объясню порядок действий:

  • Придумываем необычный путь и размещаем скрипт так, чтобы злоумышленнику было трудно его найти. Например: https://ваш.домен/teerly/bom/index.php

Несмотря на предсказуемое название файла index.php, угадать его расположение и назначение не так просто, потому что названия каталогов ничем не намекают на функцию перезагрузки радио. При этом index-файл на месте, значит, именно его сервер покажет при обращении к https://ваш.домен/teerly/bom/. Мы избегаем ситуации, когда сервер по умолчанию выдаёт содержимое каталога, в котором нет индексной страницы.

  • При написании скрипта исходим из того, что для совершения любых действий пользователю надо будет ввести правильный логин и пароль. Нам придётся реализовать авторизацию — написать код, который перед отправкой команды на сервер проверит, залогинен ли пользователь.
  • При желании мы можем дополнительно защитить скрипт средствами htaccess и htpasswd. Как это сделать, вы можете прочесть в статье «Защита файлов и папок на сайте паролем».

Как видите, мы комбинируем несколько простейших приёмов, которые тем не менее усложняют жизнь потенциальному взломщику. Теперь закрываем сервер и начинаем писать код.

Авторизация

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

Сначала создадим файл index.php с кодом авторизации пользователя в админ-панели. Страница входа позволит ввести данные, отправить форму и перейти к панели с кнопками перезагрузки. Больше ничего не требуется, поэтому я не стал заморачиваться с оформлением:

<?php
session_start();
// Если пользователь авторизован, направляем его в админку.
if($_SESSION['admin']){
header("Location: admin.php");
exit;
}
// Вносим данные учётки. Пароль зашифрован методом md5.
$admin = 'DJAnton';
$pass = '8a0dffd6f9a78f58fddaef085996e227';
// Если нажата кнопка «Войти», проверяем значения полей и решаем, пускать ли в админку.
if($_POST['submit']){
if($admin == $_POST['user'] AND $pass == md5($_POST['pass'])){
$_SESSION['admin'] = $admin;
header("Location: admin.php");
exit;
}
// Предупреждаем об ошибке.
else echo '<p>Логин или пароль неверны!</p>';
}
// Странице нужен заголовок.
echo '<title>Авторизация в админ-панеле</title>';
?>
// Обычная HTML-форма с авторизацией.
<h2>Авторизация</h2>
<hr/>
<form method="post">
Имя пользователя: <input type="text" name="user" /><br />
Пароль: <input type="password" name="pass" /><br />
<input type="submit" name="submit" value="Войти" />
</form>

Теперь создадим самый важный файл admin.php, в котором реализуем возможность перезагрузки плейлиста и настроек радио.

<?php
session_start();
// Если была нажата кнопка «Выход», убиваем сессию.
if($_GET['do'] == 'logout'){
unset($_SESSION['admin']);
session_destroy();
}
// Если пользователь не авторизован, отправляем его на авторизацию
if(!$_SESSION['admin']){
header("Location: index.php");
exit;
}
echo '<title>Админ-панель</title>';
// Делаем кнопку выхода и две кнопки для перезагрузки
?>
<a role="button" href="admin.php?do=logout">Выход</a>
<h2>Радио</h2>
<a role="button" href="?r=liqrestart" onclick="return confirm('Вы действительно хотите перезапустить Liquidsoap?')">Перезапустить Liquidsoap</a> <a role="button" href="?r=liqreload" onclick="return confirm('Вы действительно хотите перегрузить playlist?')">Перегрузить Playlist</a>
<?php
// Отправляем полученные команды на сервер.
switch($_GET['r']) {
case "liqrestart":
shell_exec("sudo /etc/init.d/liquidsoap restart");
continue;
case "liqreload":
shell_exec("sudo /etc/init.d/liquidsoap force-reload");
break;
}
?>

Теперь человек может авторизоваться за две секунды, перезагрузить Liquidsoap и радоваться новым настройкам.

В перспективе панель управления можно улучшить под ваши потребности: добавить веб-форму для заливки новых конфигов или, наоборот, — для скачивания актуального .liq-файла. Но это уже другая история.

Если интересно, в следующий раз я расскажу, как добиться профессионального звучания своего радио за счёт работы с компрессорами и эквалайзерами. А сейчас я хотел бы узнать, какими программами для трансляции аудио с компьютера пользовались вы. Здорово, если поделитесь впечатлениями. Также буду ждать ваших вопросов и замечаний по статье — по возможности с удовольствием отвечу. Также напоминаю ссылку на первую статью по теме.

Сентябрь — отличное время, чтобы построить далеко идущие планы и начать идти к новым целям! Если вы хотите освоить профессию мечты, то с 1 по 11 сентября 2020 г. мы дарим вам скидку 40% почти на все программы обучения GeekBrains. Успехов! :)

 

прогрммированиеsys_admin
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup