Всем привет!

В какой-то момент я понял: музыка у меня есть – а контроля над ней нет...

В текущих условиях (цензура треков, отсутствие релизов, качество звука на стриминговых платформах) внезапно вышли из тени наши старые подходы: загрузка и прослушивание музыки локально. Лично у меня в шкафу до сих пор валяется старый Sony Ericsson K550i с флешкой Memory Stick Micro, где хранится капсула времени в виде низкокачественных MP3 файлов времён школы из нулевых. Конечно, мы не будем с вами слушать подобное сейчас, так как у нас имеется возможность достать почти любой релиз в формате без потерь или в более-менее приемлемом качестве. Именно такую собственноручно собранную коллекцию я и хочу слушать, прогуливаясь в наушниках по улицам в прекрасный весенний день.

Не долго думая, волевым решением я принялся собирать максимально простую схему:

  • свой стриминг музыки из облака;

  • без серверов, без сложной инфраструктуры;

  • с нормальным качеством (вплоть до lossless).

Что ж… Разберёмся, как это работает и как это собрать по-быстрому.

Архитектура решения

Схема придумана донельзя простая!

Архитектура решения
Архитектура решения

Берём Яндекс Диск, заливаем на него музыку, подключаемся через WebDAV в плеере – стриминг личной медиатеки готов!

Ключевой элемент здесь – WebDAV.

Что такое WebDAV и почему это стриминг

WebDAV – это расширение HTTP, которое позволяет работать с файлами на удалённом сервере как с локальной файловой системой.

Но самое интересное – плеер не скачивает файл целиком.

Он делает HTTP-запросы с заголовком:

...
Range: bytes=...
...

То есть:

  • загружает только нужные куски файла;

  • фактически реализует потоковое воспроизведение.

Поэтому:

  • старт воспроизведения быстрый;

  • трафик расходуется экономно;

  • можно перематывать без полной загрузки трека.

Обзаводимся всем необходимым

Итак! Что нам нужно иметь перед тем как сделать свой личный музыкальный стриминг?

  • Пространство на Яндекс диске (желательно > 1 TB для lossless);

  • Локальная медиатека с FLAC/ALAC/MP3/AAC...;

  • Плеер с поддержкой сетевых музыкальных источников: WebDAV (я использую Neutron).

Всё на месте? Можем приступать.

Загружаем музыку на Диск

Для начала создадим отдельную директорию на Диске для размещения в ней музыкальных файлов.

Создаём директорию для музыки на Яндекс Диске
Создаём директорию для музыки на Яндекс Диске

После чего заливаем свою музыку.

Так как у подопытного аккаунта установлен бесплатный тариф, на диске имеется всего 10 Гб доступного пространства. Для этого я сделал компромиссный вариант по качеству: сжал исходники lossless до lossy AAC 256 kbit/s через MediaHuman Audio Converter (бесплатный конвертер аудио) с сохранением всех тегов, после чего залил на Диск.

Вывод информации по одному из треков через ffmpeg после сжатия
Вывод информации по одному из треков через ffmpeg после сжатия
Сжатое аудио в AAC
Сжатое аудио в AAC
Загруженная музыка исполнителей на Диск
Загруженная музыка исполнителей на Диск

Получение токена для WebDAV доступа к Диску

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

Создание пароля для доступа к Диску

Переходим в на страницу «Пароли приложений» под своим аккаунтом Яндекса, на диск которого мы залили нашу медиатеку, и выбираем «Файлы — WebDAV»

Будет предложено задать имя для пароля. Тут вводим любое. Главное, не забыть, для чего именно он создан. Я назвал просто Neutron — сразу понятно, что использоваться он будет в плеере.

Создание пароля приложения для доступа к Диску
Создание пароля приложения для доступа к Диску
Создание пароля приложения для доступа к Диску
Создание пароля приложения для доступа к Диску

Сохраняем полученную комбинацию в надёжное место. Её мы и скормим Neutron'у для доступа к своей медиатеке на Диске.

Подключение к Диску в плеере (на примере Neutron)

Открываем Neutron и сразу идём по пути Настройки – Медиатека – Источники. Здесь как раз и подключим наш Диск с музыкой.

Выбираем источник WebDAV и заполняем необходимые поля:

  • Адрес: https://webdav.yandex.ru/

  • Описание: любое

  • Логин: email адрес аккаунта с Яндекс Диском

  • Пароль: тот самый пароль, который мы получили на предыдущем шаге.

Добавление нового источника WebDAV в Neutron Player
Добавление нового источника WebDAV в Neutron Player

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

Выбор директории с музыкой на Диске в плеере
Выбор директории с музыкой на Диске в плеере

Далее, остаётся только дождаться, когда плеер сформирует медиатеку.

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

Прослушивание музыки с Яндекс Диска в Neutron
Прослушивание музыки с Яндекс Диска в Neutron

Подводные камни

Вот тут начинается самое интересное. Нет идеальных схем. Недостатки не обошли стороной и моё решение.

1. Индексация

Может быть оооочень медленной.

Причин немного, но они всё-таки есть:

  • WebDAV не самый быстрый протокол;

  • много мелких файлов.

2. Задержки при воспроизведении

Особенно, если

  • слабый интернет;

  • большой FLAC.

3. Потенциальные ограничения облака

Сам я с таким не сталкивался, но Яндекс в любой момент может вставить палки в колёса:

  • порезать скорость;

  • ограничить количество запросов.

Будем надеятся, что этого не случится!

4. Нет "моей волны"

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

Когда это решение идеально?

Эта схемка подойдёт вам, если

  • вы собираете личную медиатеку;

  • у вас есть Яндекс Диск и много пространства на нём;

  • надоели стриминговые платформы;

  • хочется полный контроль над своей музыкой.

Заключение

Лично для меня вышеописанная схема стала идеальным вариантом.

Всё делается максимально просто:

  • загружаю музыку в облако;

  • открываю плеер;

  • обновляю медиатеку;

  • слушаю.

И больше не думаю о том:

  • удалят ли трек;

  • испортят ли качество;

  • исчезнет ли альбом;

  • и об остальных прихотях платформ.

Теперь у меня свой личный стриминг с блэкджеком и личной медиатекой и Neutron'ом!