XSPF — формат плейлистов по умолчанию

Как вы могли заметить, в AIMP v5.03 для Windows и в AIMP v3.30 для Android формат XSPF стал форматом плейлистов по умолчанию. Что это за формат и зачем это было сделано?

О формате

XSPF (XML Shareable Playlist Format) это стандарт формата данных для плейлистов, основанный на XML. Формат был разработан Xiph.Org Foundation и выпущен в 2005 году. Главными особенностями формата являются: открытость, бесплатность, портативность и расширяемость.

В AIMP поддержка XSPF появилась v2.60 в 2009 году. Однако плеер научился только импортировать плейлисты этого формата — возможности экспорта не было. Поддержка экспорта появилась лишь сейчас, в v5.03, когда XSPF стал форматом плейлистов по умолчанию.

Формат по умолчанию

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

До недавнего времени, мобильная версия использовала по умолчанию бинарный формат плейлистов (AIMPBPL), а настольная — текстовый (AIMPPL4). Обусловлено это было тем, что разбор текстового плейлиста на андроид занимал на порядок больше времени, чем бинарного. Единственным вариантом перенести плейлист с ПК на телефон было экспортировать его в формат M3U8. Однако M3U8 не поддерживал и половины возможностей, что есть в AIMP. Например, разбиение файлов с использованием CUЕ — ссылки на такие файлы просто становились некорректными.

По началу, мы рассматривали вариант научить мобильную версию работать с форматом AIMPPL4, но после первого прототипа стало понятно, что имеющихся возможностей для кросс-платформенного взаимодействия недостаточно и формат нужно расширять. Но стоит ли делать AIMPPL5, который будет поддерживать только AIMP последних версий?

Выбор пал на XSPF:

  • Открытый и бесплатный
  • Четкая спецификация
    Спецификация четко регламентирует, как заполнять стандартные поля.
    Никаких разночтений.
  • Кросс-платформенный
    Пути к файлам записываются определенным образом, c учетом особенностей и Linux, и Windows. Поддерживаются относительные пути.
  • Расширяемый
    В файл можно будет записать настройки форматирования, группировки и прообраза смарт-плейлиста.
  • Поддерживается многими плеерами
    Экспортируемый плейлист можно будет открыть не только в AIMP, но и в любом другом плеере с поддержкой XSPF.

Кросс-платформенность

Плейлисты стали легкопереносимыми между мобильной и ПК версией AIMP. Не важно, сохраняли в их с абсолютными путями или относительными — главное, чтобы они переносились вместе с папкой с музыкой.

Помимо этого, теперь так же переносятся:

  • Аудио-сеты, разделенные на треки с помощью файла разметки (CUE)
  • Смарт-плейлисты на основе папок и плейлистов
    Стоит заметить, что мобильная версия пока еще поддерживает не все настройки выборки данных, что доступны в ПК версии для смарт-плейлистов указанных типов.

Таким образом, переход на XSPF стал первым шагом к синхронизации между мобильной и ПК версией AIMP.

Производительность

В ходе полевых испытаний нашелся главный минус нового формата: разметка XML занимает много места, что негативно влияет как на размер файла, так и на скорость его чтения.

В качестве тестового образца был взят плейлист на 50 000 файлов с полностью заполненными тегами (те, что поддерживаются AIMP и пишутся в файл плейлиста):

ФорматРазмер (МБ)Время загрузки (сек)
XSPF37.21.6
M3U86.80.4
AIMPPL420.70.9
Сравнение форматов

Большая ли это плата за кросс-платформенность?

Список всех расширений AIMP для XSPF и их описание можно найти в документе AIMP Extensions for XSPF в составе SDK.

XSPF — формат плейлистов по умолчанию: 18 комментариев

  1. Ta2i4

    Мне кажется, что плата за кроссплатформенность небольшая. Учитывая, что сейчас редко кто задумывается об объемах пространства, занимаемых приложениями, и их аппетиты постоянно растут.

    1. Artem Автор записи

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

      1. Green

        Оно и xml не каждый сумеет поправить, но всё же сбои это крайне редкий случай.

        С «замыканием на себе» по-моему нет ничего плохого, если это обеспечивает высокую производительность. Тем более, что экспорт в популярные форматы же никуда не пропадёт.

        Не рассматривали protobuf или bson как альтернативу бинарному формату?

        1. Artem Автор записи

          Оно и xml не каждый сумеет поправить, но всё же сбои это крайне редкий случай.

          Пути к файлам — сможет, и этим довольно часто занимаются, на самом деле.

          Не рассматривали protobuf или bson как альтернативу бинарному формату?

          На их основе есть стандарты плейлистов?

                1. Artem Автор записи

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

  2. Алексей Долматов

    «Большая ли это плата за кросс-платформенность?»

    По сравнению с собственным форматом разница в полтора раза должна быть ощутимой на больших объёмах. Другое дело, что нужно сравнивать заметна и неприятна ли эта разница при реальном использовании плеера, при открытии и импорте нескольких плейлистов.
    Сравнивать с M3U(8) не вижу особой пользы. Стандарт файла позволяет хранить меньше данных, а использование альтернативной структуры может поломать совместимость с другими программами. При этом нужно учитывать чтение данных (тегов) из самих треков на основе плейлиста.

    «XSPF стал форматом плейлистов по умолчанию»
    Есть сомнения, что проверка была выполнена достаточно объективно. AIMP для Windows в своей папке продолжает хранить, а значит и использовать, плейлисты в собственном формате. Можно протестировать работу плеера с использованием другого формата внутри себя. Это позволит исключить влияние парсинга для преобразования плейлиста при открытии, что в перспективе может увеличить отзывчивость плеера.
    Если будет заметная польза от такого изменения, то можно будет рассматривать иные аспекты оптимизации работы с таким форматом. В зависимости, насколько они (аспекты-алгоритмы) могут влиять на производительность с разными форматами.

    1. Artem Автор записи

      Есть сомнения, что проверка была выполнена достаточно объективно

      Что вызывает сомнение? В своей папке плеер хранит в старом формате по двум причинам: обратная совместимость и производительность. К тому же, пользователь туда не лазит, поэтому там мы можем хранить плейлисты хоть в базе данных или в бинарном формате (как фубар делает).

  3. marki

    Hello. AIMP is great and I use it all the time. I wanted to report some feedback on the new XSPF playlist export.

    In the past when I exported to AIMPBPL, I never had any issues. Today I went to export by playlists and saw the option to export to AIMPBPL was missing, so I chose XSPF. The first playlist exported fine (I could see my music directory and chose to save it there). But when I attempted to export the second one, I could not see the music directory and the application froze. When I closed the app and reopened it, it said «Now loading {song title}» (the song I was listening to 20 minutes ago) and got stuck there. After restarting the phone I was able to export that second playlist and the other 17.

    I have a Samsung Galaxy S21 running Android 13.

Добавить комментарий