HLS
HLS (HTTP Live Streaming) — коммуникационный протокол для потоковой передачи медиа на основе HTTP, разработанный компанией Apple как часть программного обеспечения QuickTime, Safari, macOS и iOS. В основе работы лежит принцип разбиения цельного потока на небольшие фрагменты, последовательно скачиваемые по HTTP. Поток непрерывен и теоретически может быть бесконечным. В начале сессии скачивается плей-лист в формате M3U, содержащий метаданные об имеющихся вложенных потоках[1].
Apple оформила HLS как «черновик стандарта»[2], а в августе 2017 года 7 версия документа была опубликована как RFC 8216[3].
Поскольку запросы используют только стандартные транзакции HTTP, протокол позволяет потоку преодолевать межсетевые экраны или прокси-сервера, пропускающие HTTP-трафик, в отличие от протоколов на базе UDP, таких как RTP. Это также позволяет раздавать контент посредством HTTP-серверов общего назначения в качестве источника, а также доставлять до потребителей через существующие CDN[4].
HLS также предоставляет стандартный механизм шифрования с использованием AES и метод безопасной доставки ключей по HTTPS либо через авторизацию на устройстве, либо посредством HTTP cookie. Вместе это даёт возможность создавать простые системы DRM.
Архитектура
HTTP Live Streaming использует стандартный веб-сервер для распространения аудиовизуальных материалов по запросу, при этом требует специальное ПО для того, чтобы обеспечивать передачу контента в режиме реального времени.
- Серверная часть
- Кодирует и оборачивает входящее медиа в подходящий для доставки формат. Далее материал готовится к распределению путём сегментирования. Медиа сегментируется на фрагменты (чанки, chunks) и индексный файл (плейлист).
- Кодировка: видео кодируется в формате H.264 и аудио в MP3, HE-AAC или AC-3. Всё это вкладывается в транспортный поток MPEG-2 для последующей доставки.
- Сегментирование: контент в MPEG-2 TS разделяется на фрагменты одинаковой длины, записанные в файлы .ts. Также создаётся индексный файл, содержащий ссылки на фрагменты или другие индексные файлы — он сохраняется как файл .m3u8
- Распределение
- Работая как стандартный веб-сервер, сервер принимает запросы от клиентов и доставляет всё необходимое для воспроизведения.
- Клиент
- Запрашивает и скачивает все файлы, собирая их воедино так, чтобы предоставить пользователю непрерывный поток видео. Клиентское ПО скачивает первый индексный файл через URL и далее несколько доступных файлов медиа. ПО для проигрывания собирает всё в последовательность для воспроизведения.
Существует два режима работы HLS — «по запросу» и живой трансляции. В режиме «по запросу» плей-лист содержит ссылки на все фрагменты от первого до последнего. В режиме живой трансляции плей-лист содержит только ссылки на последние несколько фрагментов, кроме того при последующих обращениях к плей-листу, фрагменты будут меняться, отражая текущее состояние трансляции.
HLS предусматривает поддержку адаптивного битрейта, эта техника предусматривает наличие нескольких одновременно доступных потоков, каждый из которых может содержать одинаковый контент, закодированный в разных битрейтах, а также имеющий другие отличающиеся характеристики. По мере проигрывания клиент может выбирать из числа нескольких доступных потоков, что позволяет адаптировать сессию к внешним условиям передачи по сети.
На конференции WWDC 2016 Apple анонсировала[5] включение адресации через byte-range для фрагментированных MP4 файлов (fMP4), что позволяет проигрывать контент через HLS не прибегая к мультиплексированию в транспортном потоке MPEG-2. Эксперты отрасли оценили это как большой шаг к совместимости между HLS и MPEG-DASH[6][7].
На конференции WWDC 2019 была анонсирована[8] технология Low Latency HLS - развитие спецификации HLS, позволяющее вести передачу медиа-данных с низкой задержкой. Нововведения включают в себя partial segments (частничные сегменты), дельту плей-листов, возврат сегментов через HTTP/2 и другие изменения.
См. также
Примечания
- ↑ Jordan, Larry The Basics of HTTP Live Streaming . Larry's Blog. Larry Jordan & Associates (10 июня 2013). Дата обращения: 18 июня 2013. Архивировано 23 августа 2013 года.[]
- ↑ Pantos, R. HTTP Live Streaming . Internet Engineering Task Force (30 сентября 2011). Дата обращения: 18 июня 2013. Архивировано 1 апреля 2016 года.
- ↑ RFC 8216 - HTTP Live Streaming . Дата обращения: 26 сентября 2017. Архивировано 28 января 2018 года.
- ↑ MPEG-DASH vs. Apple HLS vs. Smooth Streaming vs. Adobe HDS . Дата обращения: 21 марта 2016. Архивировано из оригинала 18 сентября 2015 года.
- ↑ https://developer.apple.com/videos/play/wwdc2016/504/ Архивная копия от 18 августа 2016 на Wayback Machine What’s New in HTTP Live Streaming
- ↑ http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=111796 Архивная копия от 24 июня 2016 на Wayback Machine HLS Now Supports Fragmented MP4, Making it Compatible With DASH
- ↑ https://bitmovin.com/hls-news-wwdc-2016/ Архивная копия от 18 августа 2016 на Wayback Machine WWDC16: HLS supports Fragmented MP4 — and gets MPEG-DASH compatible!
- ↑ Introducing Low-Latency HLS - WWDC 2019 - Videos (англ.). Apple Developer. Дата обращения: 17 июня 2019. Архивировано 17 июня 2019 года.