M3U8 / HLS
Apple винайшла його, кожен пристрій Apple відтворює його — і жоден не збереже.
Файл .m3u8 — це плейлист, а не відео: кілька кілобайтів тексту, що перелічують тисячі маленьких сегментів, які потрібно отримати по черзі. Саме через цю конструкцію HLS бездоганно відтворюється на кожному пристрої Apple і саме тому «зберегти цей файл» дає текстовий документ. Завантажити такий потік означає забрати кожен сегмент і зібрати заново файл, якого ніколи не існувало.
30 липня 2026 р.
Відкривається без сторонньої допомоги в
HLS — власна специфікація Apple із повноцінною підтримкою всюди: у Safari, AVPlayer, AirPlay. Що ніде в системі не підтримується, так це перетворення прямого ефіру на файл на диску. Відтворення й збереження — зовсім різні задачі.
Факти
| Повна назва | HTTP Live Streaming; сам плейлист — це M3U у UTF-8 |
|---|---|
| Тип | Протокол стримінгу, що доставляється у вигляді текстового плейлиста |
| Розширення | .m3u8 (плейлист), .ts або .m4s (сегменти, на які він вказує) |
| Опубліковано | 2009 рік, Apple; стандартизовано як RFC 8216 у 2017 році |
| Типова довжина сегмента | Від 2 до 10 секунд кожен — година відео це сотні, а то й тисячі файлів |
| Мастер-плейлист і медіаплейлист | Мастер перелічує рівні якості; кожен із них указує на медіаплейлист із реальними сегментами |
| Відео всередині сегментів | H.264 або HEVC, зрідка AV1 |
| Прямі ефіри | Плейлист заново запитується кожні кілька секунд і росте, поки триває трансляція |
Зміст, а не сама книга
Відкрий .m3u8 у текстовому редакторі — знайдеш кілька десятків рядків: заголовок, кілька параметрів і довгий список адрес. Це весь файл цілком. Відео живе в іншому місці, нарізане на сегменти по кілька секунд кожен, лежить на сервері тисячами окремих дрібних файлів.
Плеєр читає список, забирає перші кілька сегментів, починає відтворення й далі забирає дані з випередженням. Коли твоє з’єднання сповільнюється, він перемикається на варіант нижчої якості, перелічений у мастер-плейлисті, — інший набір сегментів на іншому бітрейті — і робить це між сегментами, тож ти бачиш зміну якості, а не паузу. Саме це адаптивне перемикання і є причиною, чому цей формат переміг.
Це ж пояснює те, що дивує людей: єдиного файлу, який можна отримати, не існує. Фільм, який ти дивишся, ніде не існує як окремий об’єкт. Це тисяча фрагментів і набір інструкцій.
Чому збереження дає текстовий файл
Тому що саме це ти й зберіг. Браузер запитав указану тобою адресу, отримав чотири кілобайти плейлиста й записав їх на диск. Усе, що ти реально дивився, надійшло через тисячу окремих запитів, про які операція збереження нічого не знала.
Правильно завантажити HLS означає зробити те саме, що робить плеєр, але на диск: прочитати плейлист, обрати варіант якості, забрати всі сегменти по черзі, а тоді зшити їх в один контейнер. Цей фінальний крок називається ремультиплексуванням — відео та звук не перекодовуються заново, а лише переписуються в один MP4 із нормальним індексом, щоб результат можна було перемотувати.
Дві речі ускладнюють це більше, ніж здається на слух. Адреси сегментів часто відносні й змінюються від сесії до сесії, тож список, отриманий годину тому, може бути вже мертвим. А потоки нерідко зашифровані ключем, на який посилається плейлист, доставляється окремо і змінюється під час відтворення.
Як зберегти потік на пристрій
Тільки для потоків, які ти маєш право зберігати, — власного запису, власної підписки на IPTV, мовника, що пропонує завантаження. Далі йдеться про те, як працює цей механізм, а не про дозвіл спрямовувати його куди завгодно.
- Довірити сегменти рушію завантажень
Забрати тисячу файлів і ремультиплексувати їх — саме те завдання, яке виконує завантажувач FoxDL із джерелом HLS: він проходить плейлист, забирає сегменти паралельно й записує один MP4, який перемотується як звичайний файл. У підсумку виходить файл, а не папка з фрагментами.
- Брати прямий файл, якщо він існує
Багато сайтів віддають одночасно і HLS, і звичайний прогресивний MP4. MP4 — це один запит, один файл і жодної пересборки — завжди кращий варіант, якщо він є.
- Змиритися з тим, що деякі потоки не зберегти
Потоки, захищені DRM — FairPlay, Widevine, — зашифровані наскрізь і не призначені для завантаження за задумом. Жоден інструмент цього не змінює, а той, що стверджує протилежне, про щось бреше.
Де ламаються завантаження HLS
Сегменти, склеєні без ремультиплексування, дають придатний для відтворення файл без індексу. Він грає лише з початку і нікуди не перемотується. Ремультиплексування записує індекс, який це виправляє.
У живого плейлиста немає кінця — він постійно росте. Завантажити такий потік означає записувати його, і зупиниться він тоді, коли зупиниш ти, а не коли скінчиться файл.
Адреси плейлиста зазвичай підписані й обмежені за часом. Файл .m3u8, збережений уранці, до вечора часто вже вказує в нікуди.
Питання про цей формат
Звідки ці факти
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer
Суміжні формати
Твоя бібліотека нарешті в одному місці.
Безкоштовно для завантаження. Жодного акаунту, жодної реєстрації, нічого передавати.