Если вы любитель музыки, а также разбираетесь в технологиях, возможно, вы знакомы с расширением файла M3U8. Тем не менее, большинство людей не понимают этот формат или даже не слышали о нем. Фактически, M3U8 широко используется на компьютерах, веб-сайтах и в потоковых сервисах.
Этот пост подробно поделится базовыми знаниями об этом аудиоформате. Тогда вы поймете, что такое M3U8 и как его слушать с лучшим M3U8 проигрыватели в Windows 10 / 8.1 / 8/7 и Mac OS X / 11/12.
M3U8 проигрыватели
- Часть 1: Что такое m3u8?
- Part 2: Лучшие игроки 5 M3U8
- Part 3: Лучшие игроки 3 m3u8 онлайн
- Часть 4. Часто задаваемые вопросы о плеере M3U8
Анализ
Первое что пришло мне в голову это записать видео с экрана, например через QuickTime, но в таком случае нужно все их просмотреть а это по времени достаточно долго и этот вариант мне не понравился.
Следующим шагом было исследовать html код страницы, и там я нашел интересную ссылку:
Далее я попробовал подставить эту ссылку в адресную строку браузера и в результате скачался файл master.m3u8 следующего содержания:
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=768000,CODECS=»mp4a.40.2, avc1.640028″,RESOLUTION=640×360 https://vh-04.getcourse.ru/player/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/media/360.m3u8?sid=sid&host=vh-04&cdn=1&cdn-second=0&integros-s3=1&akamai-defence=0&v=2:0:1:1 #EXT-X-STREAM-INF:BANDWIDTH=1024000,CODECS=»mp4a.40.2, avc1.640028″,RESOLUTION=853×480 https://vh-04.getcourse.ru/player/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/media/480.m3u8?sid=sid&host=vh-04&cdn=1&cdn-second=0&integros-s3=1&akamai-defence=0&v=2:0:1:1 #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS=»mp4a.40.2, avc1.640028″,RESOLUTION=1280×720 https://vh-04.getcourse.ru/player/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/media/720.m3u8?sid=sid&host=vh-04&cdn=1&cdn-second=0&integros-s3=1&akamai-defence=0&v=2:0:1:1 #EXT-X-STREAM-INF:BANDWIDTH=4096000,CODECS=»mp4a.40.2, avc1.640028″,RESOLUTION=1920×1080 https://vh-04.getcourse.ru/player/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/media/1080.m3u8?sid=sid&host=vh-04&cdn=1&cdn-second=0&integros-s3=1&akamai-defence=0&v=2:0:1:1
Как можно увидеть этот файл содержит еще набор ссылок, и судя по их названию они обозначают разрешение видео, которое загружается.
Я решил посмотреть что из себя представляет файл 720.m3u8, для этого я его скачал, перейдя по соответствующей ссылке:
#EXTM3U #EXT-X-TARGETDURATION:11 #EXT-X-ALLOW-CACHE:YES #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.160000, https://getcourse-cdn-a1a5df3e.cdn.integros.com/ch/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/720/0.ts?sid=sid&host=vh-04 #EXTINF:10.080000, https://getcourse-cdn-a1a5df3e.cdn.integros.com/ch/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/720/1.ts?sid=sid&host=vh-04 #EXTINF:10.080000, https://getcourse-cdn-a1a5df3e.cdn.integros.com/ch/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/720/2.ts?sid=sid&host=vh-04 #EXTINF:10.080000, … #EXTINF:8.800000, https://getcourse-cdn-a1a5df3e.cdn.integros.com/ch/89cc32eeb182080b719abfc7f106aaaf/5b7008b4e8fab9852419a5c00e4aa618/720/119.ts?sid=sid&host=vh-04 #EXT-X-ENDLIST
Если присмотреться внимательней то можно увидеть что все ссылки содержат *.ts, после того как я их скачал, оказалось что это как раз куски данного урока.
После небольшого поиска что-же такое m3u8 файл, я выяснил, что это формат для хранения плейлистов.
Теперь был вопрос как же его сохранить локально.
Бонус: лучший медиаплеер для воспроизведения высококачественного видео
Если вы хотите воспроизводить фильмы Blu-ray / DVD, вы можете дать Blu-ray Master Бесплатный проигрыватель Blu-ray попытка. С помощью этого программного обеспечения вы смотрите видео в популярных форматах, включая MP4, AVI, WMV, MTS, TS, FLV, MTS, M2TS, WKV, TRP, MXF, MPEG и т. Д. С исходным качеством.
- 1. Воспроизведение многих видеоформатов и фильмов Blu-ray / DVD без потери качества.
- 2. Дополнительные звуковые дорожки / субтитры и настраиваемые видеоэффекты.
- 3. Обеспечьте полный, половинный, нормальный и многие другие режимы воспроизведения.
- 4. Делайте снимки любимой сцены во время воспроизведения видео.
- 5. Предложите удобный интерфейс, которым легко управлять.
Прекрасно
Рейтинг: 4.8 / 5 (179 голосов)
Альтернативное сохранение
После того как таким способом я сохранил пару видео, я начал думать как оптимизировать процесс. Тут меня посетила мысль, что можно просто попробовать скачать все эти маленькие файлы и объединить их в один.
Для этого я написал небольшую утилитку на Go, для обработки файла *.m3u8 и объединения всех маленьких кусков из него в один файл.
Алгоритм работы ее достаточно прост: сначала я перехожу по заданной ссылке на m3u8, затем построчно обхожу его и если строка содержит URL кусочка, я скачиваю его и результат сразу пишу в выходной файл.
Код который это делает следующий:
// received file from server resp, err := http.Get(inputUrl) if err != nil { log.Fatal(«Download error: «, err) } defer resp.Body.Close() // create output file f, err := os.Create(outputFile) if err != nil { log.Fatal(«Download error: «, err) } defer f.Close() // read server response line by line scanner := bufio.NewScanner(resp.Body) i := 0 for scanner.Scan() { l := scanner.Text() // if line contains url address if strings.HasPrefix(l, «http») { // download file part part, err := downloadFilePart(l) if err != nil { log.Fatal(«Download part error: «, err) } // write part to output file if _, err = f.Write(part); err != nil { log.Fatal(«Write part to output file: «, err) } log.Printf(«Download part %d\n», i) i++ } } if err := scanner.Err(); err != nil { log.Fatal(err) }
Функция downloadFilePart отвечает именно за скачивание файла и вывод его в байтовый массив:
func downloadFilePart(url string) ([]byte, error) { result := make([]byte, 0) resp, err := http.Get(url) if err != nil { return result, err } if result, err = ioutil.ReadAll(resp.Body); err != nil { return result, err } return result, err }
Такой метод полностью себя оправдал и оказался самый быстрый.
Как создать M3U плейлист самостоятельно
Помимо классический текстовых редакторов, для создания плейлиста в формате M3U можно воспользоваться специальными плеерами IPTV, в которых присутствует функция создания списков воспроизведения. Это намного лучше, чем создавать их ручным способом. Один из таких плееров — Simple TV. После установки программы откройте ее и зайдите в раздел «Плейлист», выберите из всплывающего списка «Поиск каналов». Задайте диапазон адресов для сканирования. В конце сканирования откроется список телеканалов. Установите флажки рядом с теми, которые хотите добавить, и нажмите на «Сохранить».
С чем едят формат M3U?
Данная статья призвана рассказать до деталей о тонкостях формата плейлиста M3U — стандарта де-факто для множества музыкальных плееров, как программных, так и железных.
Немного из истории
Формат этот появился в 1997 году, это был стандартный вид плейлиста для программы Winamp. Чем-то особенным этот формат назвать было нельзя — первая его версия была просто списком путей к музыкальным файлам, причем поддерживались как относительные пути, так и полные. Чуть позже появилась возможность использовать URL для задания пути в файлу. В качестве сепаратора использовались символы возврата каретки и перевода строки (/r/n). Также в качестве кодировки по стандарту использовалась Windows-1252. Также поддерживались однострочные комментарии вида # Some comment
Никаких заголовков для объявления того, что это именно M3U-файл, либо каких-то других не требовалось. Такие аскетичные плейлисты используются и по сей день — например с их помощью можно обмениваться ссылками на потоковое видео или аудио. Весь плейлист будет состоять из одной строки:
https://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 https://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, и этот формат поддерживают все музыкальные плееры. Я надеюсь, что более подробное знакомство с этим форматов принес вам пользу в дальнейшем.
Литература
- Спецификация формата m3u (англ.)
- M3U — Википедия (рус.)
P.S. Все ссылки в тегах code следует читать с предваряющими их обозначениями протокола. Я не знаю, как сделать, чтобы хабр оставлял https:// в ссылках; очень странно, что в тегах code он вообще обрабатывает ссылки.