HLS (HTTP Live Streaming)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:15, 12 января 2019.
HLS
Разработан: Apple Inc
Семейство: HTTP
Назначение протокола: протокол передачи видео
Основные реализации (клиенты): IOS,Safari,Google Chrome,QuickTime Player
Основные реализации (серверы): Adobe Media Server, Nginx Plus, Wowza Streaming Engine
Основные расширения: .m3u8
Вступил в силу с: Май 2009

HLS (англ. HTTP Live Streaming)- протокол для передачи медиа на основе HTTP протокола, который был разработан компанией Apple для QuickTime, Safari, OS X, iOS. Для работы разделяется целый поток на фрагменты, затем скачивается в плей-лист. [Источник 1].

История

Рисунок 1 - Логотип HLS

HTTP Live Streaming (HLS) — это не только самый распространенный, но и один из старейших HTTP-протоколов передачи видео. Реализован на всех устройствах компании Apple Inc. (операционные системы iOS и MacOS), поддержан последними версиями операционных систем Android и bada, а также большинством ТВ-приставок. Видеосигнал пакуется в контейнер MPEG-2 TS, при этом используются широко распространенные кодеки MPEG H.264 для видео и AAC для звука. Видео кодируется с различным выходным битрейтом (c использованием различных профилей сжатия); в итоге генерируется плейлист в формате m3u8. Контент, доставляемый по протоколу HLS, может быть зашифрован и защищен от неавторизованного доступа при помощи алгоритма AES-128. Adobe и поддерживается практически любым персональным компьютером. Принцип его работы схож с другими адаптивными HTTP-технологиями.Здесь используются видеокодеки H.264 и VP6 и аудиокодеки AAC и MP3. Полученные потоки упаковываются в контейнер MP4. HDS поддерживает только одну DRM-систему — Flash Access. В августе 2017 года компанией Apple была выпущена 7 версия документа под названием RFC 8216. (см. рисунок 1) [Источник 2].

Архитектура

Рисунок 2 - Общая схема передачи данных

Для передачи аудиовидеоданных по протоколу HLS используется транспортный поток MPEG-2 TS, в котором видео закодировано в формате AVC (H.264), аудио – AAC.

Сегментёр – это программа, которая из аудио- и видеоданных формирует транспортный поток MPEG-2 и разбивает его на фрагменты одинаковой длительности. Каждый фрагмент записывается в отдельный файл с расширением *.ts, при этом каждый файл начинается с ключевого I-кадра, что обеспечивает бесподрывное переключение между потоками с разным качеством при использовании технологии адаптивного стриминга. Созданные файлы с фрагментами потока сегментёр записывает в папку на веб-сервере. На веб-сервере хранится серия из нескольких файлов с фрагментами потока (обычно 10 файлов) и индексный файл, в котором содержится информация о порядке воспроизведения файлов серии. Индексный файл имеет расширение *.m3u8.Вывод файлов с фрагментами потока на веб-сервер производится непрерывно, по одному. При добавлении нового файла производится удаление одного старого и обновление индексного файла.(см. рисунок 2) [Источник 3].

Рисунок 3 - Архитектура HLS

В основе адаптивного стриминга лежит использование потоков с одинаковым содержимым медиаданных, но разным битрейтом (см. рисунок 3):

  • передача потока:
  • на веб-сервере создаются папки, в которые производится запись одинаковых серий фрагментов потока, но с разным качеством (битрейтом) (см. рисунок 4);
  • помимо индексных файлов, определяющих порядок воспроизведения видеофайлов в папках, создается главный индексный файл (master index file). В главном индексном файле содержатся ссылки на индексные файлы в папках с альтернативными потоками.
  • прием потока – программа-клиент при изменении пропускной способности интернет-канала переключается на считывание данных из папки с другим битрейтом: более низким – при понижении пропускной способности, более высоким – при повышении пропускной способности, что позволяет обеспечить бесподрывное воспроизведение контента.
Рисунок 4 - Веб-сервер

Особенности

HTTP Live Streaming предоставляет механизмы для обеспечения масштабируемости и адаптируемости сети, что позволяет сделать качество воспроизведения в беспроводных сетях с высокой пропускной способностью и низким качеством воспроизведения на 3G-сетях, где пропускная способность снижается. HTTP Live Streaming также обеспечивает защиту от ошибок, создавая различные потоки видео, чтобы использовать их, если есть какие-либо ошибки в сегменте.HLS потоки могут нести обобщенные метаданные ID3 как отдельный PID в транспортном потоке.

Масштабируемость

Для того, чтобы сделать систему масштабируемой и адаптируемой к пропускной способности сети, видео-поток кодируется в разных качествах. Таким образом, в зависимости от скорости пропускной способности и передачи данных по сети, видео будет воспроизведено на разных уровнях качества. Для реализации этого, система должна кодировать видео в различных качествах и генерировать индексный файл, который содержит расположение различных уровней качества. Программное обеспечение клиента управляет различными качествами, что делает запросы в максимально возможном качестве в пределах пропускной способности сети. Таким образом, более низкое качество просмотра будет в сетях 3G и высочайшее качество просмотра видео у Wi-Fi.

Доступность

Для поддержания потока HLS включает в себя функции для восстановления после отключения.Для достижения этой цели несколько потоков хранятся в индексном файле в таком же качестве. Если клиент не может загрузить поток, он пытается загрузить следующий, повторяя до тех пор,пока рабочий поток не будет найден или все потоки не подойдут.

Примеры серверной реализации

Рисунок 5 - Принцип взаимодействия

Ниже приведены примеры серверных решений, поддерживающие HLS. (см. рисунок 5)

Клиенты

Преимущества и недостатки HLS

Преимущества HLS

Рисунок 6 - HTTP Live Streaming

Передача медиаданных по технологии HLS имеет следующие преимущества:

  • данные передаются по протоколу HTTP – протоколу прикладного уровня, используемому в сети Интер¬нет, поэтому такое решение будет работать везде, где доступен Интернет;
  • использование протокола HTTP не требует сложной настройки портов, как при использовании других протоколов, таких как RTSP, RTMP;
  • данные, передаваемые по протоколу HTTP, обычно беспрепятственно проходят через внешние файрволы компаний;
  • в качестве веб-сервера можно использовать бесплатный сервер Apache HTTP Server или nginx, не нужно покупать Adobe Flash Media Server, Wowza Server;
  • имеется возможность зашифровывать передаваемые данные. (см. рисунок 6)

Недостатки HLS

Некоторые отрицательные стороны HLS:

  • на данный момент список программ и устройств, поддерживающих технологию HLS, невелик;
  • при передаче данных имеет место задержка (минимум 10 с), связанная с тем, что поток разбивается на файлы длительностью около 10 секунд;
  • использование большого количества относительно маленьких файлов может отражаться на работоспособности файловой системы компьютера.

Этапы создания и упаковки видео для HLS

Простота в использовании HLS позволяет легко кэшировать отдельные сегменты, а также раздавать сам HLS практически с любой серверной платформы. Для этого существуют 3 шага:

Шаг 1.Подготовка исходных файлов с нужным битрейтом и размером кадра. В данном случае есть разные варианты "развития событий", но лучше всего использовать бесплатный ffmpeg. Также есть и множество видеоредакторов, которые могут помочь. На этом этапе вам нужно получить три файла .mp4 или .mov, со средними битрейтами 500К, 1000К и 2000К. Важно брать для всех них один и тот же исходник, чтобы в конце всего процесса получились сегменты, одинаковые по времени.

Например, если у вас есть исходный файл movie.mp4 (предполагаем, что его битрейт не ниже 2000К), тогда достаточно будет запустить ffmpeg примерно так (ключи обозначают что звуковую дорожку можно взять как есть, а видео битрейт изменить):

  • ffmpeg -i movie.mp4 -acodec copy -vb 500K movie-500K
  • ffmpeg -i movie.mp4 -acodec copy -vb 1000K movie-000K
  • ffmpeg -i movie.mp4 -acodec copy -vb 2000K movie-2000K

Шаг 2. Создание однобитрейтных плейлистов. Следующим этапом является создание набора из плейлиста m3u8 и сегментов *.ts. Важно, чтобы сегменты получились синхронными между разными битрейтами. При этом, к сожалению, мастер-плейлист затем нужно будет создавать руками, в этом может помочь пакет HTTP Live Streaming Tools (для macOS). В него входит несколько программ, из которых нам пригодятся две: mediafilesegmenter и variantplaylistcreator. Первая превращает mp4 файл в плейлист m3u8 и «нарезает» сегменты, вторая собирает несколько однобитрейтных плейлистов в мастер-плейлист.

Возвращаясь к примеру, создаем три плейлиста из трех файлов полученных на предыдущем шаге.

$ mkdir 500K
$ mediafilesegmenter -I -f 500K -B segment movie-500K.mp4
$ mkdir 1000K
$ mediafilesegmenter -I -f 1000K -B segment movie-1000K.mp4
$ mkdir 2000K
$ mediafilesegmenter -I -f 2000K -B segment movie-2000K.mp4

Шаг 3. Сборка в единый мастер. Для этого используется variantplaylistcreator. Запускается он таким образом (для нашего примера):

  • variantplaylistcreator -r -o movie.m3u8 \
  • 500K\prog_index.m3u8 movie-500K.plist \
  • 1000K\prog_index.m3u8 movie-1000K.plist \
  • 2000K\prog_index.m3u8 movie-2000K.plist

Теперь мы собрали мастер-плейлист movie.m3u8. [Источник 4].

Источники

  1. HLS // Wikipedia [2009–2018]. URL: https://ru.wikipedia.org/wiki/HLS (Дата обращения: 25.12.2018).
  2. RFC 8216 // RFC 8216 [2017]. Дата изменения: 08.2017. URL: https://tools.ietf.org/html/rfc8216 (Дата обращения: 05.01.2019).
  3. HLS. URL:https://developer.apple.com/streaming/ (Дата обращения: 25.12.2018).
  4. Готовим адаптивное видео для HTTP Live Streaming// Habr. Дата изменения: 28.04.2013 URL:https://habr.com/post/178267/ (Дата обращения: 05.01.2019).