Как стать автором
Обновить

С чем едят формат 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 он вообще обрабатывает ссылки.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.