Как стать автором
Обновить
3164.75
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Стриминг музыки со своего сервера

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров14K


YouTube Music, «Яндекс Музыка», Spotify, SoundCloud — относительно удобные музыкальные сервисы, но с недостатками:

  • плохая работа в офлайне;
  • отсутствие поддержки lossless;
  • абонентская плата;
  • неполная фонотека;
  • многое другое...

Их коллекции далеки от полноты. Редких треков вообще нет. Более того, музыка иногда просто пропадает из-за каких-то заморочек с авторскими правами.

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

Медиасерверы


Начнём с того, что существуют универсальные медиасерверы типа Plex и Jellyfin, которые тоже умеют транслировать медиаконтент (включая музыку) на любые устройства по локальной сети или через интернет.

У Plex есть официальный мобильный клиент Plexamp специально для прослушивания музыки на смартфоне:


Plexamp

Кроме того, для Plex и прочих выпускается много вспомогательных программ, как менеджер контента Overseerr (система рекомендаций, запросы новых фильмов и сериалов), то есть Plex — это целая экосистема контента, в которой можно жить, и там тоже есть платная подписка с премиальными функциями.


Overseerr

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

Black Candy


Black Candy — один из множества стриминговых музыкальных серверов на самохостинге.



Начнём с установки VPS. В маркетплейсе RUVDS имеется готовый образ сервера с установленным Docker CE. Проще всего сразу его и поставить, хотя никто не мешает взять совсем дешёвый сервер в минимальной конфигурации и установить Docker самостоятельно.



Образ включает в себя Docker CE 19.03.5 и Docker Compose 1.25.0 под Ubuntu 18.04. Софт настроен в соответствии с официальными рекомендациями.

Как обычно, установка системы занимает несколько минут, после чего сервер готов к работе. Сразу после оформления заказа выделяется статический IP-адрес, логин и пароль для авторизации SSH.

Запускаем SSH-клиент PuTTY


… подключаемся к серверу…



… и устанавливаем контейнер Black Candy:

docker run -p 3000:3000 ghcr.io/blackcandy-org/blackcandy:latest



Как вариант, можно загрузить контейнер с репозитория Docker Hub:

docker run -p 3000:3000 blackcandy/blackcandy:latest

Это всё, теперь сервер доступен из браузера на хосте по адресу http://localhost:3000 или через интернет по адресу http://IP_сервера:3000, в нашем случае http://195.133.48.189:3000, имя пользователя по умолчанию admin@admin.com, пароль foobar. Разумеется, учётные данные лучше поменять в настройках.



Демо-версию сервера см. на сайте demo.blackcandy.org, логин и пароль такие же, как указано выше.



На вкладке «Библиотека» (Library) можно просмотреть все альбомы, музыкантов, плейлисты и песни, которые есть в фонотеке. Картинки альбомов подтягиваются через Discogs API, надо получить там токен и указать его в настройках.



В правом верхнем углу кнопка для доступа к настройкам Black Candy:



Приведём некоторые параметры, которые можно указать в командной строке при запуске сервера.

Следующая команда позволяет примонтировать папку с медиафайлами в контейнер и устанавливает для Black Candy переменную окружения MEDIA_PATH с путём к файлам.

docker run -v /media_data:/media_data -e MEDIA_PATH=/media_data ghcr.io/blackcandy-org/blackcandy:latest

Эта опция присутствует и в настройках через GUI. Нужно просто скопировать на сервер папку с файлами и примонтировать её.

Кроме MEDIA_PATH, есть ещё несколько переменных окружения, в том числе FORCE_SSL для принудительного включения SSL, а также DB_ADAPTER и DB_URL для выбора СУБД.

По умолчанию Black Candy устанавливает SQLite как более простую СУБД для маленького сервера. Но если SQLite недостаточно или мы размещаемся у какого-то специфического хостинг-провайдера, то можно использовать PostgreSQL:

docker run -e DB_ADAPTER=postgresql -e DB_URL=postgresql://yourdatabaseurl ghcr.io/blackcandy-org/blackcandy:latest

Для сохранения всех данных и рабочих файлов Black Candy из /app/storage в постоянном хранилище можно создать отдельную директорию и примонтировать туда /app/storage:

mkdir storage_data

docker run -v ./storage_data:/app/storage ghcr.io/blackcandy-org/blackcandy:latest

Для комфортного прослушивания фонотеки на смартфонах есть нативные клиенты Black Candy под Android и iOS. Хотя в принципе сервер нормально доступен из браузера, как указано выше.

В приложении указываем IP-адрес сервера (с портом), логин и пароль — и получаем доступ к фонотеке.

По умолчанию сервер Black Candy выполняет автоматическое транскодирование музыки в lossy-формат 128 Кбит/с для экономии трафика, но это можно изменить в настройках.

Другие стриминг-серверы


Кроме Black Candy, существует множество других серверов для музыки со стримингом, в том числе опенсорсных. Среди них можно упомянуть Subsonicдесятками приложений для Android, iPhone, Windows Phone, Mac, Chrome), Navidrome, Icecast, Snapcast, Koel, OwnTone, Lyrion Music Server и др.

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


Архитектура Snapcast

Navidrome отличается очень низким потреблением ресурсов, работает даже на слабеньких «малинках» или старых мобильных телефонах Android, без тормозов обрабатывает большие музыкальные коллекции и любые аудиоформаты, поддерживает транскодирование на лету и пр. Можно использовать как портативный плеер или как сервер для трансляции на другие устройства, демо.


Сервер Navidrome


Клиенты Navidrome

Есть даже такие экзотические варианты, как Musikcube: аудиоплеер и медиасервер с текстовым интерфейсом, работающий из консоли:



Не забываем и Music Player Daemon (MPD), классический музыкальный сервер/плеер под Linux.

Медиасервер на смартфоне


В качестве альтернативы всему вышеперечисленному, можно организовать музыкальный стриминговый сервер на старом Android-смартфоне. В описании по ссылке приведена пошаговая инструкция и код, проверено на Samsung Galaxy S7, но сработает и на других смартфонах, куда можно поставить LineageOS и Termux.

Использовались следующие инструменты:

  • LineageOS с последующим удалением всех лишних компонентов, чтобы освободить максимум памяти для сервера;
  • Termux, Termux:Services, Termux:Boot;
  • сервер Navidrome, упомянутый выше в числе лучших серверов для стриминга;
  • ssh + sftp через OpenSSH;
  • Dynamic DNS через Cloudflare.

Можно ещё использовать приложение scrcpy, которое умеет дистанционно управлять Android-устройствами (видео, аудио), в том числе по TCP/IP, то есть через интернет, что очень удобно.

Среди функций:


То есть можно дистанционно запустить на смартфоне плеер на воспроизведение музыки.

Утилита работает под Linux, Windows и macOS.

▍ Итоги


Благодаря своему серверу или VPS получается отличная альтернатива «Яндекс Музыке» — более продвинутая, с лучшей фонотекой. И бесплатно, если не считать амортизации сервера или оплаты VPS. Но учитывать такую плату не совсем справедливо, потому что тот же сервер у нас используется для десятка других применений: резервное копирование, управление умным домом, скачивание торрентов, частный VPN и многое другое, поэтому музыкальный стриминг идёт просто бонусом.

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

© 2025 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
Теги:
Хабы:
+58
Комментарии43

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds