Техническое руководство

Вводное приключение в HLS: Доставка видео на ваш телефон, как доставка еды

Вы когда-нибудь задумывались, как видео плавно воспроизводится на вашем телефоне? Эта статья объясняет основные принципы протокола HLS с нуля, используя яркие метафоры. От технологии фрагментации до плейлистов M3U8 и практического развертывания серверов прямого эфира — полное руководство для начинающих по освоению сути технологии HLS.

31 дек. 2025 г.·7 мин чтения

Вводное приключение в HLS: Доставка видео на ваш телефон, как доставка еды

Пролог: История Apple, изменившая мир видео

Представьте себе: в один из дней 2007 года инженеры Apple ломали голову над проблемой: как заставить iPhone плавно воспроизводить видео? Технология Flash того времени работала на мобильных устройствах ужасно, заряд батареи утекал как из дырявого ведра, а производительность была невыносимой. Поэтому Apple приняла смелое решение: мы сделаем свою технологию!

Два года спустя, в 2009 году, родился HLS (HTTP Live Streaming). Его основная идея настолько проста, что вызовет у вас восхищение: Поскольку отправлять огромный файл целиком слишком сложно, давайте нарежем его на мелкие кусочки и будем доставлять по одному, как доставку еды!

Эта, казалось бы, простая идея полностью изменила правила игры для видео в интернете. Сегодня, листаете ли вы TikTok, смотрите YouTube или запоем смотрите сериалы на Netflix, вполне вероятно, что HLS тихо работает за кулисами.

Основная магия: Превращение видео в “Наборы доставки”

Метафора доставки HLS Слева: Традиционная “Полная перевозка на большом грузовике”; Справа: “Пакетная доставка курьером” от HLS

Искусство нарезки

Позвольте мне сначала рассказать вам историю. Допустим, вы переезжаете, и вам нужно перевезти огромный холодильник. У вас есть два варианта:

План А: Найти гигантский грузовик и перевезти весь холодильник за один раз. Звучит грандиозно, правда? Но проблема в том, что:

  • Вам придется долго ждать, чтобы найти такой большой грузовик.
  • Если по дороге вы попадете в пробку, все остановится.
  • Если что-то пойдет не так в пути, весь холодильник испорчен.

План Б: Разобрать холодильник на несколько частей и отправлять каждую часть обычной курьерской службой партиями. Так:

  • Вы можете начать отправку немедленно.
  • Если одна посылка задержится, остальные будут доставлены как обычно.
  • Вы можете изменить способ доставки в любой момент в зависимости от дорожной обстановки.

HLS выбрал План Б! Он нарезает полный видеофайл на небольшие фрагменты (обычно по 2-10 секунд каждый), и каждый фрагмент похож на независимую “посылку курьера”. Эти фрагменты обычно представляют собой файлы .ts (MPEG-2 Transport Stream) или более современные фрагменты .mp4.

Меню: Волшебный M3U8

Нарезать фрагменты недостаточно, вы должны сообщить плееру порядок этих фрагментов, верно? Это роль Плейлиста M3U8 (Playlist) — он как меню доставки, в котором подробно указано:

  • Какие “блюда” доступны (видеофрагменты)
  • Где находится каждое “блюдо” (URL-адрес)
  • В каком порядке “подавать” (порядок воспроизведения)
  • Сколько времени нужно, чтобы “съесть” каждое блюдо (длительность)

Давайте посмотрим на суперпростой пример M3U8:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:9.5,
segment001.ts
#EXTINF:9.5,
segment002.ts
#EXTINF:9.5,
segment003.ts
#EXT-X-ENDLIST

Это как меню, в котором написано: “Первое блюдо 9.5 секунд, второе блюдо 9.5 секунд, третье блюдо 9.5 секунд, всё, приятного аппетита!”

Адаптивный битрейт: Интеллектуальное переключение передач

Вот супер крутая функция! HLS может подготовить несколько копий видео с разным качеством одновременно, точно так же, как ресторан готовит маленькие, средние и большие наборы.

Когда ваша скорость интернета высокая, плеер автоматически переключается на HD-версию; если скорость падает, он переходит на стандартное разрешение, чтобы гарантировать отсутствие зависаний. Весь процесс настолько плавный, что вы почти не чувствуете переключения!

Это роль Мастер-плейлиста (Master Playlist), который выглядит так:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=842x480
mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
high/index.m3u8

Когда плеер видит это “Общее меню”, он умно выбирает наиболее подходящее “Подменю” на основе вашей скорости интернета и размера экрана.

VOD против Live: Разница между записью и прямым эфиром

Сравнение VOD и Live VOD похож на бенто из магазина (доступно в любое время), Live похож на готовку на месте (в реальном времени)

VOD (Видео по запросу): Готовое бенто

Представьте, что вы покупаете коробку бенто в круглосуточном магазине. Это бенто:

  • ✅ Уже готово и может быть куплено в любое время.
  • ✅ Содержимое фиксировано и не изменится.
  • ✅ Вы можете съесть его, когда захотите.
  • ✅ Вы можете перемотать в конец, чтобы посмотреть, есть ли там вареное яйцо.

VOD именно таков: Видео уже нарезано, список M3U8 также сгенерирован и лежит на сервере, ожидая, когда вы его посмотрите. В конце плейлиста будет тег #EXT-X-ENDLIST, говорящий плееру: “Брат, видео здесь заканчивается, продолжения нет.”

Прямой эфир (Live): Готовится сейчас

Теперь представьте, что вы смотрите, как повар готовит вживую:

  • 🔴 Повар готовит, и вы смотрите.
  • 🔴 Следующее блюдо еще не готово.
  • 🔴 Вы должны следовать темпу повара.
  • 🔴 Если вы пропустили, то пропустили (если нет повтора).

Прямая трансляция (Live) — это именно то ощущение! Ключевые отличия:

  1. M3U8 постоянно обновляется: Каждые несколько секунд сервер добавляет новые нарезанные фрагменты в плейлист.
  2. Нет тега конца: Поскольку прямая трансляция все еще идет, конечно, нет никакого “конца”.
  3. Скользящее окно: Плейлист хранит только последние несколько фрагментов (например, последние 6), слишком старые фрагменты удаляются.
  4. Плеер должен постоянно обновляться: Каждые несколько секунд он обращается к серверу, чтобы получить новейший M3U8 и посмотреть, есть ли новые фрагменты.

Например, M3U8 прямого эфира может выглядеть так:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:12345
#EXTINF:6.0,
live_12345.ts
#EXTINF:6.0,
live_12346.ts
#EXTINF:6.0,
live_12347.ts

Заметьте, нет #EXT-X-ENDLIST! И есть #EXT-X-MEDIA-SEQUENCE:12345, который говорит: “Эй, номер текущего первого фрагмента — 12345.” В следующий раз, когда плеер обновится, он может начаться с 12346, и старые фрагменты будут заменены новыми.

Время интересных размышлений: Почему прямая трансляция не хранит все фрагменты? Потому что тогда список будет расти бесконечно, а большинство зрителей просто хотят видеть то, что происходит “сейчас”, а не начинать с начала!

Статус HLS: Битва с другими героями

HLS не одинокий волк в мире стриминга; у него много конкурентов и родственных протоколов. Давайте сравним его с несколькими другими “мастерами боевых искусств”.

Противник 1: MPEG-DASH (Герой международного стандарта)

Кто такой DASH?

  • Полное имя: Dynamic Adaptive Streaming over HTTP
  • “Ортодоксальный” стандарт, установленный международной организацией MPEG
  • Концепция почти идентична HLS: Фрагментация + Адаптивность + HTTP

Где основные различия?

Характеристика HLS MPEG-DASH
Происхождение Частный рецепт Apple Международный стандартный банкет
Поддержка устройств Apple ⭐⭐⭐⭐⭐ Идеально ❌ В основном не поддерживается
Поддержка Android ⭐⭐⭐⭐ Очень хорошо ⭐⭐⭐⭐⭐ Идеально
Формат плейлиста M3U8 (Текст) MPD (XML)
Контейнер фрагментов TS или fMP4 В основном fMP4
Ограничение кодеков Предпочитает H.264 Свобода кодеков

Простой перевод: HLS — это “семейный секретный рецепт” Apple, чувствующий себя как рыба в воде на iPhone/iPad; DASH — это “международный универсальный рецепт”, более открытый, но Apple его не покупает. Если ваши пользователи в основном используют устройства Apple, выбирайте HLS с закрытыми глазами; если вы хотите охватить различные платформы, вам может потребоваться подготовить оба.

Противник 2: RTMP (Падший король)

Прошлая слава RTMP: В эпоху Flash RTMP (Real-Time Messaging Protocol) был королем прямых трансляций. У него было:

  • ⚡ Супер низкая задержка (1-3 секунды)
  • 💪 Сильная способность реального времени
  • 🎬 Полная поддержка Flash Player

Но времена изменились:

  • 💀 Flash умер в 2020 году
  • 📱 Мобильные браузеры его вообще не поддерживают
  • 🔒 Требует специализированных серверов стриминга
  • 🚧 Легко блокируется брандмауэрами

HLS против RTMP — это как Доставка против Еды в ресторане:

Измерение HLS (Доставка) RTMP (Ресторан)
Задержка 10-30с (Стандарт)
2-5с (Низкая задержка)
1-3с
Охват Почти все устройства Только со специальным ПО
Сложность развертывания Просто (Обычный веб-сервер) Сложно (Выделенный сервер)
Дружелюбие к сети Отлично (HTTP пробивает все) Средне (может быть заблокирован)
Статус На подъеме Закат

Текущая лучшая практика: Стримеры используют RTMP для отправки (push) на сервер (потому что это стабильно и надежно), а сервер преобразует его в HLS для распределения зрителям (потому что совместимость хорошая). Это называется “взять лучшее из обоих миров”!

Противник 3: WebRTC (Эксперт по взаимодействию в реальном времени)

Специальности WebRTC:

  • 🚀 Задержка пугающе низкая (десятки до сотен миллисекунд)
  • 🎤 Нативная поддержка двусторонней связи
  • 💻 Нативная поддержка в браузерах, плагины не нужны
  • 📞 Разработан для видеоконференций

HLS против WebRTC — это как Трансляция концерта против Видеозвонка:

HLS подходит для:

  • Один говорит, миллионы слушают (Один ко Многим)
  • Может терпеть несколько секунд задержки
  • Нужен CDN для массового распределения
  • Пример: Спортивные события, концерты, записанные онлайн-курсы

Автор: M3U8Player

Похожие статьи

Больше статей, подобранных для вас о потоковом вещании M3U8