Открыть сервис

Высокоуровневая структура HLS

Высокоуровневая структура HLS — это архитектурная концепция, описывающая организацию и взаимодействие компонентов, необходимых для работы протокола HTTP Live Streaming (HLS). HLS — это протокол адаптивной потоковой передачи данных, разработанный компанией Apple, предназначенный для доставки аудио- и видеоконтента через интернет. Высокоуровневая структура HLS определяет, как исходный медиафайл преобразуется в набор фрагментов, как эти фрагменты индексируются, и как клиентское устройство (плеер) выбирает и воспроизводит подходящий поток в зависимости от условий сети и характеристик устройства.

Основные компоненты структуры HLS

Архитектура HLS состоит из трёх ключевых элементов: серверной части (энкодер и сегментер), системы хранения и распространения (веб-сервер или CDN) и клиентской части (плеер). Каждый из этих компонентов выполняет строго определённые функции, обеспечивая надёжную и гибкую доставку контента.

Серверная часть (энкодер и сегментер)

Серверная часть отвечает за подготовку исходного медиафайла к передаче. Основные этапы включают:

  • Кодирование (encoding): Исходный видеосигнал (например, с камеры, файла или прямого эфира) сжимается с использованием кодеков, таких как H.264 (AVC), H.265 (HEVC) или AAC для аудио. Кодирование может производиться в нескольких вариантах (битрейтах, разрешениях, частотах кадров) для создания нескольких потоков разного качества.
  • Сегментирование (segmentation): Закодированный поток разбивается на небольшие по длительности фрагменты (сегменты), обычно длительностью от 2 до 10 секунд. Каждый сегмент представляет собой независимый медиафайл (например, в формате MPEG-TS или fMP4). Сегментирование позволяет плееру переключаться между потоками разного качества без прерывания воспроизведения.
  • Создание плейлистов (playlist generation): Параллельно с сегментированием создаются файлы плейлистов (M3U8), которые содержат метаданные о расположении и порядке сегментов. Для каждого потока качества создаётся свой медиа-плейлист, а для всей группы потоков — главный (мастер) плейлист.

Система хранения и распространения (веб-сервер или CDN)

После подготовки сегменты и плейлисты загружаются на веб-сервер или в сеть доставки контента (CDN). Этот компонент выполняет функции:

  • Хранение: Сегменты и плейлисты хранятся как обычные файлы на HTTP-сервере. В отличие от протоколов реального времени (например, RTMP), HLS не требует постоянного соединения между сервером и клиентом.
  • Распространение: Сервер отдаёт файлы по запросу клиента. Для живых трансляций (live) сервер постоянно обновляет плейлисты, добавляя новые сегменты и удаляя устаревшие. Для видео по запросу (VOD) все файлы статичны.
  • Кэширование: CDN и HTTP-прокси могут кэшировать сегменты, что снижает нагрузку на исходный сервер и ускоряет доставку контента пользователям в разных географических регионах.

Клиентская часть (плеер)

Клиентская часть — это программное обеспечение (плеер), работающее на устройстве пользователя (смартфон, компьютер, Smart TV, приставка). Плеер выполняет следующие функции:

  • Загрузка главного плейлиста: Плеер сначала получает мастер-плейлист, который содержит список доступных потоков (вариантов качества) с указанием их битрейта, разрешения и кодека.
  • Выбор потока: На основе текущей пропускной способности сети, размера экрана и возможностей устройства плеер выбирает наиболее подходящий поток. Алгоритмы адаптации (например, ABR — Adaptive Bitrate) могут динамически переключаться между потоками в процессе воспроизведения.
  • Загрузка медиа-плейлиста и сегментов: Плеер загружает медиа-плейлист выбранного потока, который содержит список URL-адресов сегментов. Затем последовательно загружает и воспроизводит сегменты, обеспечивая непрерывное воспроизведение.
  • Буферизация и управление: Плеер поддерживает буфер, чтобы компенсировать колебания скорости сети. Он также обрабатывает ошибки загрузки (например, при недоступности сегмента) и переключается на другой поток или повторяет запрос.

Типы потоков и плейлистов

В HLS различают два основных типа потоков: видео по запросу (VOD) и живые трансляции (live). Для каждого типа структура плейлистов имеет свои особенности.

Плейлисты для VOD

Для видео по запросу медиа-плейлист содержит полный список всех сегментов, составляющих весь фильм или ролик. Плейлист является статическим — он не изменяется после создания. Клиент может загружать сегменты в любом порядке (например, для перемотки) или последовательно.

Плейлисты для live

Для живых трансляций медиа-плейлист постоянно обновляется. Он содержит только последние несколько сегментов (окно, обычно от 3 до 10 сегментов). Старые сегменты удаляются из плейлиста, а новые добавляются по мере поступления. Плеер должен периодически перезагружать плейлист, чтобы получить актуальную информацию. Для обеспечения точной синхронизации используется метка времени (EXT-X-PROGRAM-DATE-TIME).

Мастер-плейлист

Мастер-плейлист (главный плейлист) — это файл, который содержит ссылки на все доступные медиа-плейлисты. Он также может содержать метаданные, такие как:

  • BANDWIDTH: Максимальный битрейт потока (в бит/с).
  • RESOLUTION: Разрешение видео (ширина x высота).
  • CODECS: Кодеки, используемые в потоке.
  • FRAME-RATE: Частота кадров.
  • AUDIO / VIDEO: Ссылки на отдельные аудио- и видеопотоки (например, для многоканального звука или субтитров).

Мастер-плейлист позволяет плееру выбрать оптимальный поток до начала загрузки сегментов.

Процесс воспроизведения (пошагово)

  1. Инициализация: Плеер получает URL мастер-плейлиста (например, https://example.com/stream.m3u8`).
  2. Загрузка мастер-плейлиста: Плеер загружает и парсит мастер-плейлист, получая список вариантов качества.
  3. Выбор потока: Плеер оценивает текущую пропускную способность сети (например, с помощью пробной загрузки небольшого сегмента) и выбирает поток с подходящим битрейтом. Если доступно несколько потоков, плеер может начать с более низкого качества для быстрого запуска.
  4. Загрузка медиа-плейлиста: Плеер загружает медиа-плейлист выбранного потока.
  5. Загрузка и воспроизведение сегментов: Плеер последовательно загружает сегменты, начиная с первого (или с указанного в плейлисте). Каждый сегмент декодируется и воспроизводится. Плеер поддерживает буфер (обычно 2-3 сегмента), чтобы компенсировать задержки загрузки.
  6. Адаптация: Плеер непрерывно мониторит скорость загрузки сегментов и размер буфера. Если скорость падает, плеер может переключиться на поток с более низким битрейтом, загрузив следующий сегмент из другого медиа-плейлиста. Если скорость растёт, плеер переключается на более высокое качество. Переключение происходит на границе сегментов, что обеспечивает бесшовный переход.
  7. Завершение: Для VOD плеер воспроизводит все сегменты до конца плейлиста. Для live плеер продолжает загружать новые сегменты до тех пор, пока пользователь не остановит воспроизведение или трансляция не завершится.

Ключевые особенности и преимущества структуры HLS

  • Адаптивность: Возможность динамически переключаться между потоками разного качества в зависимости от условий сети.
  • Совместимость: HLS использует стандартный HTTP-протокол, что позволяет проходить через большинство брандмауэров и прокси-серверов. Для работы не требуется специальных портов или протоколов.
  • Масштабируемость: Благодаря использованию CDN и HTTP-кэширования, HLS может обслуживать миллионы одновременных зрителей.
  • Надёжность: В случае ошибки загрузки сегмента плеер может повторить запрос или переключиться на другой поток, что минимизирует прерывания воспроизведения.
  • Поддержка субтитров и многоканального звука: HLS позволяет включать отдельные потоки для субтитров (например, в формате WebVTT) и нескольких аудиодорожек (например, на разных языках).

Ограничения

  • Задержка (latency): Традиционный HLS имеет задержку от 10 до 30 секунд для живых трансляций из-за сегментирования и буферизации. Существуют расширения (Low-Latency HLS, LL-HLS), которые снижают задержку до 2-5 секунд.
  • Сложность настройки: Для создания и поддержки HLS-трансляций требуется специальное программное обеспечение (энкодеры, сегментеры) и серверная инфраструктура.
  • Зависимость от формата сегментов: Наиболее распространённый формат сегментов — MPEG-TS, который может быть менее эффективным по сравнению с современными контейнерами (например, fMP4).

Источники

  • Pantos, R. (Ed.). (2017). HTTP Live Streaming. RFC 8216. Internet Engineering Task Force (IETF).
  • Apple Inc. (2023). HTTP Live Streaming (HLS) Authoring Specification for Apple Devices. Apple Developer Documentation.
  • Tanenbaum, A. S., & Wetherall, D. J. (2011). Computer Networks (5th ed.). Pearson.
  • Kurose, J. F., & Ross, K. W. (2017). Computer Networking: A Top-Down Approach (7th ed.). Pearson.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →