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

Хочу разделить свой рассказ на две части:

1. Плеер изнутри (musiphone, museria-player)

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

Сервер:

const Node = require('musiphone').Node;
(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost',
      musicStorageAddress: 'storage.museria.com:80'
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

Клиент:

const Client = require(‘musiphone’).Client;
(async () => {
  try {
    const client = new Client({
      address: ‘localhost:4000’
    });
    await client.init();
    const title = ‘Playlist title’; 
    const songs = [
      ‘Onycs — Eden’,
      ‘Onycs — Shine’, 
      ‘Onycs — Timeless’
    ];
    // Add the playlist
    const response = await client.addPlaylist(title, songs);
    // Get the playlist
    const playlist = await client.getPlaylist(response.hash);
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

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

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

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

2.Проигрыватель извне (сайт, приложение для Android)

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

Интерфейс везде примерно одинаковый, поэтому разберем все на примере сайта.

Создайте и сохраните плейлист в сети.

Сначала вы попадаете в интерфейс с бобром и неактивной кнопкой «НОВЫЙ ПЛЕЙЛИСТ». Это означает, что создается новый список воспроизведения. Чтобы добавить песню, ее нужно найти в музыкальном хранилище с помощью поля ввода слева. Если нужной песни там нет, то вы можете добавить ее сами, нажав на ссылку «МУЗЫКАЛЬНОЕ ХРАНИЛИЩЕ» вверху, тем самым вы поможете себе и другим людям, которые будут искать ее в будущем.

Например, будут использоваться случайные песни, разрешенные для бесплатного распространения и прослушивания. Ищем "Оникс - Эдем"

В хранилище есть пара вариантов, их можно прослушать и добавить нужный, нажав на плюсик. Добавим несколько песен.

Теперь у нас три песни в плейлисте. Вы можете искать их, сортировать, перетаскивать и так далее. Коричневое предупреждение означает, что были внесены какие-то изменения и если вы не сохраните их в сеть, они исчезнут после очистки localStorage.

Попробуем сначала сохранить все в сеть. Для этого нажмите «СОХРАНИТЬ В WEB».

Вводим название и сохраняем.

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

Также мы видим, что коричневое предупреждение исчезло и появился синий блок, в котором у нас есть ссылка на плейлист. Вы можете дать эту ссылку любому человеку, и, нажав на нее, он увидит ту же картинку. Давайте создадим еще один плейлист. Для этого нажмите «НОВЫЙ ПЛЕЙЛИСТ». Повторите те же действия и получите:

Мы уже видим два плейлиста, а также сам плеер, который появился после нажатия на блок с песней.

Сохранение плейлистов в файл

Для большей надежности вы можете сохранять плейлисты в файлы. Для этого нажмите «СОХРАНИТЬ В ФАЙЛ». Файл будет сохранен в стандартном формате m3u и его можно будет скачать и прослушать в любом другом плеере.

Загрузка плейлистов

Чтобы загрузить список воспроизведения, нажмите «ЗАГРУЗИТЬ СПИСОК».

В модальном окне у нас есть две опции. Качаем либо по ссылке, либо из файла. В первом случае есть два типа ссылок:

  • Статическая ссылка. Это обычная хеш-ссылка на плейлист в репозитории: http://player.museria.com:80/musiphone/3deeb6052c5a46c05d6bec2cab5bade9
    Отсюда возникает вопрос: зачем его грузить через форму, если можно просто нажмите на нее. Дело в том, что во-первых, это необходимо для мобильной версии, а во-вторых, узлы, относительно которых создается ссылка, случайны. Это может быть неудобно, когда вы уже настроили свое окружение на каком-то хосте, потому что вся временная информация хранится в localStorage. Поэтому переходы по таким ссылкам удобны для ознакомления с плейлистами, но для формирования собственного пространства нужно работать с интерфейсом одного узла, например, по умолчанию: player.museria.com
  • Динамическая ссылка. Такая ссылка не связана с репозиторием, она должна содержать путь к любому допустимому файлу m3u/ответу сервера в Интернете. Контент будет автоматически преобразован в список воспроизведения приложения. Каждые 10 секунд будет новый фоновый запрос по этой ссылке на случай, если данные изменились и нужно обновить список. Динамическая ссылка преобразуется в следующий формат, чтобы ею также можно было поделиться: http://player.museria.com:80/musiphone/external:someUrlHash

В случае с файлом мы используем тот же формат m3u.

Все файлы m3u должны быть действительными, но не должны содержать пути к файлам. Названия песен достаточно для скачивания.

Конфигурации

Все, что вы настраиваете в плеере, сохраняется в localStorage. Для сохранения этой информации в файл (json) используйте кнопку СОХРАНИТЬ КОНФИГУРАЦИЯ, а для загрузки — ЗАГРУЗИТЬ КОНФИГУРАЦИЮ. Вы можете настраивать разные группы плейлистов, уровень громкости плеера и так далее, создавая разные конфиги. Вот вам, например, конфиг из примеров в этой статье.

Вы можете помочь проекту, запустив хотя бы одну ноду для музыкального хранилища на своем сервере объемом 50–1000Гб, с 2Гб ОЗУ и 2 ядрами. Чем больше узлов, тем больше песен доступно.

Или запустить ноду для сетевого игрока: от 300 МБ свободного места, 1 ГБ ОЗУ, 1 ядро.

Чем больше узлов, тем дольше живут ссылки.

Группа Telegram на английском, или просто напишите мне в личку @ortex.