Формат apple http live streaming

Формат apple http live streaming

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

Благодаря своим преимуществам, протокол HLS широко применяется провайдерами интернет-телевидения, а также онлайн-кинотеатрами, предоставляющими услуги «видео по запросу».

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

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

Недостатки HLS

Основной недостаток протокола HLS проявляется при просмотре «живых» эфиров и заключается в отставании картинки, которую просматривает абонент на своём экране, от того, что происходит в реальности. Это связано с тем, что происходящее сначала при съёмке записывается, затем кодируется, передаётся через интернет на удаленные серверы и декодируется для последующего просмотра. На всё это, как правило, требуется порядка 20-60 секунд.

Как работает HLS

Трансляции по протоколу HLS осуществляются по принципу дробления потока на фрагменты.

  1. На сервере медиафайл или поток кодируется в нужный формат (H.264, MP3, HE-AAC, AC-3) и формируется в .TS-файл MPEG-2.
  2. .TS-файл разбивается на множество отрывков одинаковой длины, для них автоматически создаётся M3U/M3U8-файл, содержащий ссылки на фрагменты, а также информацию о каждом потоке и их качестве.
  3. Устройство абонента отправляет на сервер запрос, получает M3U-файл, извлекает из него ссылки на медиа, «склеивает» все отрывки и начинает непрерывное воспроизведение подходящего по качестве и скорости потока.

Если трансляция медиа ведётся в режиме «по запросу», M3U-файл содержит ссылки сразу на все фрагменты фильма. В режиме «живой» трансляции (например, при просмотре классического телеканала) в M3U-файле есть только ссылки на несколько фрагментов, при каждом запросе клиентского проигрывателя к плейлисту его содержимое динамически обновляется, пополняясь новыми фрагментами.

Источник

Streaming Examples

View various examples of .M3U8 files formatted to index streams and .ts media segment files on your Mac, iPhone, iPad, and Apple TV.

Advanced stream

  • TS stream compatible with macOS v10.7 or later, iOS 6 or later, and tvOS 9 or later
  • fMP4 stream compatible with macOS v10.12 or later, iOS 10 or later, and tvOS 10 or later
  • Supports «EXT-X-INDEPENDENT-SEGMENT» tag
  • AVERAGE-BANDWIDTH, CODECS, RESOLUTION, FRAME-RATE attributes in variant definitions
  • Floating point durations as separate segment files
  • H.264 @ 30Hz and 60Hz
  • 16×9 aspect ratio
  • 8 video variants
    • Gear 1 — 480×270 @ 775 kbps
    • Gear 2 — 640×360 @ 1.2 Mbps
    • Gear 3 — 768×432 @ 1.5 Mbps
    • Gear 4 — 960×540 @ 2.5 Mbps
    • Gear 5 — 1280×720 @ 3.5 Mbps
    • Gear 6 — 1920×1080 @ 5 Mbps
    • Gear 7 — 1920×1080 @ 6.5 Mbps
    • Gear 8 — 1920×1080 @ 8 Mbps
  • I-Frame variants (fast-forward / rewind support)
  • 3 audio renditions
    • AAC-LC — 48 kHz stereo @ 161 kbps
    • AC-3 — 48 kHz 5.1 @ 384 kbps
    • EC-3 — 48 kHz 5.1 @ 192 kbps
  • 1 subtitle rendition (WebVTT)
    • English

Advanced stream (HEVC/H.264)

  • Stream backwards compatible with macOS v10.7 or later, iOS 6 or later, and tvOS 9 or later
  • HEVC variants compatible with macOS v10.13 or later, iOS 11 or later, and tvOS 11 or later
  • Floating point durations as separate segment files
  • H.264 and HEVC @ 30Hz and 60Hz
  • 16×9 aspect ratio
  • Nine HEVC video variants
    • Gear 9 — 1920×1080 @ 5.8 Mbps
    • Gear 8 — 1920×1080 @ 4.5 Mbps
    • Gear 7 — 1920×1080 @ 3.2 Mbps
    • Gear 6 — 1280×720 @ 2.4 Mbps
    • Gear 5 — 960×540 @ 1.7 Mbps
    • Gear 4 — 768×432 @ 990 kbps
    • Gear 3 — 640×360 @ 660 kbps
    • Gear 2 — 480×270 @ 350 kbps
    • Gear 1 — 416×234 @ 145 kbps
  • Nine H.264 video variants
    • Gear 9 — 1920×1080 @ 7.8 Mbps
    • Gear 8 — 1920×1080 @ 6.0 Mbps
    • Gear 7 — 1920×1080 @ 4.5 Mbps
    • Gear 6 — 1280×720 @ 3.0 Mbps
    • Gear 5 — 960×540 @ 2.0 Mbps
    • Gear 4 — 768×432 @ 1.1 Mbps
    • Gear 3 — 640×360 @ 730 kbps
    • Gear 2 — 480×270 @ 365 kbps
    • Gear 1 — 416×234 @ 145 kbps
  • I-Frame variants (fast-forward / rewind support)
  • 3 audio renditions
    • AAC-LC — 48 kHz stereo @ 160 kbps
    • AC-3 — 48 kHz 5.1 @ 384 kbps
    • EC-3 — 48 kHz 5.1 @ 192 kbps
  • 1 subtitle rendition (WebVTT)
    • English
Читайте также:  Навигатор для пешеходов для айфон

Basic stream

  • Compatible with macOS v10.7 or later and iOS 4.3 or later
  • 4×3 aspect ratio
  • H.264 @ 30Hz
  • floating point durations as separate segment files
  • CODECS attribute in master playlist
  • 4 video variants
    • Gear 1 — 400×300 @ 232 kbps
    • Gear 2 — 640×480 @ 650 kbps
    • Gear 3 — 640×480 @ 1 Mbps
    • Gear 4 — 960×720 @ 2 Mbps
  • 1 audio-only variant
    • Gear 0 AAC — 22.05 kHz stereo @ 40 kbps

Basic stream

Note: The primary audio in the stream should be used for any sync testing. The second alternate audio demonstrates the use of an alternate audio option, but was not designed as a true sync verification.

  • Compatible with macOS v10.7 or later and iOS 5 or later
  • 16×9 aspect ratio
  • H.264 @ 30Hz
  • single .ts file, with byte-ranges in the playlists
  • floating point durations
  • CODECS and RESOLUTION attributes in master playlist
  • I-Frames (fast forward rewind support)
  • closed captions
  • timed metadata (timecode every 5 seconds)
  • 5 video variants
    • Gear 1 — 416×234 @ 265 kbps
    • Gear 2 — 640×360 @ 580 kbps
    • Gear 3 — 960×540 @ 910 kbps
    • Gear 4 — 1280×720 @ 1 Mbps
    • Gear 5 — 1920×1080 @ 2 Mbps
  • 1 audio-only variant
    • Gear 0 — AAC — 22.05 kHz stereo @ 40 kbps
  • 1 alternate audio
    • alt audio — AAC — 22.05 kHz stereo @ 40 kbps
  • subtitles (WebVTT)

Источник

Русские Блоги

Введение в архитектуру HLS и воспроизведение зашифрованных HLS

Обзор HLS

Полное название HLS — HTTP Live Streaming — протокол потоковой передачи мультимедиа на основе HTTP, реализованный Apple. Он очень похож на принцип протокола DASH. Разрезая весь поток в небольшой медиафайл, который можно загрузить через HTTP, затем Предоставьте клиенту файл вспомогательного списка мультимедиа и позвольте клиенту извлекать эти мультимедийные файлы для воспроизведения, чтобы добиться эффекта воспроизведения потока.

Поскольку протокол транспортного уровня требует только стандартного протокола HTTP, HLS может легко проходить через брандмауэр или прокси-сервер и легко использовать CDN для ускорения распространения, а клиент также очень удобен для реализации.

HLS в настоящее время широко используется в области трансляции по запросу и прямой трансляции.

Использование HLS на страницах HTML5 очень просто:

Далее я представлю все аспекты протокола HLS (и включу содержимое части шифрования AES) в целом, и лучше работать с RFC HLS.

Подробный протокол HLS

Приведенный выше hls_arch представляет собой общую диаграмму архитектуры HLS. Можно видеть, что есть три части: сервер, CDN, клиент.

На самом деле основное содержание протокола HLS касается текстового протокола M3U8. На самом деле генерация и синтаксический анализ очень просты. Чтобы проиллюстрировать это более непосредственно, я приведу два простых примера:

Главный плейлист с несколькими битрейтами:

HLS представляет поток мультимедиа через список воспроизведения, на который указывает URI (RFC3986).

Список воспроизведения может быть списком воспроизведения мультимедиа или основным списком воспроизведения, текстовым файлом в кодировке UTF-8, содержащим некоторые идентификаторы URI и описательные теги.

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

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

Более сложный случай состоит в том, что Playlist является Master Playlist, который содержит коллекцию Variant Stream, обычно каждый

Variant Stream содержит несколько разных версий одного и того же потока (например, разные разрешения и разные битрейты).

HLS Media Segments

Каждый сегмент мультимедиа определяется URI и может содержать диапазон байтов.

Продолжительность каждого сегмента мультимедиа определяется тегом EXTINF.

Каждый медиа-сегмент имеет уникальный целочисленный номер медиа-сегмента.

Для некоторых форматов мультимедиа требуется последовательность, специфичная для формата, для инициализации синтаксического анализатора до синтаксического анализа сегмента мультимедиа. Это поле называется разделом инициализации мультимедиа и определяется тегом EXT-X-MAP. Поддерживаемые форматы сегмента мультимедиа

MPEG-2 Transport Streams

Это самый распространенный файл TS.

Раздел инициализации носителя: PAT (Таблица ассоциации программ) и PMT (Таблица карт программ).

Каждый сегмент TS должен содержать программу MPEG-2.

Каждый сегмент TS содержит PAT и PMT, предпочтительно в начале сегмента или указанный тегом EXT-X-MAP.

Fragmented MPEG-4

Это часто называют fMP4.

Раздел инициализации мультимедиа: поле ftyp (включая марку выше ios6), поле ftypbox должно следовать непосредственно за блоком moov. Блок moov должен содержать поле trak (для каждого блока traf в сегменте fMP4 он содержит соответствующий track_ID). В trakbox должна быть таблица с примерами, но количество отсчетов должно быть равно 0. Продолжительность полей mvhd и tkhd должна быть 0. Поле mvex должно следовать за предыдущим блоком trak.

Читайте также:  Что делать если айфон не выключаются

В отличие от обычных файлов MP4, которые содержат блок moov (содержащий примеры таблиц) и mdatbox (содержащий соответствующие образцы), fMP4 содержит блок moof (содержащий подмножество таблиц образцов) и блок mdat (содержащий соответствующие образцы) ,

В каждом сегменте fMP4 каждый блок трафика должен содержать поле tfdt, а сегмент fMP4 должен использовать относительную адресацию фрагмента фильма.Сегменты FMP4 не должны использовать ссылки на внешние данные.

Каждый сегмент fMP4 должен иметь тег EXT-X-MAP.

Packed Audio

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

Поддерживаемое упакованное аудио: AAC с кадрированием ADTS [ISO138187], MP3 [ISO138183], AC-3 [AC3], Enhanced AC-3 [AC3].

Сегмент упакованного аудио не имеет секции инициализации мультимедиа.

Каждый упакованный аудиосегмент должен передавать тег ID3 PRIV на отметке времени, указанной в его первом примере.

Идентификатор владельца ID3 PRIV должен быть com.apple.streaming.transportStreamTimestamp.

Полезная нагрузка ID3 должна представлять собой восьмеричное число с прямым порядком байтов 33-битной временной метки элементарного потока программы MPEG-2, где для высокого значения 31 установлено значение 0.

WebVTT

Сегмент WebVTT — это раздел файла WebVTT. Сегмент WebVTT содержит субтитры. Раздел инициализации мультимедиа: заголовок WebVTT.

Каждый сегмент WebVTT должен начинаться с заголовка WebVTT или иметь тег EXT-X-MAP для его указания.

Каждый заголовок WebVTT должен иметь X-TIMESTAMP-MAP для обеспечения синхронизации аудио и видео.

HLS Playlists

Формат файла списка воспроизведения получен из M3U и наследует два тега: EXTM3U и EXTINF. Приведенные ниже теги определяются синтаксисом в стиле BNF.

Файл списка воспроизведения должен быть идентифицирован URI (.m3u8 или m3u) или HTTP-типом контента (application / vnd.apple.mpegurl или audio / mpegurl).

Символы новой строки могут быть \ n или \ r \ n.

Теги, начинающиеся с #, являются тегами или комментариями, теги, начинающиеся с #EXT, являются тегами, а остальные являются комментариями, и их следует игнорировать при синтаксическом анализе.

URI в списке воспроизведения может использовать абсолютный адрес или относительный адрес. Если используется относительный адрес, он относится к адресу файла списка воспроизведения.

Attribute Lists

Значением некоторых тегов являются списки атрибутов.

Список атрибутов — это разделенный запятыми список пар атрибут / значение.

Формат: AttributeName = AttributeValue.

Basic Tags

Основные теги могут быть использованы в медиа-плейлистах и ​​мастер-плейлистах.

EXTM3U: Должен быть в первой строке файла, логотип является файлом расширенного списка воспроизведения M3U.

EXT-X-VERSION: указывает версию, совместимую с плейлистом.

Media Segment Tags

Каждый сегмент мультимедиа определяется серией тегов сегмента мультимедиа и URI. Некоторые теги сегмента мультимедиа применяются только к следующему сегменту, в то время как другие применяют все следующие сегменты. Тег сегмента мультимедиа может появляться только в списке воспроизведения мультимедиа. ,

EXTINF: используется для указания продолжительности медиа сегмента

EXT-X-BYTERANGE: поддиапазон для указания URI

EXT-X-DISCONTINUITY: указывает на разрыв.

EXT-X-KEY: указывает, что мультимедийный сегмент зашифрован. Это значение используется для расшифровки.

EXT-X-MAP: используется для указания раздела инициализации носителя.

EXT-X-PROGRAM-DATE-TIME: определите отметку времени с помощью первого образца сегмента мультимедиа.

EXT-X-DATERANGE: объединяет временной диапазон с набором пар ключ-значение атрибута.

Media Playlist Tags

Теги Media Playlist описывают глобальные параметры Media Playlist Аналогичным образом, теги Media Playlist могут появляться только в Media Playlist.

EXT-X-TARGETDURATION: используется для указания максимальной продолжительности медиа сегмента.

EXT-X-MEDIA-SEQUENCE: Используется для указания номера последовательности мультимедиа первого сегмента мультимедиа.

EXT-X-DISCONTINUITY-SEQUENCE: Используется для синхронизации между различными потоками вариантов.

EXT-X-PLAYLIST-TYPE: Необязательно, указывает тип всего списка воспроизведения.

EXT-X-I-FRAMES-ONLY: указывает, что каждый мультимедийный сегмент описывает один I-кадр.

Master Playlist Tags

Теги мастер-плейлиста определяют Variant Streams, Renditions и другие отображаемые глобальные параметры. Теги мастер-плейлиста могут появляться только в мастер-плейлисте.

EXT-X-MEDIA: несколько воспроизведений для связывания нескольких списков воспроизведения мультимедиа для одного и того же контента.

EXT-X-STREAM-INF: Используется для указания потока вариантов.

EXT-X-I-FRAME-STREAM-INF: I-кадры, используемые для указания того, что список воспроизведения мультимедиа содержит медиа.

EXT-X-SESSION-DATA: сохранить некоторые данные сеанса.

КЛАВИША EXT-X-SESSION: Используется для расшифровки.

Media or Master Playlist Tags

Приведенные здесь теги могут появляться в Media Playlist или Master Playlist, но если они появляются в одном и том же Master Playlist и Media Playlist одновременно, они должны иметь одинаковое значение.

EXT-X-INDEPENDENT-SEGMENTS: указывает, что каждый медиа сегмент может быть декодирован независимо.

EXT-X-START: указывает предпочитаемую точку для воспроизведения этого плейлиста.

Серверная и клиентская логика

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

Серверная логика

1. При разделении источника мультимедиа на сегмент мультимедиа его следует преимущественно разрезать с момента времени, который может быть эффективно декодирован (например, I-кадр).

2.Создайте URI для каждого медиа-сегмента.

3. Сервер должен поддерживать «gzip» для сжатия текстового содержимого.

4. Создайте индексный файл списка воспроизведения мультимедиа, EXT-X-VERSION не должен быть выше, чем версия, которая ему необходима для обеспечения лучшей совместимости.

Читайте также:  Кубика рубика для iphone

5. Сервер не может изменять Media Playlist по своему усмотрению, за исключением добавления текста в конец файла, удаления URI Media Segment по порядку, увеличения EXT-X-MEDIA-SEQUENCE и EXT-X-DISCONTINUITY-SEQUENCE, добавления EXT-X-ENDLIST в конец ,

6. Добавьте в конце тег EXT-X-ENDLIST, чтобы уменьшить количество клиентских перезагрузок списков воспроизведения.

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

Клиентская логика

1. Клиент получает список воспроизведения через URI. Если это основной список воспроизведения, клиент может выбрать вариант воспроизведения потока.

2. Клиент проверяет, соответствует ли версия EXT-X-VERSION.

3. Клиент должен игнорировать нераспознанные теги и игнорировать пары ключ-значение нераспознанного атрибута.

4. Загрузите файл списка воспроизведения мультимедиа.

5. Воспроизведите файл списка воспроизведения мультимедиа.

6. Перезагрузите файл списка воспроизведения мультимедиа.

7. Определите, какой медиа сегмент будет загружен следующим.

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

Поддержка клиента проста, поскольку он поддерживает запросы HTTP, протокол HTTP не имеет состояния и вам нужно только загружать медиаклипы по порядку.

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

Полный спектр поддержки Apple. Поскольку HLS был предложен Apple, весь спектр продуктов Apple, включая iphone, ipad и safari, может поддерживать воспроизведение HLS без установки каких-либо плагинов. Теперь в Android также добавлена ​​поддержка HLS. ,

Имея собственную многоскоростную адаптацию, Apple уже рассмотрела проблему потоковой адаптации, когда предложила HLS.

Недостатки HLS

По сравнению с протоколами с длинными соединениями, такими как RTMP, задержка выше, и трудно использовать интерактивные сценарии прямой трансляции.

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

Улучшенная технология HLS

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

Здесь в основном представлены варианты HLS сетевого приемника и HLS + облака.

Вариант ЗОЖ на Нетстай

Сначала мы можем загрузить файл M3U8 для сетевого приемника:

Затем откройте загруженный файл списка воспроизведения:

Можно видеть, что это главный список воспроизведения с вложенным в него слоем M3U8, и можно видеть, что сетевой приемник использует wsSession для идентификации соединения воспроизведения.

HLS + другого облака

Сначала мы можем скачать файл M3U8, который стреляет в облако:

Затем откройте загруженный файл списка воспроизведения:

#EXTINF:0.998, no desc

Можно видеть, что HLS +, который также снимает облако, также поддерживает этот вариантный метод HLS для идентификации соединения HLS. Можно видеть, что Uiyun использует uuid для представления соединения HLS.

HTTP 302

Сначала адрес воспроизведения запрашивается в HTTP 302.

❯ curl -v http://uplive.b0.upaiyun.com/live/loading.m3u8\?shp_identify\=302 -o playlist

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 —:—:— —:—:— —:—:— 0* Trying 183.158.35.59.

* Connected to uplive.b0.upaiyun.com (183.158.35.59) port 80 (#0)

> GET /live/loading.m3u8?shp_identify=302 HTTP/1.1

* Curl_http_done: called premature == 0

100 259 100 259 0 0 4813 0 —:—:— —:—:— —:—:— 4886

* Connection #0 to host uplive.b0.upaiyun.com left intact

Открыть список воспроизведения контента:

Redirect to http://183.158.35.19:8080/uplive.b0.upaiyun.com/live/loading.m3u8?

Адрес после перехода хранит реальный список воспроизведения, и в то же время, uuid может быть добавлен к соединению.

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

Анализ задержки HLS

Теоретическая задержка HLS = 1 длительность среза + 0-1 td (td — EXT-X-TARGETDURATION, просто понимается как интервал между выборками игроков) + 0-n стартовых срезов (официальное предложение Apple по запросу (Воспроизведение не начнется до тех пор, пока 3 среза) + Сетевая задержка среза, запрошенного игроком в начале (это требует много времени для сетевого подключения) Чтобы добиться эффекта низкой задержки, срез может быть обрезан меньше, а интервал между выборками может быть уменьшен. Проигрыватель начинает воспроизведение перед загрузкой 3 фильмов, однако эти методы оптимизации увеличат риск нестабильности HLS и ошибок.

Играть в незашифрованном HLS

1. Мы знаем, что видео формата HLS поддерживается только в Android 4.0 и выше. В настоящее время базовая версия 4.0 может рассматриваться и не совместима. Поэтому, чтобы уменьшить рабочую нагрузку, не планируется использовать сторонний проигрыватель и продолжать использовать MediaPlayer. игра

2. В видео формата HLS он передает файл m3u8, который затем содержит несколько фрагментов файла TS. Вот официальный пример от Apple:

В конце концов, это разработано Apple, поэтому, безусловно, правильно смотреть на официальный формат.

Источник

Оцените статью