Получите бесплатно 4 курса для лёгкого старта работы в IT
Получить курсы бесплатно
ГлавнаяБлогКак создать своё интернет-радио
25 бесплатных сервисов для веб-дизайнера
06.02.2020
62 751
Время чтения: 13 минут

Как создать своё интернет-радио

06.02.2020
62 751
Время чтения: 13 минут
Сохранить статью:
Сохранить статью:

В статье рассказывается:

  1. Что нужно для старта
  2. Грабли, которые мы обойдём
  3. Выбираем сервер
  4. Готовимся к работе
  5. Устанавливаем софт
  6. Настраиваем Icecast
  7. AutoDJ
  8. Любуемся результатами
  9. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.
    Бесплатно от Geekbrains

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

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

Узнай, какие ИТ - профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

pdf 3,7mb
doc 1,7mb
Уже скачали 27852 pdf иконка

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

Что нужно для старта

Всё, что нам понадобится, — это сервер под управлением Debian 9 и две бесплатные программы:

  • Icecast — с её помощью организуем вещание, будем управлять аккаунтами диджеев и настройками;
  • Liquidsoap — автоматический диджей, который заполнит свободную часть эфира записями из нашей базы. Он будет играть по расписанию или случайным образом.

Грабли, которые мы обойдём

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

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

Сначала я не знал, что Liquidsoap поддерживает работу с переменными. Примеры кода вы не раз увидите ниже.

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

Выбираем сервер

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

  • Поддержка аппаратной виртуализации. Советую брать сервер с KVM, потому что при контейнерной виртуализации (на Open VZ) могут возникать проблемы с Liquidsoap. Я с этим сталкивался.
  • Дисковое пространство. Его должно быть достаточно, чтобы помимо ОС и софта уместить вашу музыкальную коллекцию, из которой автодиджей будет брать записи. Чтобы звук оставался качественным, записи лучше не сжимать.
  • Оперативная память и процессор. Если вы планируете изредка вещать вживую, а остальное поручить программе, для стабильной работы понадобятся минимум 2 ГБ оперативки и двухъядерный процессор. Обычно Liquidsoap и Icecast не жадны до ресурсов, но когда надо запустить несколько станций или потоков с разным битрейтом, стоит брать сервер помощнее.

Готовимся к работе

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

Подключаемся к серверу и быстренько наводим порядок. Для начала устанавливаем обновления. В терминале пишем:

apt-get update
apt dist-upgrade

Дальше смотрим доступные в системе локали:

locale -a

Получаем что-то вроде этого:

C
C.UTF-8
en_US.utf8
POSIX
ru_RU.utf8

Это значит, что система локализована. Если у вас нет, можете перенастроить локаль командой:

dpkg-reconfigure locales

Дальше, чтобы включить поддержку кириллицы, выберите ru_RU.UTF-8.

Как создать своё интернет-радио

И тот же вариант задайте по умолчанию.

Как создать своё интернет-радио

Сервер настроен!

Устанавливаем софт

Начнём с Icecast:

apt-get install icecast2

Вас спросят, хотите ли вы сконфигурировать программу. Отвечайте как угодно — окно с настройками всё равно не появится. По крайней мере, я ни разу не дождался его в Debian 9. Но это не критично.

Как создать своё интернет-радио

Переходим к следующему шагу — обеспечиваем программе автозапуск. Для этого в любом текстовом редакторе (я использую nano) открываем файл:

nano /etc/default/icecast2

Это именно файл, просто разрешение не указано.

Как создать своё интернет-радио

В самом конце находим параметр ENABLE. Важно, чтобы он имел значение true. Если видите false — меняйте. Дальше сохраняем файл нажатием CTRL+O и выходим из редактора (CTRL+X).

Настраиваем Icecast

Если у вас, как и у меня, не было возможности сконфигурировать программу в процессе установки, пора лезть в настройки. Все они хранятся в файле icecast.xml в директории /etc/icecast2/.

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

Дарим скидку от 60%
на курсы от GeekBrains до 28 апреля
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей
Забронировать скидку

Сначала проверим максимально допустимое число одновременно подключённых слушателей:

<clients>100</clients>

По умолчанию — сто, но ориентируйтесь на ширину канала вашего сервера.

В блоке authentication меняем все данные на свои. Параметру bind-address в качестве значения присваиваем IP-адрес нашего сервера.

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

В коде ниже я создаю несколько точек монтирования с индивидуальными параметрами:

<mount>
 <mount-name>/autodj</mount-name> 
 <password>ваш_пароль</password> 
 <max-listeners>500</max-listeners> 
 <max-listener-duration>3600</max-listener-duration> 
 <dump-file>/tmp/dump-live.mp3</dump-file> 
 <intro></intro> 
 <charset>ISO8859-1</charset> 
 <public>1</public> 
 <stream-name>BestRadio</stream-name> 
 <stream-description>Лучшее радио галактики.</stream-description> 
 <stream-url>http://Ваш.IP:8000/autodj.mp3.m3u</stream-url> 
 <genre>Other</genre> 
 <bitrate>128</bitrate> 
 <type>application/mp3</type> 
 <subtype>mp3</subtype> 
 <burst-size>65536</burst-size> 
 <mp3-metadata-interval>4096</mp3-metadata-interval> 
</mount> 
<mount> 
 <mount-name>/live</mount-name> 
 <password>ваш_пароль</password> 
 <max-listeners>500</max-listeners> 
 <max-listener-duration>3600</max-listener-duration> 
 <dump-file>/tmp/dump-live.mp3</dump-file> 
 <intro></intro> 
 <fallback-mount>/autodj</fallback-mount> 
 <fallback-override>1</fallback-override> 
 <fallback-when-full>1</fallback-when-full> 
 <charset>ISO8859-1</charset> 
 <public>1</public> 
 <stream-name>MyRadio</stream-name> 
 <stream-description>Прямая трансляция.</stream-description> 
 <stream-url>http://Ваш.IP:8000/autodj.mp3.m3u</stream-url> 
 <genre>Other</genre> 
 <bitrate>128</bitrate> 
 <type>application/mp3</type> 
 <subtype>mp3</subtype> 
 <burst-size>65536</burst-size> 
 <mp3-metadata-interval>4096</mp3-metadata-interval> 
</mount>

Как вы могли догадаться, точка autodj подключена, когда в эфире никого нет. Если в это время кто-нибудь у себя в проигрывателе откроет ссылку типа http://ваш-ip:8000/live, он услышит автоматическое вещание. Но стоит вам выйти в эфир с точки live — autodj отключится.

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

Осталось сохранить результат. С Icecast для первого раза достаточно. Теперь давайте позаботимся об автоматическом диджее.

AutoDJ

Устанавливаем Liquidsoap из репозитория Debian — это легко, проблем возникнуть не должно:

apt-get install liquidsoap

Теперь создадим каталоги для хранения музыки, заставок (джинглов) и передач. У себя я завёл папку Content, а в ней предусмотрел следующие субдиректории:

  • Music — сюда я скидываю все музыкальные треки;
  • Programs — здесь лежат записи передач;
  • Jingles — папка с «рекламными» объявлениями, которых у нас от силы штук пять, чисто для ознакомительных целей;
  • Jokes — сюда гружу отрывки из разных стендапов для проигрывания в определённое время.
Только до 29.04
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:
ТОП-100 площадок для поиска работы от GeekBrains
20 профессий 2023 года, с доходом от 150 000 рублей
Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
Уже скачали 52300

Давайте реализуем это в терминале:

mkdir /home/Content/Jingles
mkdir /home/Content/Programs
mkdir /home/Content/Music

Чтобы ускорить и упростить заливку файлов, можете настроить FTP, но это отдельная тема. А пока займёмся настройками программы.

Конфигурационные файлы имеют расширение .liq и хранятся в директории /etc/liquidsoap. Для вашего удобства там лежит пример — файлик radio.liq.example. Его можно редактировать прямо на сервере или загрузить на свой компьютер.

Пересохраняем файл с любым новым именем, допустим, my-dj.liq. Вот как может выглядеть содержимое:

#!/usr/bin/liquidsoap -d
#set("init.daemon",true)
#set("init.daemon.pidfile",false)
set("log.file",false)

Чтобы вести лог работы программы, раскомментируйте эти строки:

#set("log.file.path","/var/log/liquidsoap/basic.log")
#set("log.stdout",true)
#set("log.level",4)

Блок ниже — для тех, кому нужен telnet.

#set("server.telnet.bind_addr","127.0.0.1")
#set("server.telnet",true)
#set("server.telnet.port",1234)

Я включаю поддержку OGG и MP3. OGG удобен, когда места мало, а качество некритично.

set("decoder.file_decoders",["META","MAD","OGG"])
set("decoder.file_extensions.mad",["mp3","mp2","mp1"])
set("decoder.file_extensions.ogg",["ogv","oga","ogx","ogg","opus"])
set("decoder.mime_types.ogg",["application/ogg","application/x-ogg","audio/x-ogg","audio/ogg","video/ogg"])
set("decoder.mime_types.mp3",["audio/mpeg","audio/MPA"])

Настраиваем отображение данных о записи: берём инфу из метатегов.

def update_title(m) =
 title = m["title"]
 if title == "" or title == "Unknown" then
  content = m["filename"]
  content = basename(content)
  content = get_process_output("STR=\""^content^"\"; echo ${STR%.*}")
  content = string.recode(out_enc="UTF-8", content)
  [("title", content)]
 else
  sArtist = string.recode(out_enc="UTF-8", m["artist"])
  sTitle = string.recode(out_enc="UTF-8", m["title"])
  [("title", sTitle),
  ("artist", sArtist)]
 end
end
set("tag.encodings",["UTF-8"])

Указываем путь до папки с музыкой и параметры воспроизведения.

music = nrj(playlist(mode='randomize', reload_mode='rounds=1', '/home/Content/Music'))

Когда все треки отыграют, рандомайзер перемешает их и снова запустит. Теперь укажем путь к джинглам.

jingle = mksafe(playlist("/home/Content/Jingles"))

Чтобы проигрывать записи по расписанию, свяжем их с переменными. Можно использовать одно и то же имя файла для контента одного типа. Например, когда я хочу добавить в расписание аудиокнигу, я загружаю файл в папку Programs и переименовываю его в book.mp3.

book = single("/home/Content/Programs/book.mp3")
jokes = single("/home/Content/Programs/jokes.mp3")
repeat = single("/home/Content/Programs/archive_recording.mp3")

Дальше укажем, с какими интервалами играть заставки. Например, я ставлю один джингл на каждые пять треков.

radio = rotate(weights = [1, 5],[jingle, music])
radio = crossfade(fade_out = 2.0, fade_in = 1.0, start_next = 0.5, radio)
radio = mksafe(radio)
radio = map_metadata(update_title, radio)
default = fallback(track_sensitive=false,[

Настроим программу передач. Тематические блоки разделим запятыми. В понедельник поставим книгу (путь к файлу уже привязан). Во вторник — шутки. В воскресенье — повтор ранее записанной передачи.

switch([
({1w13h00m00s}, book),
({2w15h00m00s}, jokes),
({7w18h00m00s}, archive_recording)
#Xw — это день недели, где 1 — понедельник. 
#Xh — час, Xm — минуты, Xs — секунды.
]),
radio
])
output.icecast(%mp3(bitrate=128, samplerate=44100, stereo=true),

Внесём данные, уже прописанные в конфигурации Icecast.

mount = "autodj",
encoding = "ISO-8859-1",
default,
host = "ваш_домен", port = 8000, password = "ваш_пароль",
genre="other",
name="My radio",
fallible = true,
icy_metadata="true",
public=true,
url="http://ваш-url",
description="Вы слушаете BestRadio.")

Всё сохраняем. Ура! Мы готовы тестировать радио.

Любуемся результатами

Запускаем сначала Icecast:

/etc/init.d/icecast2 start

Теперь Liquidsoap:

service liquidsoap start

Создаём у себя на компьютере текстовый файл и вносим туда строку вида:

http://ваш-ip:8000/autodj

Сохраняем файл с расширением .m3u и открываем его в аудиопроигрывателе. Если в папке Music лежат треки, радио должно играть.

На этом пока всё. Надеюсь, материал был вам полезен. Если хотите, чтобы я раскрыл какие-то темы подробнее, оставьте комментарий. А пока — успеха в запуске вашего радио!

Хотите свободно работать с Debian и другими дистрибутивами Linux? Приходите учиться на профессию «системный администратор», и через 9 месяцев вы не только освоите Linux, но и сможете обеспечивать бесперебойную работу компьютерной техники и ПО в любой организации!
Оцените статью
Рейтинг: 2.33
( голосов 3 )
Поделиться статьей
Добавить комментарий

Сортировать:
По дате публикации
По рейтингу
До конца акции осталось
0 дней 00:00:00
Получите бесплатно 3 курса для лёгкого старта работы в IT
  • Начни зарабатывать от 210 000 ₽ в ИТ-сфере
  • Работай там, где ты хочешь: дома, на море, и даже на концерте
Получить бесплатно
Забрать подарок

Получите подробную стратегию для новичков на 2023 год, как с нуля выйти на доход 200 000 ₽ за 7 месяцев

Подарки от Geekbrains из закрытой базы:
Осталось 17 мест

Поздравляем!
Вы выиграли 4 курса по IT-профессиям.
Дождитесь звонка нашего менеджера для уточнения деталей

Иван Степанин
Иван Степанин печатает ...