Данная статья призвана рассказать до деталей о тонкостях формата плейлиста M3U — стандарта де-факто для множества музыкальных плееров, как программных, так и железных.
Формат этот появился в 1997 году, это был стандартный вид плейлиста для программы Winamp.
Чем-то особенным этот формат назвать было нельзя — первая его версия была просто списком путей к музыкальным файлам, причем поддерживались как относительные пути, так и полные. Чуть позже появилась возможность использовать URL для задания пути в файлу. В качестве сепаратора использовались символы возврата каретки и перевода строки (/r/n). Также в качестве кодировки по стандарту использовалась Windows-1252.
Также поддерживались однострочные комментарии вида
Никаких заголовков для объявления того, что это именно M3U-файл, либо каких-то других не требовалось.
Такие аскетичные плейлисты используются и по сей день — например с их помощью можно обмениваться ссылками на потоковое видео или аудио.
Весь плейлист будет состоять из одной строки:
Однако, существует важный нюанс, идущий с тех времен и по сей день, — в конце последней строки тоже обязательно должны стоять символы /r/n.
Но все течет и изменяется. Cтало понятно, что одни только пути к файлам не могут удовлетворить потребностей как пользователя, так и девелопера.
Все чаще комментарии некоторые плееры использовали для хранения своей служебной информации — в частности названия трека и его длины.
И все это вылилось в следующую ступень эволюции формата M3U.
Расширенный синтаксис формата M3U позволяет задать теги для файла, длительность и название плейлиста.
Негусто, но большего и не нужно.
Кроме того, ExtM3U обратно совместим с M3U, так как для разметки используются комментарии.
Однако, требования для кодировки (а она должна быть Windows-1252) и для сепаратора (перевод строки только вместе с возвратом каретки) остались теми же.
Но все для кодировки стали появляться послабления — при выбранной русской локализации многие плееры стали читать плейлист в Win-1251.
Итак, давайте рассмотрим на примере синтаксис ExtM3U.
Синтаксис:
Согласно синтаксису M3U, все параметры директивы описываются после двоеточия и разделяются запятыми.
Но самый главный подводный камень — кодировка. Иногда, для указания, что дальше идут русские буквы в названии трека или пути используется символ US. Но utf-8 тут напрашивается сама собой.
Итак, следующая эволюция M3U плейлистов — формат M3U8.
Формат *.m3u8 получил преимущественное распространение на Unix-системах.
Многие плееры автоматически распознают кодировку файла и не требуют обязательного присутствия восьмерки в расширении.
Отличия от обычного формата m3u — это, конечно, кодировка utf-8 и возможность использовать в качестве сепаратора строк только перевод строки (\n).
M3U — простой и перспективный формат плейлистов с тринадцатилетней историей.
Он проще и понятнее плейлистов с xml-структурой, так как csv-подобные форматы для хранения маленьких структурированных объемов данных значительно удобнее.
Многие производители техники отдают свое предпочтение m3u, и этот формат поддерживают все музыкальные плееры.
Я надеюсь, что более подробное знакомство с этим форматов принес вам пользу в дальнейшем.
P.S. Все ссылки в тегах code следует читать с предваряющими их обозначениями протокола.
Я не знаю, как сделать, чтобы хабр оставлял http:// в ссылках; очень странно, что в тегах code он вообще обрабатывает ссылки.
Немного из истории
Формат этот появился в 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 обозначает игнорирование длины трека.
Некоторые плееры сразу ставят вместо длительности вопросительные знаки, некоторые все же пытаются определить ее самостоятельно. В случае удачи длина трека будет отображена.
- Название трека. Любая фраза в кодировке Windows.
В случае, если трек имеет исполнителя и название, то в качестве сепаратора желательно использовать дефис (минус) — "-".
- Путь к файлу. Обязательный параметр, отделяется от описания директивы \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 он вообще обрабатывает ссылки.