С чем едят формат M3U?

Данная статья призвана рассказать до деталей о тонкостях формата плейлиста M3U — стандарта де-факто для множества музыкальных плееров, как программных, так и железных.

Немного из истории


Формат этот появился в 1997 году, это был стандартный вид плейлиста для программы Winamp.
Чем-то особенным этот формат назвать было нельзя — первая его версия была просто списком путей к музыкальным файлам, причем поддерживались как относительные пути, так и полные. Чуть позже появилась возможность использовать URL для задания пути в файлу. В качестве сепаратора использовались символы возврата каретки и перевода строки (/r/n). Также в качестве кодировки по стандарту использовалась Windows-1252.
Также поддерживались однострочные комментарии вида

# Some comment

Никаких заголовков для объявления того, что это именно M3U-файл, либо каких-то других не требовалось.
Такие аскетичные плейлисты используются и по сей день — например с их помощью можно обмениваться ссылками на потоковое видео или аудио.
Весь плейлист будет состоять из одной строки:

http://example.com:8000/audio

Однако, существует важный нюанс, идущий с тех времен и по сей день, — в конце последней строки тоже обязательно должны стоять символы /r/n.

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

Extended M3U


Расширенный синтаксис формата M3U позволяет задать теги для файла, длительность и название плейлиста.
Негусто, но большего и не нужно.
Кроме того, ExtM3U обратно совместим с M3U, так как для разметки используются комментарии.
Однако, требования для кодировки (а она должна быть Windows-1252) и для сепаратора (перевод строки только вместе с возвратом каретки) остались теми же.
Но все для кодировки стали появляться послабления — при выбранной русской локализации многие плееры стали читать плейлист в Win-1251.

Итак, давайте рассмотрим на примере синтаксис ExtM3U.

#EXTM3U
#PLAYLIST:Playlist Name
#EXTINF:100,Track Title
music/Track01.mp3
#EXTINF:456,Artist Name - Track Name
C:/music/Track01.mp3
#EXTINF:456,Unix Full Pathname
/home/usr/data/music/Track01.mp3
#EXTINF:-1,Some Radiostation
http://example.com:8000/radio


  • #EXTM3U — заголовок M3U-файла. Говорит о том, что перед нами действительно плейлист M3U и что синтаксические конструкции формата ExtM3U поддерживаются в полной мере.
    На самом деле, как всегда, не все так радужно. Например, Mp3-плеер в телефоне Siemens CX75 прописывает эту директиву в начале плейлиста при его создании. Но вот остальную разметку ExtM3U он игнорирует. Он даже отказался переваривать относительные пути к файлам(!).
  • #PLAYLIST — название плейлиста. Например: «Песни о птичках». Не входит в официальную спецификацию и является самодеятельностью некоторых плееров.
  • #EXTINF — описание самого трека. Давайте на синтаксисе этой директивы остановимся чуть подробнее.

Директива EXTINF

Синтаксис:

#EXTINF:track_length sec,track_name\r\n
path_to_file.ext

Согласно синтаксису M3U, все параметры директивы описываются после двоеточия и разделяются запятыми.
  1. Длительность трека в секундах. Любое положительное число, включая ноль.
    -1 обозначает игнорирование длины трека.
    Некоторые плееры сразу ставят вместо длительности вопросительные знаки, некоторые все же пытаются определить ее самостоятельно. В случае удачи длина трека будет отображена.
  2. Название трека. Любая фраза в кодировке Windows.
    В случае, если трек имеет исполнителя и название, то в качестве сепаратора желательно использовать дефис (минус) — "-".
  3. Путь к файлу. Обязательный параметр, отделяется от описания директивы \r\n.
    В случае указания относительного пути плеер будет искать файлы, «отталкиваясь» от папки, где лежит плейлист.
    При указании URL-адреса возможно указание любого протокола, соединение по которому поддерживает плеер (http(s), ftp, etc). Желательно использование http или специального протокола для потокового аудио/видео rtsp.

Но самый главный подводный камень — кодировка. Иногда, для указания, что дальше идут русские буквы в названии трека или пути используется символ US. Но utf-8 тут напрашивается сама собой.
Итак, следующая эволюция M3U плейлистов — формат M3U8.

M3U8 — m3u в utf-8


Формат *.m3u8 получил преимущественное распространение на Unix-системах.
Многие плееры автоматически распознают кодировку файла и не требуют обязательного присутствия восьмерки в расширении.
Отличия от обычного формата m3u — это, конечно, кодировка utf-8 и возможность использовать в качестве сепаратора строк только перевод строки (\n).

Заключение


M3U — простой и перспективный формат плейлистов с тринадцатилетней историей.
Он проще и понятнее плейлистов с xml-структурой, так как csv-подобные форматы для хранения маленьких структурированных объемов данных значительно удобнее.
Многие производители техники отдают свое предпочтение m3u, и этот формат поддерживают все музыкальные плееры.
Я надеюсь, что более подробное знакомство с этим форматов принес вам пользу в дальнейшем.

Литература



P.S. Все ссылки в тегах code следует читать с предваряющими их обозначениями протокола.
Я не знаю, как сделать, чтобы хабр оставлял http:// в ссылках; очень странно, что в тегах code он вообще обрабатывает ссылки.
Tags:
m3u, m3u8, playlist, плейлист, синтаксис

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.