Apple hls что это

Обновлено: 07.07.2024

СОДЕРЖАНИЕ

Архитектура

  • Кодировщик: кодируйте видеофайлы в формате H.264 и аудио в AAC , MP3 , AC-3 или EC-3 . Он инкапсулируется транспортным потоком MPEG-2 или MPEG-4_Part_14 для его передачи.
  • Segmenter: разделяет поток на фрагменты одинаковой длины. Он также создает индексный файл, содержащий ссылки на фрагментированные файлы, сохраненные как .m3u8 .

Функции

Адаптируемость

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

Использование фрагментированного MP4

На WWDC 2016 Apple объявила о включении адресации байтового диапазона для фрагментированных файлов MP4 или fMP4, что позволяет воспроизводить контент через HLS без необходимости мультиплексировать его в транспортный поток MPEG-2 . Промышленность сочла это шагом к совместимости между HLS и MPEG-DASH .

HLS с низкой задержкой

Существуют два несвязанных расширения HLS с именем «Низкая задержка» и соответствующей аббревиатурой:

  • Apple Low Latency HLS (ALHLS), анонсированная Apple на WWDC2019
  • "Community LHLS" (LHLS), предшествовавшая публикации Apple и предположительно более простая

Другие функции включают в себя:

Apple также добавила новые инструменты: «tsrecompressor» производит и кодирует непрерывный поток аудио и видео с низкой задержкой. Инструмент mediastreamsegmenter теперь доступен в версии с низкой задержкой. Это сегментатор HLS, который принимает поток UDP / MPEG-TS от tsrecompressor и генерирует список воспроизведения мультимедиа, включая новые теги, указанные выше.

Поддержка HLS с низкой задержкой доступна в бета-версии tvOS 13, iOS и iPadOS 14. 30 апреля 2020 года Apple добавила спецификации низкой задержки во второе издание основной спецификации HLS.

Динамическая вставка рекламы

Между двумя тегами EXT-X-DATERANGE, которые содержат атрибуты SCTE35-OUT и SCTE35-IN соответственно, может находиться последовательность URI сегментов мультимедиа. Эти медиа-сегменты обычно представляют собой рекламные программы, которые можно заменить местной или персонализированной рекламой. Замена рекламы не требует замены файлов мультимедиа, нужно изменить только URI в списке воспроизведения, чтобы указать разные рекламные программы. Замену рекламы можно выполнить на исходном сервере или на устройстве воспроизведения мультимедиа клиента.

Реализации сервера

использование

Поддерживаемые плееры и серверы

  • Windows 10 версий с 1507 по 2004 ( Microsoft Edge Legacy) (больше не поддерживается)
  • macOS 10.6+ ( Safari и QuickTime )
  • iOS 3.0+ ( Safari )
  • Android 4.1+ ( Google Chrome )

Клиенты

Имеет полную поддержку HLS.

В Edge Chromium с 79 по настоящее время нет встроенной поддержки.

Поддержка через Media Source Extensions в других ОС.

Android и iOS имеют встроенную поддержку, зависящую от ОС.

Для других платформ требуются расширения источников мультимедиа.

Поддержка через Media Source Extensions в других ОС.

Для других платформ требуются расширения источников мультимедиа.

Имеет полную поддержку HLS.

Имеет полную поддержку HLS.

iPhone, iPad и AppleTV

Воспроизведение потокового Интернет-радио

HLS Audio - 100% совместимый
AAC-LC / HE-AAC / xHE-AAC 2.0 Stereo / 5.1-7.1 Surround
ES - элементарный поток ADTS
fMP4 - фрагментированный ISO MP4
отображает синхронные метаданные и графику в реальном времени

image

Ниже под катом рассматривается альтернатива — Websocket Streaming для iOS Safari и подробно описывается процесс тестирования.

Если у вас система видеонаблюдения или воспроизведение предзаписанного видео, для вас неважны 5-10 секунд задержки. Например, если на видео открывается вид парковки, на которой ничего не происходит, то 10 секунд разницы не имеют значения, разве что увидеть ту же картинку на 10 секунд позже.

Аналогично с предзаписанным видео: 10 секунд буферизации ни на что не повлияют.

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

Другой пример — видеочат с 'моделью'. Клиент пишет в чат 'bb, show me your tits' и совсем не ожидает того, что заказанная услуга придет не мгновенно… Последний случай особенно вопиющ, по мнению наших коллег, специализирующихся на таких видеочатах.

Вот как выглядит HLS-плеер на iOS Safari:

image

Видео занимает весь экран и нет возможности этому помешать. HLS плеер запускается отдельно от браузера, и в нем проигрывается видеопоток. Такое отображение вполне удобно для просмотра видео — включил и смотришь.

  • воспроизведение видео непосредственно на HTML-странице в браузере;
  • на этой же странице могут быть размещены другие элементы, например, чат.
  1. видео должно воспроизводиться с минимальной задержкой;
  2. видео должно воспроизводиться прямо в браузере средствами HTML5.

Как обычно, когда нет поддержки от официального производителя, есть альтернативы,
одна из которых — доставка видео на iOS Safari по протоколу Websockets и отрисовка этого видеопотока средствами браузера.

В настоящей статье мы сравним классический подход с использованием HLS c вещанием того же живого потока по Websocket на iOS Safari, для этого настроим и протестируем обе технологии.

Браузер iOS Safari выбран не случайно. IE и Mac Safari поддерживают Flash, Chrome, FF и Opera поддерживают WebRTC. И только iOS-устройства ограничены использованием HLS, альтернатива которому рассматривается в настоящей статье.

Стриминг видео через Websocket назовем VoW (Video over Websockets), а плеер, который этот поток играет, — VoW-Player.

Подробно опишем тестирование HLS и VoW, включая установку всего необходимого инструмента.

Создаем два дроплета

Для чистоты эксперимента используем два разных виртуальных сервера Centos 6.5 64 bit, 1 GB RAM на digitalocean.

image

Oracle JDK можно скачать здесь.

Можно было бы установить и RPM, но простое копирование папки тоже работает.


Качаем Wowza

Устанавливаем Wowza

Установщик спросит логин и пароль администратора, которые позже можно будет использовать для входа в админку.

Запускаем Wowza

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


Заходим в админ интерфейс Wowza

После успешного запуска админка доступна на порту 8088.
Логин и пароль были заданы во время установки.

image

Разрешаем подключения в настройках live > Incoming Security

По умолчанию RTMP-Publishing разрешен только по паролю. Разрешаем публиковать потоки всем желающим — опция ‘no authentication required’. Так будет проще тестировать, а позже всегда успеем закрыть доступ.

image

Качаем Wirecast Live Encoder

Выбор Wirecast был обусловлен тем, что он хорошо кодирует звук в AAC. Например, FMLE (Flash Media Live Encoder) под Windows 8 такого делать не умеет. FMLE под Mac умеет кодировать AAC, но Mac под рукой не оказалось.

К сожалению, с Wirecast-ом не получилось захватить видео с вебкамеры на Windows 8.1 64 bit, поэтому пришлось стримить видеоролик. Ниже дано описание процесса. На момент написания статьи использовалась версия Wirecast-6.0.4-64-bit.

Качаем sample.mp4 файл из каталога WowzaStreamingEngine/content на сервере

Видеоролик про зайца в формате MPEG4 идет в комплекте с Wowza. Скачиваем его на компьютер, где установлен Wirecast Encoder.

image

Открываем sample.mp4 файл в Wirecast

Добавляем ролик в Wirecast, просто выбрав его в файловой системе.

image

Запускаем воспроизведение sample.mp4 в Wirecast

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

image

Настраиваем Output Settings

Теперь задаем настройки кодирования. С этими настройками видео будет перекодировано и отправлено в сеть по протоколу RTMP.

Кодируем под мобильные устройства H.264 + AAC, задаем разрешение 320x240.

image

Настраиваем адрес RTMP-севрера

Здесь указываем адрес дроплета, на котором установлена Wowza. Имя потока: myStream.

image

Начинаем вещание потока

Нажимаем кнопку ‘Stream’ чтобы начать процесс перекодирования видео и отправку RTMP-потока на сервер. В правом верхнем углу появляется зеленый индикатор соединения.

image

Открываем админку Wowza в iOS Safari, приложение live

Если открыть админку не в iOS Safari, то при попытке получить УРЛы для воспроизведения по HLS будет выдана ошибка ‘Ваше устройство не поддерживает HLS’ или что-то похожее, поэтому заходим в админку в iOS Safari, выбираем приложение ‘live’ и кликаем по кнопке ‘Test Players’.

image

image

Кликаем по HLS-урлу и начинаем воспроизведение в Apple iPhone Safari

Отметим, что задержка воспроизведения составляет около 25 секунд. Наверняка, это где-то можно тюнить, но ‘из коробки’ имеем то, что имеем.

image

Таким образом получаем следующую схему вещания HLS:

Схема достаточно простая: отправляем ролик по RTMP и раздаем по HLS.

image

Устанавливаем JDK на второй дроплет тем же способом, что и для Wowza

Устанавливаем и настраиваем Web Call Server 4

Скачиваем и устанавливаем WCS4-сервер


Установщик спросит два раза IP-адрес.
Нужно указать IP-адрес дроплета оба раза.

IP адрес определяется например командой ifconfig.

image

В нашем случае это 46.101.139.106.

Получаем бесплатную лицензию и активируем ее после установки

Добавляем поддержку AAC-кодека в настройках и RTSP interleave mode

AAC — это mpeg4-generic. ‘Interleave mode’ добавляем на тот случай, если Wowza-сервер был сконфигурирован на работу RTSP через TCP.

image


Запускаем сервер

Сервер запускается довольно долго на виртуалке. Ждем 1 минуту. Перед запуском желательно прописать в /etc/hosts IP адрес сервера и имя хоста (hostname). Без этого с запуском могут быть проблемы.

image

Устанавливаем и запускаем Apache

Apache будет отдавать страничку с тестовым плеером.

Разворачиваем пример с VoW Player в web-каталоге

Указываем URL подключения к серверу и стрим, который нужно забрать

image

Подключаемся к серверу через Websocket:


Забираем поток с Wowza по RTSP:


Открываем плеер в iOS Safari

На странице есть область отображения видео, две кнопки и область отображения текущих статусов воспроизведения.

image

Начинаем воспроизведение

Нажимаем ‘Play’ для того чтобы начать воспроизведение. Видим, что внутренний плеер iOS не подключается и видео воспроизводится непосредственно в теле HTML-страницы. Контролы ‘Play’ и ‘Pause’, а также блок статусов остаются на своих местах.

image

image

Так выглядит видео, растянутое на весь экран пальцами:

image

Если открыть ту же страницу в Google Chrome и применить Developer Tools, то можно увидеть HTML5 canvas — элемент, в который происходит отрисовка видео.

image

Если копнуть глубже и заглянуть во вкладку ‘Network’, можно увидеть множество Websocket Binary Frames, прилетающих с высокой скоростью, — это и есть тот видеопоток, который мы видим на HTML5 Canvas — элементе.

image

Задержка воспроизведения кардинально отличается от HLS и составляет всего около 3 секунд. Картинку видно четко. Артефакты отсутствуют. Аудио и видео отыгрывают синхронно без видимых недостатков.

В результате имеем следующую следующую схему вещания:

image

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

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

image

Под сложностью настройки здесь понимается ввод дополнительного звена (WCS-сервер) и сам VoW-Player, что соответственно увеличивает время и сложность настройки системы.

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

Бесперебойную работу урлов не гарантирую.

Отдельная благодарность зайцу Big Buck Bunny. Без него не вышло бы такого красочного повествования.

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

Обзор HLS

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.

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

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 не должен быть выше, чем версия, которая ему необходима для обеспечения лучшей совместимости.

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

Полный спектр поддержки 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, который стреляет в облако:

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

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

% 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.

< Date: Wed, 22 Mar 2017 08:54:11 GMT

< Content-Type: text/plain; charset=utf-8

100 259 100 259 0 0 4813 0 --:--:-- --:--:-- --:--:-- 4886

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

Адрес после перехода хранит реальный список воспроизведения, и в то же время, 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, поэтому, безусловно, правильно смотреть на официальный формат.

Содержание

История


Архитектура


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

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


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

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


Особенности

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

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

Доступность

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

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


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

Клиенты

    (встроенная поддержка средств массовой информации)
  • Система iOS (встроенная поддержка средств массовой информации) (веб-браузер) (веб - браузер) (веб - браузер) (медиа - плеер) (музыкальный проигрыватель) (медиа - плеер) (медиа - плеер) (медиа - плеер) / SMPlayer / MPV (медиа - плеер)

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

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


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

Недостатки 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

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

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

Читайте также: