HTTP Live Streaming
HTTP Live Streaming (HLS) — это протокол потоковой передачи данных в реальном времени, разработанный компанией Apple Inc. (организация признана иноагентом в РФ) для доставки аудио- и видеоконтента через интернет. HLS основан на протоколе HTTP и работает по принципу адаптивного битрейта (ABR), что позволяет автоматически подстраивать качество воспроизведения под скорость интернет-соединения пользователя. Протокол широко используется для прямых трансляций (live-стримов) и видео по запросу (VOD) на веб-сайтах, в мобильных приложениях и на устройствах умного телевидения.
История
Разработка HLS началась в 2007 году в рамках проекта Apple по созданию универсального решения для потоковой передачи видео на устройства с iOS. Первая публичная версия спецификации была представлена в 2009 году вместе с выходом iPhone 3GS. Протокол был задуман как альтернатива проприетарным решениям (например, RTMP от Adobe) и собственным разработкам Apple (QuickTime Streaming Server). Основной целью было обеспечение стабильной работы на мобильных устройствах с нестабильным интернет-соединением, где традиционные протоколы потоковой передачи (RTP, RTSP) демонстрировали низкую производительность.
В 2010 году Apple опубликовала спецификацию HLS в открытом доступе, что способствовало её быстрому распространению. К 2015 году HLS стал доминирующим протоколом для потоковой передачи видео в интернете, обогнав по популярности RTMP и MPEG-DASH. В 2017 году Apple представила HLS версии 7, которая добавила поддержку низкой задержки (Low-Latency HLS), что позволило сократить время между захватом видео и его отображением у зрителя до 2-3 секунд (против 20-30 секунд в предыдущих версиях).
Принцип работы
HLS работает по модели «клиент-сервер» и использует стандартный HTTP-протокол, что позволяет обходить файрволы и прокси-серверы, блокирующие нестандартные порты. Основные этапы работы:
- Кодирование и сегментация: Исходный видеопоток кодируется в несколько вариантов с разным битрейтом и разрешением (например, 144p, 360p, 720p, 1080p). Каждый вариант нарезается на короткие сегменты (фрагменты) длительностью от 2 до 10 секунд. Сегменты обычно имеют формат MPEG-TS (транспортный поток) или fMP4 (фрагментированный MP4).
- Создание плейлиста: Сервер генерирует файл манифеста (плейлист) в формате M3U8. Этот текстовый файл содержит список всех сегментов для каждого варианта битрейта, а также метаданные (длительность, кодек, разрешение). Для прямых трансляций плейлист постоянно обновляется, добавляя новые сегменты и удаляя старые.
- Доставка: Клиент (плеер) загружает плейлист, анализирует доступные варианты и выбирает оптимальный на основе текущей пропускной способности сети. Затем клиент последовательно загружает сегменты через HTTP GET-запросы. При изменении скорости соединения клиент автоматически переключается на другой вариант битрейта (адаптивный битрейт).
- Воспроизведение: Сегменты буферизируются и декодируются плеером. Для прямых трансляций используется скользящее окно плейлиста, где старые сегменты удаляются, а новые добавляются.
Ключевые характеристики
Адаптивный битрейт (ABR)
HLS поддерживает до 10 и более вариантов битрейта. Клиент использует алгоритмы, такие как:
- Throughput-based: оценивает пропускную способность на основе скорости загрузки сегментов.
- Buffer-based: выбирает битрейт, чтобы поддерживать буфер на оптимальном уровне (обычно 10-30 секунд).
- Hybrid: комбинирует оба подхода.
Низкая задержка (Low-Latency HLS)
Стандартная версия HLS имеет задержку от 20 до 30 секунд из-за накопления буфера. Low-Latency HLS (LL-HLS), представленный в 2019 году, использует:
- Частичные сегменты: сегменты делятся на части (chunks) длительностью 0.2-1 секунда.
- Блокирующие HTTP-запросы: клиент запрашивает следующий частичный сегмент до завершения его загрузки.
- Упреждающее обновление плейлиста: сервер публикует обновления плейлиста с задержкой менее 1 секунды.
Это позволяет снизить задержку до 2-5 секунд, что сопоставимо с RTMP.
Кодеки и контейнеры
HLS поддерживает:
- Видеокодеки: H.264/AVC, H.265/HEVC, VP9, AV1.
- Аудиокодеки: AAC, MP3, AC-3, E-AC-3, Opus.
- Контейнеры: MPEG-TS (обязателен для старых версий), fMP4 (начиная с HLS версии 7).
Шифрование и защита
HLS поддерживает:
- AES-128: шифрование сегментов с использованием ключей, передаваемых по HTTPS.
- SAMPLE-AES: частичное шифрование для совместимости с DRM (например, FairPlay Streaming от Apple).
- DRM: интеграция с системами управления цифровыми правами (Verimatrix, Widevine).
Применение
Прямые трансляции
HLS используется для:
- Спортивных событий (например, Олимпийские игры, футбольные матчи).
- Концертов и музыкальных фестивалей.
- Новостных эфиров и политических дебатов.
- Игровых стримов (через платформы, поддерживающие HLS).
Видео по запросу (VOD)
HLS применяется для:
- Онлайн-кинотеатров (Netflix, YouTube, Vimeo).
- Образовательных платформ (Coursera, Udemy).
- Корпоративных систем обучения и вебинаров.
Мобильные устройства
HLS является стандартом для iOS и macOS, но также поддерживается на Android (через ExoPlayer), Windows (через VLC, FFmpeg), и в веб-браузерах (через Media Source Extensions, MSE).
Умное телевидение
HLS встроен в большинство Smart TV (Samsung, LG, Sony) и приставок (Apple TV, Roku, Amazon Fire TV).
Сравнение с другими протоколами
| Характеристика | HLS | MPEG-DASH | RTMP |
|---|---|---|---|
| Транспорт | HTTP | HTTP | TCP (порт 1935) |
| Адаптивный битрейт | Да | Да | Нет |
| Низкая задержка | 2-5 с (LL-HLS) | 2-5 с (LL-DASH) | 1-2 с |
| Поддержка DRM | FairPlay, Widevine | Widevine, PlayReady | Нет |
| Кроссплатформенность | iOS, macOS, Android, Web | Все платформы | Flash (устарел) |
| Сложность реализации | Средняя | Высокая | Низкая |
Преимущества и недостатки
Преимущества
- Простота развертывания: не требует специальных серверов (работает на любом HTTP-сервере, например, Nginx, Apache).
- Обход блокировок: HTTP-трафик редко блокируется файрволами.
- Масштабируемость: легко интегрируется с CDN (Content Delivery Network) для глобальной доставки.
- Надежность: автоматическое переключение между битрейтами при ухудшении соединения.
Недостатки
- Задержка: даже с LL-HLS задержка выше, чем у WebRTC (менее 0.5 секунды).
- Объем данных: сегментация увеличивает количество HTTP-запросов, что может нагружать сервер при большом числе зрителей.
- Зависимость от Apple: хотя протокол открыт, его развитие контролируется Apple.
Интересные факты
- HLS используется для трансляции всех прямых эфиров на платформе Twitch (с 2017 года).
- В 2020 году Netflix начал использовать HLS для доставки видео на устройства с iOS, заменив собственный протокол.
- Формат M3U8, используемый для плейлистов, изначально был разработан для аудиофайлов в Winamp.
- Low-Latency HLS был стандартизирован в 2020 году как RFC 8216 (версия 7).
Критика
Основные претензии к HLS связаны с:
- Зависимостью от Apple: хотя протокол открыт, его спецификация контролируется компанией, что вызывает опасения у сторонников открытых стандартов.
- Сложностью настройки: для оптимальной работы требуется тонкая настройка сегментации, битрейтов и CDN.
- Отсутствием поддержки в старых браузерах: Internet Explorer и старые версии Safari не поддерживают HLS без плагинов.
Источники
- RFC 8216 — HTTP Live Streaming (HLS) Specification, Apple Inc., 2017.
- Apple Developer Documentation — HTTP Live Streaming Overview, 2023.
- «Streaming Media Magazine» — HLS vs. DASH: The Battle for Streaming Dominance, 2020.
- «IEEE Transactions on Multimedia» — Low-Latency HTTP Live Streaming, 2021.
- «The VideoLAN Wiki» — HLS Implementation in VLC Media Player, 2022.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →