Доставка контента по HLS

HLS (HTTP Live Streaming) — протокол для потоковой передачи медиа с адаптивным битрейтом поверх HTTP, разработанный компанией Apple.

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


Техническое описание трансляции через HLS

Для трансляции через HLS видеофайл делится на мелкие видеофрагменты, имеющие расширение «.ts» (MPEG2 Transport Stream). Один и тот же контент может кодироваться в видеофайлы разного качества для адаптации к скорости соединения клиента. Трансляция видео начинается с доставки клиенту файла-манифеста (master.m3u8), который содержит ссылки на индексные файлы для трансляций в разном качестве. Индексные файлы содержат список воспроизведения со ссылками на видеофрагменты. Основываясь на пропускной способности доступного в данный момент соединения клиента, медиаплеер клиента выбирает подходящий индексный файл и видеофрагменты из него.


Метод кодирования для передачи через HLS

Видеоматериалы должны быть закодированы по алгоритму H.264(AVC) или H.265(HEVC).


Внедрение

Внедрение HLS требует создания зоны CDN для больших объектов и использования индексного файла .m3u8, который содержит ссылки на соответствующие .ts-сегменты файла.

Обратите внимание, что вам нужно только загрузить свои полные файлы .mp4, а сегментация выполняется CDN. Для получения .m3u8-файла нужно добавить префикс «/hls» в путь файла и «/index.m3u8» в конце.


Например: 

Ваш загруженный mp4: /video/012345.mp4

Автоматически созданный m3u8: /hls/video/012345.mp4/index.m3u8

Длина по умолчанию для первого и остальных сегментов – 5 и 10 секунд, соответственно. Вы можете изменить их, используя параметры bsd (первые несколько сегментов) и sd (другие сегменты) в URL.


Например: 

Автоматически созданный m3u8:
/hls/bsd/10000-10000-15000/sd/20000/video/012345.mp4/index.m3u8

В приведенном выше примере длина первого сегмента составляет 10 секунд, второго – 10 секунд, третьего – 15 секунд, а для остальных – 20 секунд. Обратите внимание, что значения должны быть в миллисекундах. Значения задаются в миллисекундах.

Важно указывать относительные пути сегмента, в соответствии со спецификациями https://tools.ietf.org/html/draft-pantos-http-live-streaming-17. Это означает, что абсолютный путь для сегмента «seg-5-v1-a1.ts» – /hls/video/012345.mp4/seg-5-v1-a1.ts, а не /seg-5-v1-a1.ts


URLSET

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


Например:

Допустим, у нас есть файл /video/012345.mp4 в трех разрешениях: 240p, 360p и 480p. Мы назвали файлы 012345_240p.mp4, 012345_360p.mp4 и 012345_480p.mp4, соответственно.

URI для генерации списка воспроизведения: /hls/video/012345_,24,36,48,0p.mp4/urlset/master.m3u8

Где общие части — это «012345_» и «0 p.mp4», а битрейты — 24,36,48 — разделены запятыми.

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=368981,RESOLUTION=426x240,FRAME-RATE=24.000,CODECS="avc1.4d4015,mp4a.40.2"
/hls/012345_240p.mp4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460061,RESOLUTION=640x360,FRAME-RATE=24.000,CODECS="avc1.4d401e,mp4a.40.2"
/hls/012345_360p.mp4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=789049,RESOLUTION=854x480,FRAME-RATE=24.000,CODECS="avc1.4d401e,mp4a.40.2"
/hls/012345_480p.mp4/index.m3u8

Файл манифеста (master.m3u8) содержит списки воспроизведения (index.m3u8) для каждого из предоставленных файлов вместе с дополнительной информацией для каждого потока, включенного в списки воспроизведения.

Файл манифеста заканчивается на master.m3u8, а не на index.m3u8, как у списка воспроизведения для одного файла.

Следует также отметить, что список воспроизведения в главном списке воспроизведения имеет тот же URI, что и тот, который может использоваться для отдельных URI.


Субтитры в формате VTT

Для потоковой передачи HLS UCDN поддерживает многоязычные субтитры в формате VTT.

Чтобы продемонстрировать эту функцию, мы будем использовать имя файлы /video/012345.mp4, и мы предполагаем, что субтитры находятся в той же директории /video или в поддиректории /video/subs/.


Пример:

/hls/video/,lang/eng/012345_eng.vtt,lang/ger/012345_ger.vtt,012345.mp4,/urlset/master.m3u8

/hls/video/,subs/lang/eng/012345_eng.vtt,subs/lang/ger/012345_ger.vtt,012345.mp4,/urlset/master.m3u8


Следует отметить несколько моментов для указанного выше пути запроса:

1. Мы используем urlset и master.m3u8 для загрузки субтитров в плейлист, а не стандартный плейлист index.m3u8

2. Сначала мы указываем общий путь – /video.

3. Обязательной частью URL является часть «lang/ISO 639-2», где ISO 639-2 – это трехбуквенный код страны. Вы можете найти все коды на этой странице: https://www.loc.gov/standards/iso639-2/php/code_list.php

4. Если субтитры находятся в подпапке, папка должна находиться перед требуемой частью(3).

5. Все запятые в адресе размещены намеренно.


Ограничение доступа с помощью секретного ключа

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

Чтобы объединить все функции секретного ключа, ограничивающие доступ, необходимо включить следующую часть:

/video/bsd/10000-10000-15000/sd/20000/lang/eng/012345_eng.vtt,lang/ger/012345_ger.vtt,012345_,24,36,48,0p.mp4

Обратите внимание, что префикс /hls и суффиксы urlset/master.m3u8 и /index.m3u8 исключены.

Все сегменты имеют прикрепленные к ним ключи внутри файла .m3u8. По этой причине нет необходимости вычилсять ключ для каждого сегмента отдельно.

Поскольку один ключ используется для всего .m3u8 файла, важно отметить, что для длинных видео ключ может истечь до того, как будет сделан запрос для конкретного сегмента.



Трансляция видео

Ускорение доставки HLS

Доставка контента по MPEG-DASH