- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

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

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

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

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

Black Candy

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

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

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

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

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

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

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

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

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

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

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

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

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

Как вариант, можно загрузить контейнер с репозитория 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. Разумеется, учётные данные лучше поменять в настройках.

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

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

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

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

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

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

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

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

Следующая команда позволяет примонтировать папку с медиафайлами в контейнер и устанавливает для 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, есть ещё несколько переменных окружения [20], в том числе FORCE_SSL для принудительного включения SSL, а также DB_ADAPTER и DB_URL для выбора СУБД.

По умолчанию Black Candy устанавливает SQLite как более простую СУБД для маленького сервера. Но если SQLite недостаточно или мы размещаемся у какого-то специфического хостинг-провайдера [12], то можно использовать 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 [21] и iOS [22]. Хотя в принципе сервер нормально доступен из браузера, как указано выше.

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

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

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

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

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

Стриминг музыки со своего сервера - 13
Архитектура Snapcast

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

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

Стриминг музыки со своего сервера - 15
Клиенты Navidrome

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

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

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

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

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

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

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

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

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

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

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

▍ Итоги

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

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

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

Автор: ru_vds

Источник [53]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/414091

Ссылки в тексте:

[1] Image: https://habr.com/ru/companies/ruvds/articles/891848/

[2] YouTube Music: https://music.youtube.com/

[3] «Яндекс Музыка»: https://music.yandex.by/

[4] Spotify: https://www.spotify.com/

[5] SoundCloud: https://soundcloud.com/

[6] Plex: https://www.plex.tv/

[7] Jellyfin: https://jellyfin.org/

[8] Plexamp: https://www.plex.tv/plexamp/

[9] Overseerr: https://github.com/sct/overseerr

[10] Black Candy: https://github.com/blackcandy-org/blackcandy

[11] множества: #1

[12] VPS: https://www.reg.ru/?rlink=reflink-717

[13] готовый образ сервера с установленным Docker CE: https://ruvds.com/ru/mp/docker/

[14] совсем дешёвый сервер: https://ruvds.com/ru/cheap-vps/

[15] официальными: https://docs.docker.com/install/linux/docker-ce/ubuntu/

[16] рекомендациями: https://docs.docker.com/compose/install/#install-compose

[17] PuTTY: https://www.putty.org/

[18] demo.blackcandy.org: https://demo.blackcandy.org/

[19] Discogs API: https://www.discogs.com/developers?

[20] несколько переменных окружения: https://github.com/blackcandy-org/blackcandy?tab=readme-ov-file#environment-variables

[21] под Android: https://github.com/blackcandy-org/android

[22] iOS: https://github.com/blackcandy-org/ios

[23] Subsonic: https://www.subsonic.org/

[24] десятками приложений: https://www.subsonic.org/pages/apps.jsp

[25] Navidrome: https://www.navidrome.org/

[26] Icecast: https://icecast.org/

[27] Snapcast: https://github.com/badaix/snapcast

[28] Koel: https://github.com/koel/koel

[29] OwnTone: https://owntone.github.io/owntone-server/

[30] Lyrion Music Server: https://lyrion.org/

[31] демо: https://www.navidrome.org/demo/

[32] Musikcube: https://musikcube.com/

[33] Music Player Daemon: https://www.musicpd.org/

[34] на старом Android-смартфоне: https://github.com/davidhampgonsalves/music-server

[35] LineageOS: https://lineageos.org/

[36] Termux: https://termux.dev/

[37] Dynamic DNS через Cloudflare: https://github.com/timothymiller/cloudflare-ddns

[38] scrcpy: https://github.com/Genymobile/scrcpy

[39] по TCP/IP: https://github.com/Genymobile/scrcpy/blob/master/doc/connection.md#tcpip-wireless

[40] переадресация аудио: https://github.com/Genymobile/scrcpy/blob/master/doc/audio.md

[41] аудио- и видеозапись: https://github.com/Genymobile/scrcpy/blob/master/doc/recording.md

[42] виртуальный дисплей: https://github.com/Genymobile/scrcpy/blob/master/doc/virtual_display.md

[43] с выключенным экраном: https://github.com/Genymobile/scrcpy/blob/master/doc/device.md#turn-screen-off

[44] копипаст в обоих направлениях: https://github.com/Genymobile/scrcpy/blob/master/doc/control.md#copy-paste

[45] настройка качества: https://github.com/Genymobile/scrcpy/blob/master/doc/video.md

[46] трансляция камеры: https://github.com/Genymobile/scrcpy/blob/master/doc/camera.md

[47] в качестве веб-камеры (V4L2): https://github.com/Genymobile/scrcpy/blob/master/doc/v4l2.md

[48] клавиатуры: https://github.com/Genymobile/scrcpy/blob/master/doc/keyboard.md#physical-keyboard-simulation

[49] мыши: https://github.com/Genymobile/scrcpy/blob/master/doc/mouse.md#physical-mouse-simulation

[50] геймпада: https://github.com/Genymobile/scrcpy/blob/master/doc/gamepad.md

[51] режим OTG: https://github.com/Genymobile/scrcpy/blob/master/doc/otg.md

[52] Syncthing: https://syncthing.net/

[53] Источник: https://habr.com/ru/companies/ruvds/articles/891848/?utm_source=habrahabr&utm_medium=rss&utm_campaign=891848