Как я сделал свое первое Стрим-Радио 24/7 — Mikulski
Наложение сайта

Как я сделал свое первое Стрим-Радио 24/7

Предисловие

Внимание! В данной статье описываются принципы настройки и работы python скрипта ffplayout версии 3.5.x
Разработчик заявил, что версия 4.0 является последней на python, и в дальнейшем основа кода будет заменена на язык программирования Rust.
Обн.: Гайд, к сожалению, во многом устарел.
А также, я перешел на Liquidsoap - https://mikulski.rocks/ru/lofi-strim-24-7-guide/ - здесь более актуальная информация.

Идея о том, чтобы сделать свое собственное радио (которое транслирует плейлист с видеороликами 24/7) появилась давно. Это было логично: за пару лет стриминга накопилось 4,5 часа хронометража джем-импровизаций (хайлайтов), которые я монтировал таким образом, чтобы они могли звучать как самостоятельные произведения (вырезая общение с чатом и склеивая встык удачные петли). Также подкупали преимущества этой затеи: созданный контент не лежит без дела, удобно для сообщества (в любой момент можно зайти на канал и послушать музыку, не покидая Twitch), ну и перспектива привлечь нового слушателя за счет постоянного присутствия в эфире.
Сама по себе задача была максимально простой: есть папка с кучей файлов mp4, чей порядок воспроизведения нужно перемешать, зациклить и выпустить в эфир. Ну и в идеале, чтобы при добавлении новых файлов не требовалось перезапускать стрим, но это не принципиально. Никаких технологических изысков: низкий битрейт и разрешение, т.к. главный упор на звук, а не на картинку и никаких оверлеев, т.к. они ни к чему.
Было понятно, что для таких целей необходим виртуальный выделенный сервер (VPS), потому как физический ПК работающий круглосуточно под боком несет массу неудобств. Но VPS, как правило, не имеет предустановленной графической оболочки и все управление системой происходит через командную строку, поэтому не получится парой кликов установить OBS и запустить там VLC-плейлист. В общем, человеку несведущему (такому как я) ни в программировании, ни в системном администрировании придется несладко.
Сделать рабочий проект получилось далеко не сразу. Ушла куча времени на поиск инструментов, на пробы и ошибки с ковырянием найденного. Но все получилось.
Чтобы не тратить время и терпение тех людей, кто разбирается в техническом аспекте, то сперва вкратце расскажу о нужном скрипте. После чего уже перейду к подробному описанию всех шагов и нюансов, стараясь дать понятную инструкцию для тех, кто вообще никогда не имел дела со скриптами и виртуальными выделенными серверами. Ну и в самом конце комментарий о некоторых нюансах.

ffplayout

ffplayout — это набор инструментов в виде Python-скриптов, который заточен на воспроизведение видеофайлов 24/7.
Ядро скрипта — это движок ffplayout_engine . Именно он обрабатывает файлы/плейлисты и выводит их в трансляцию. Для вывода потока используется ffmpeg, который сам по себе уже многое умеет (декодировать, конвертировать, склеивать между собой различные аудио/видео форматы и даже выводить файлы на стрим), но им не предусмотрена трансляция списка файлов (насколько я понял), поэтому и требуется дополнительный скрипт.
Из-за вот таких особенностей ffmpeg, — похожий и более популярный python-скрипт pylivestream , который тоже может брать список файлов из папки и зацикливать его, перезапускает стрим на каждый (!) файл.
ffplayout_engine работает так, что запускается два экземпляра ffmpeg, первый из которых подготавливает файлы, а затем посылает их во второй экземпляр, который уже совершает финальное сжатие и отправляет на стрим, работая непрерывно. Таким образом, получается бесконечная трансляция.
Чтобы все это заработало, надо установить python3, ffmpeg, сам скрипт (следуя его инструкции) и отредактировать файл ffplayout.yml, подставив в определенные строки свои значения и запустить скрипт с нужными аргументами. По идее, все. Но у меня возникла одна проблема, которая вызывала ошибку, поэтому пришлось править еще один файл. Но об этом ниже.
Все остальные скрипты из пачки, так или иначе расширяют его функционал.
Например, playlist-generator генерирует плейлисты в формате json, которые необходимы для функции воспроизведения плейлистов. Впрочем, их можно создавать и вручную. В любом случае, я не пользуюсь плейлистами, поэтому с этим инструментарием вам придется разобраться самостоятельно.
А комбинация ffplayout-api и ffplayout-frontend и вовсе позволяет управлять скриптом через веб-браузер и графическую оболочку в нем. Но, конечно, придется попотеть с настройками. В моем же случае, я не вижу в этом необходимости.

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

Выбор VPS

На рынке огромный выбор провайдеров, которые предлагают аренду VPS и все тарифы плюс-минус одинаковые. Чем дороже, тем больше мощностей дают нам в пользование. Как правило, предлагают уже готовые конфигурации, а в некоторых случаях, компоненты можно выбрать самому. Основные характеристики следующие:

  • Количество ядер ЦПУ — чем больше, тем выше производительность. А значит выше битрейт и разрешение стрима. Декодирование видеопотока очень требовательно и сильно нагружает процессор.
  • Оперативная память — много ее не нужно и 1 ГБ (даже 0,5 ГБ) вполне хватит для наших целей.
  • Объем жесткого диска — очень важный фактор! Мой плейлист, хронометражем в 4,5 часа и разрешении 720p занимает 5 ГБ (с битрейтом в среднем, 3000kbs), а в 1080 — все 11 ГБ. Плюс следует учитывать примерно 2,5 ГБ, которые займет операционная система.
  • Исходящий трафик — как правило, в платных тарифах трафик безлимитный. Но на это тоже стоит обратить внимание и рассчитать трафик заранее, если его объем ограничен месячным лимитом: количество секунд в месяц x битрейт = наш трафик.
    Например, мы планируем, стримить в разрешении 720p с битрейтом 3000kbps (3 mbps):
    2592000 секунд в месяц Х 3mbps битрейта= 7776000mb, конвертируем эту величину в Терабайты (обычно трафик указывается в ТБ) через любой онлайн конвертер величин и получаем 0,93 ТБ в месяц. Следовательно, 1 ТБ трафика в месяц будет плюс-минус хватать для трансляции в 720p.
    Соответственно, для 1080p и 6000kbps битрейта, уже надо присматривать варианты с трафиком от 2 ТБ в месяц.

Так как я не обладаю солидным бюджетом и нет уверенности, что радио будет возможно монетизировать, то пришлось выбрать самый дешевый вариант (для удобства я выбрал того же провайдера, который хостит мой сайт — beget.com):
1 ЦПУ (Intel Xeon 3,2 Ггц) / 1 ГБ RAM / 15 ГБ хранилище / безлимитный трафик
Сие удовольствие стоит 330р в месяц ($5) или 11 рублей в сутки.
Этой конфигурации вполне хватило, чтобы запустить стрим в 720p, 30 fps, но с пониженным битрейтом 2000kbps (вместо рекомендованных Твичем 3000kbps) и видео-профилем ffmpeg — veryfast.
Но! Нагрузка на ЦПУ была очень высокой и не падала меньше 97% с периодическим пробиванием до 100,5%. И несмотря на то, что это никак не сказывалось на стриме, я все равно решил понизить разрешение до 576p, чтобы сбавить нагрузку. Битрейт и профиль остались прежними, а нагрузка в итоге снизилась до 72%.


Конечно, разрешение 1024×576 не ахти, но я все же решил, что картинка менее важна, чем звук, да и меньшее разрешение значит больший охват устройств с плохим интернетом и производительностью.
К тому же, следующий доступный тариф, конечно, удваивает все характеристики, но и цена удваивается тоже. Что на сегодняшний день просто не по карману.

Впоследствии, я сумел найти конфигурацию для запуска стрима в 720p с битрейтом в 3000kbps. Потребовалось всего лишь установить preset в режим superfast. Нагрузка на ЦПУ в этом случае составляет 80-85%.

Вообще, изначально рассматривался и вовсе бесплатный вариант. У Oracle есть интересное предложение Oracle Always Free. В него входит виртуальная машина с 1 ЦПУ / 1 Гб ОЗУ / 10 Гб хранилище / 10 (!) Тб трафика. Чего бы вполне хватило для моих нужд (кроме, быть может, объема хранилища, но если перендерить все файлы в 576p, то можно выиграть еще несколько Гб пространства). Но у меня так и не получилось пройти регистрацию: сервис постоянно выдавал ошибку после попытки привязки пластиковой карты (я перепробовал в итоге все имеющиеся карты) к аккаунту. Бояться не стоит: деньги без вашего согласия никто списывать не станет и если не выходить за рамки Always Free-сервисов, то все так и останется бесплатным.
Тем не менее, мне так и не удалось воспользоваться этим предложением. На мой запрос в тех.поддержку тоже не ответили (что очень странно), поэтому о каких-либо подводных камнях и работоспособности этой конфигурации в качестве радио не могу ничего сказать. Но обратить внимание на эту возможность все же думаю стоит. Вдруг у вас сработает.

Еще можно ознакомиться с тем, что включает в себя админ-панель провайдера. Я так понимаю, что «Терминал» (то бишь, командная строка через которую происходит управление сервером) всегда присутствует в арсенале. Плюсом будет наличие «Файл-менеджера» — оболочки наподобие Norton Commander с помощью которой, можно будет удобно загружать, перемещать и редактировать файлы в файловой системе сервера. Это некритично, ведь отредактировать все файлы, можно будет и через утилиты командной строки (или у себя на ПК, а затем загрузить на сервер).
В моем случае, провайдер предоставляет и то и другое. Но как дело обстоит дело у других провайдеров мне, к сожалению, неизвестно, т.к. я никогда прежде не пользовался подобными сервисами.

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

При создании VPS нас спросят какую установить операционную систему.
Я выбрал Ubuntu 20.04, поэтому все дальнейшие шаги будут применительно к этой ОС.
Придумайте название для сервера (если нужно), задайте пароль (или запишите предлагаемый), включите ssh (если есть такой чекбокс — он нужен для работы Файл-менеджера).
После создания сервера, откройте Терминал в админ-панеле.
Login: root (как правило),
Password: ваш_пароль (вводимые значения в строке пароля видны не будут — это нормально, не стоит пугаться).
Также можно подключиться к серверу через утилиту Windows — Powershell. Там нужно будет ввести следующую команду:

ssh root@ip_адрес_вашего_сервера

После чего вводим пароль — и получаем доступ к серверу.
Но при использовании Windows Powershell важно понимать, что при его закрытии, процесс выполнения скрипта прекратится тоже! Решается это вводом команды запуска скрипта с определенными аргументами (об этом я еще упомяну далее). Либо же запустить его через Терминал провайдера: в моем случае, после закрытия Терминала, процесс не прерывается.

Еще один важный момент!
В ОС серверов не работают привычные комбинации Копировать-Вставить! CTRL+C — прерывает текущий процесс выполнения запущенной программы (что пригодится нам для остановки скрипта, если что-то пойдет не так). В некоторых случаях эта комбинация заменена на CTRL+SHIFT+C (V) или CTRL+SHIFT+ALT+C (V). Но и это не всегда срабатывает. В Windows Powershell вставка из буфера совершается правым кликом мыши!
Клавиша «стрелка вверх», позволяет вызвать в строке последнюю вводимую команду.


Первым делом устанавливаем FFMPEG, введя несколько команд:

sudo apt update
sudo apt install ffmpeg

Походу процесса установки, соглашаемся с вносимыми изменениями. FFMPEG последней версии будет установлен! Нам нужна версия 4.2 и выше. Можно проверить текущую версию с помощью команды:

ffmpeg -v

Скрипт ffplayout требует Python версии 3.7 и выше. Обычно, в состав ПО по умолчанию, входит какой-либо Python, но на всякий случай установим последнюю версию:

sudo apt update
sudo apt install python3.9

После этого можно переходить к установке и настройке скрипта.

Установка ffplayout

Следуя инструкции, приложенной к скрипту, устанавливаем сперва сам скрипт:

git clone https://github.com/ffplayout/ffplayout_engine.git

Скрипт установится в директорию /opt/ffplayout_engine , с помощью команды cd направляемся туда:

cd /opt/ffplayout_engine

Надо создать виртуальную среду:

virtualenv -p python3 venv

И запустить:

source ./venv/bin/activate

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

pip3 install -r requirements.txt

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

/var/log/ffplayout

И папку, где будут хранится наши видеофайлы (впрочем, это можно сделать и через Файл-менеджер, после чего загрузить туда ваши видеоролики; помните, что ОС чувствительна к регистру в названиях файлов и папок, т.е. Videos и videos будут восприниматься как разные директории):

/Videos

Все! Скрипт установлен и теперь можно переходить к его настройке.
Следует добавить, что скрипт сперва можно скачать к себе на ПК, отредактировать его и загрузить на сервер Zip-архивом и распаковать там куда нужно. Он также будет работать. Но я все же считаю, что лучше следовать рекомендованным шагам установки, чтобы избежать непредвиденных проблем.

Настройка ffplayout

Уточню еще раз! В данной инструкции я описываю вариант зацикленного воспроизведения видеофайлов из конкретной папки! Файлы в этой папке всегда можно переименовать, удалить или добавить новые без прерывания стрима*. Если вам необходимо создавать и чередовать плейлисты, то вам придется изучить это самостоятельно.

*по идее, так и должно быть. Но практика показала, что при добавлении или удалении файлов в папке, скрипт, несмотря на то, что фиксирует все изменения, начинает работать не совсем корректно. Выражается это в том, что скрипт воспроизводит не тот файл, который собирался воспроизвести изначально (например, неправильно отображается тайтл файла на экране или ломается порядок плейлиста). Поэтому, после правок, все же лучше перезапустить скрипт (в терминале можно вызвать последнюю вводимую команду, нажав на клавишу «стрелка вверх» — если сделать это быстро, то стрим не прервется). Впрочем, вполне вероятно, что эту проблему исправят в новых обновлениях скрипта.

Основной файл с настройками это ffplayout.yml. Открываем его текстовым редактором с правами на правку в Файл-менеджере.
Если Файл-менеджер отсутствует в админ-панеле провайдера, то можно воспользоваться встроенным редактором в консоль с помощью команды nano.
Сперва переходим в директорию скрипта:

cd /opt/ffplayout_engine

Открываем нужный файл в редакторе:

nano ffplayout.yml

Для сохранения изменений есть комбинация CTRL+O, выйти из редактора CTRL+X

интерфейс редактора в консоли

Ищем раздел processing:

Первым делом устанавливаем атрибуты наших видеофайлов (ширина, высота, соотношение, кол-во кадров). Для примера оставлю значения по умолчанию.
width: 1024
height: 576
aspect: 1.778 (это соотношение 16:9, его можно не трогать)
fps: 25

Поверх видео можно наложить какое-либо изображение (например, логотип). Следующие строчки предназначены для управления этой функцией (правда, я этим не пользуюсь и у меня она отключена):
add_logo: True (можно заменить на False, если эта функция не нужна)
logo: «docs/logo.png» (вместо «docs/logo.png» указываем путь к нужному изображению)
logo_scale: (по умолчанию здесь пусто; параметр отвечает за масштабирование добавленного изображения в формате ‘число:число’)
logo_opacity: 0.7 (степень прозрачности добавленного изображения)
logo_filter: «overlay=W-w-12:12» (этими параметрами можно изменять расположение добавленного изображения)

Также скриптом предусмотрена возможность нормализовать звук всех видео по громкости, редактируя числовые параметры фильтра. Я этим тоже не пользуюсь, т.к. мои файлы все примерно одной громкости. По умолчанию, выключено.
add_loudnorm: False
(чтобы активировать надо заменить на True)
loud_I: -18
loud_TP: -1.5
loud_LRA: 11


И последняя строчка отвечает за «использование одних и те же фильтров для нескольких выходов». Да, скрипт умеет транслировать стрим сразу на несколько площадок, но я предпочитаю пользоваться сервисом restream.io, просто потому что привык и так проще. Именно через него я транслирую одновременно на Twitch и Youtube.
Параметр оставляю без изменений.
output_count: 1


Сразу под разделом processing, находится раздел playlist:

В нем также необходимо внести одну правку в параметре playlist_mode. True — заменяем на False. Для того, чтобы скрипт запускал файлы из заданной папки, а не пытался найти json-плейлисты.

Далее правим раздел storage.

path: (здесь нужно указать путь к папке с видеофайлами в виде «/Videos» — косая черта и кавычки обязательны!)
filler_clip: (этот параметр нужен для плейлистов, в данном примере он не требуется и его можно пропустить)
extensions: (расширения файлов, которые скрипт должен отсканировать и выбрать в назначенной папке. По умолчанию назначены mp4 и mkv, но ffmpeg понимает очень много форматов, поэтому если необходимо, то можно добавить новые строчки с нужными расширениями)
shuffle: True (перемешать файлы в папке; по умолчанию включено — True)

*к сожалению, shuffle достаточно часто выкидывает повторы по прошествии некоторого времени, поэтому я предпочел отключить его. При этом список все равно перемешивается, просто порядок уже не меняется и каждый цикл он одинаков.

В следующей секции text можно взять название файла и отображать его поверх видео:

text_from_filename: True (включаем эту функцию, если нужно)
По умолчанию, тайтл отображается вместе с расширением файла (напр. Myvideo.mp4), что не очень эстетично. Регулируется это правкой параметра regex.
Тут необходимо знание регулярных выражений, чем я не владею, но get_ked любезно подсказал верную формулу (в кавычки заключать не нужно!):
regex: ([^\/]+)(?=.\w+$)


И последний раздел out:

Здесь надо указать битрейты и профили для кодировщика по аналогии с тем, как это делается в OBS:
maxrate 2000k (желаемый битрейт — чем больше, тем лучше картинка, но и больше нагрузки на ЦПУ; как ориентир можно взять значения видеофайлов, посмотрев их «Свойства»)
-bufsize 4000k (размер буфера — как правило, делается просто в два раза больше основного установленного битрейта).
-preset veryfast (по умолчанию установлен medium, но чем «быстрее» пресет, тем меньше нагрузка на ЦПУ, но и хуже картинка; рекомендуется значение veryfast как компромиссное)
-profile:v Main (можно оставить Main или поменять на High / я точно не могу сказать на что это влияет)
-ar 44100 (частота дискретизации аудио; можно установить 48000, но для экономии ресурсов рекомендую оставить 44100)
-b:a 128k (битрейт аудио; т.к. у нас главный контент это музыка, то лучше поставить 256k или 320k)

И последнее, что нужно сделать это задать площадку и ключ потока в следующей строке:
stream_output: >-
-f flv rtmp://localhost/live/stream

где rtmp://localhost/live/stream надо заменить на собственные значения.
Например для Twitch: rtmp://live-jfk.twitch.tv/app/ваш_stream_key

Вот официальный список rtmp-серверов Twitch со всеми адресами (ключ потока берется в разделе настроек вашего канала).
Аналогичным образом указываются и другие площадки. Например, упомянутый выше restream.io: rtmp://live.restream.io/live/ваш_stream_key


Все! Остается сохранить изменения и пробовать запуск!

Запуск ffplayout

Для запуска скрипта нужно перейти в директорию, где он находится:

cd /opt/ffplayout_engine

И ввести команду с нужными аргументами:

python3 ffplayout.py -l none -f /Videos -s now -t none -m stream

Где (для понятности):
python3 — это то чем мы хотим открыть файл ffplayout.py (скрипт Python)
-l none (куда выводить лог: none — прямо в консоль / «путь» в указанный файл)
-f /Videos (здесь нужно указать путь к папке с видеофайлами!)
-s now -t none (время старта и продолжительность плейлиста)
-m stream (режим вывода)

Если вы вводите команду из Windows Powershell (но я все же советую запускаться из Терминала админ-панели), или если по какой-то причине, закрывая Терминал, скрипт останавливает работу, то нужно добавить несколько дополнительных аргументов (это должно сработать):

nohup python3 -u ffplayout.py -l none -f /Playlist -s now -t none -m stream &

В общем, активировав скрипт, все должно заработать и стрим запустится. Сообщение ffmpeg contains no libfdk-aac! No high quality aac… — можно проигнорировать, все в порядке! В консоли вы увидите нечто подобное:

В случае, если что-либо пойдет не так и по экрану поползут ошибки, не пугайтесь, а просто жмите CTRL+C, чтобы остановить процесс. И смотрите в чем причина: может быть, вы ошиблись где-то с указанием директории. В любом случае, лог укажет вам на проблемное место.

Проблема с которой я столкнулся

У меня же при первом запуске понеслась по экрану целая вереница с одной и той же ошибкой, вызванная Buffer Overstuffed (или что-то в этом духе, точно уже не помню). Я так и не смог понять в чем причина (ошибка просто не гуглилась, а в разделе issues на гитхабе не было ни у кого такой проблемы). Но обратил внимание, что в Decoder CMD (это тот экземпляр ffmpeg, который подготавливает файлы) стоят очень высокие значения — 90000k.
Не знаю каким чудом, но все же я нашел решение этой проблемы.

Нужно найти файл stream.py в следующей директории /ffplayout_engine/ffplayout/output/stream.py и отредактировать его.

Здесь нас интересует раздел ff_pre_settings.
В общем, после какого-то времени жонглирования разными параметрами (смены fps, формата видео и битрейта), я пришел к тому, что не нужно ничего трогать кроме двух:
{pre.v_bitrate} и {pre.v_bufsize} — отвечающие за битрейт и размер буфера.
Размер буфера я взял из строчки выше — 65424, а битрейт установил методом подбора (если ставить слишком низкие значения, то скрипт также отказывался работать, выдавая ошибку). В общем, получилось так:
‘-b:v’, f'{20000}k’,
‘-minrate’, f'{20000}k’,
‘-maxrate’, f'{20000}k’,
‘-bufsize’, f'{65424}k’

Не знаю, конечно, насколько это технически верно, но после этого скрипт запустился и прекрасно работает уже 4 дня без перерывов. А что еще нужно?

Альтернативные варианты

Выше описанный способ, несмотря, на всю кажущуюся громоздкость — самый простой и дешевый.
Сервисы с коробочными решениями навроде permastream.io просят немалые деньги — самый дешевый тариф стоит 30 долларов в месяц, при том, что видео крутить не получится: только аудио и гифка. Или Nimble Streamer бесплатный плагин к платной (тарифы начинаются от тех же 30 долларов) WMSpanel.
restream.io предлагает тоже что-то подобное с трансляцией предзаписанных видео, но там жесткие ограничения по хронометражу и размеру хранилища, а цены еще выше.
Распространенный и популярный способ это написание собственного скрипта на основе Luiquidsoap + все тот же ffmpeg. Но здесь надо обладать программистскими навыками и потратить время на написание скрипта. Зато возможности и кастомизация выйдут на совершенно иной уровень.
Упомянутый выше python-скрипт PyLivestream, конечно, классная штука и неплохая альтернатива OBS, но не приспособленная для воспроизведения списка файлов (хотя такая функция туда приложена, но работает не так, как ожидается).
Конечно же есть и вариант установки графической оболочки на сервер, а затем через удаленное подключение к рабочему столу уже управлять виртуальной машиной. Установить OBS и все необходимое. Но здесь сперва тоже надо поковыряться с настройками и сделать удаленное подключение по RDP (что у меня, честно говоря, не вышло с одной попытки), да и нагрузка, вероятнее всего увеличится.
В процессе поиска мне попался еще RTMP-Playlist, который как раз использует Luquidsoap, но у меня уже не было необходимости в нем разбираться, так как ffplayout уже был в эфире. Но может быть, кому-то пригодится.

Еще пара мелочей

Как известно, максимальная продолжительность стрима на Твиче 48 часов. Но беспокоиться не стоит: по истечении этого времени, Твич без всяких вмешательств просто обнулит таймер и перезапустит поток на своей площадке. От вас никаких дополнительных действий не потребуется. Впрочем, иногда случается и такое, что Твич не стартует, поэтому временами придется перезапускаться вручную. С Ютубом таких случаев я не наблюдал и теоретически трансляция там может идти вечно, но и видео не сохранится: при обрыве или ручной остановке стрима, останется ролик с огромным количеством часов в ленте канала, но воспроизвести его будет невозможно.
ffplayout может без остановки стрима добавлять новые файлы в папку*, но вот менять битрейт и прочие значения «на лету» не получится. Придется перезапускать скрипт, чтобы изменения вступили в силу.

*по идее, так и должно быть. Но практика показала, что при добавлении или удалении файлов в папке, скрипт, несмотря на то, что фиксирует все изменения, начинает работать не совсем корректно. Поэтому, после правок, все же лучше перезапустить скрипт (в терминале можно вызвать последнюю вводимую команду, нажав на клавишу «стрелка вверх» — если сделать это быстро, то стрим не прервется). Впрочем, вполне вероятно, что эту проблему исправят в новых обновлениях скрипта.

Насколько вообще целесообразно заморачиваться подобным каналом? Сложно сказать. Так как идея давно витала в воздухе, а в декабре 2021го я вдруг сильно захотел успеть запустить его до конца года, то решил сперва потестировать замысел на физическом ПК. Старт прошел неплохо и с пускай небольшим, но все же ажиотажем: аудитории основного канала понравилось, что теперь есть ресурс для фоновой музыки моего сочинительства. Ну и в целом, наблюдалось какое-то мало-мальское движение, поэтому было принято решение доводить замысел до конца. Так что, если сомневаетесь, то можно сперва погонять свое радио и с физического ПК (необязательно 24/7, а включая время от времени), а по итогам уже решать — арендовать VPS или нет.


Если этот материал вам пригодился и у вас есть возможность,
то поддержите автора и сайт небольшим донатом:

Спасибо💛