Введение в m3u8
М3У8 Это версия Unicode? М3У, в кодировке UTF-8. Файлы M3U и M3U8 являются основой формата протокола HTTP Live Streaming (HLS), используемого Apple, который можно воспроизводить на таких устройствах, как iPhone и MacBook.
Определение вышеприведенного текста взято изВикипедияКак видите, файл m3u8 на самом деле является частью протокола HTTP Live Streaming (сокращенно HLS), а HLS — это протокол потоковой передачи по сети на основе HTTP, предложенный Apple.
Технология HLS разбивает весь поток на небольшие HTTP-файлы для загрузки, загружая по несколько штук за раз. Во время воспроизведения медиапотока клиент может выбрать загрузку одного и того же ресурса из множества альтернативных источников с разной скоростью, что позволяет сеансу потоковой передачи адаптироваться к различным скоростям передачи данных. При запуске сеанса потоковой передачи клиент загружает расширенный файл плейлиста M3U (m3u8), содержащий метаданные, используемые для поиска доступных медиапотоков.
HLS запрашивает только базовые HTTP-пакеты. В отличие от протокола RTP (Real-time Transport Protocol), HLS может проходить через любой межсетевой экран, разрешающий передачу HTTP-данных.действующийсерверТакже легко использовать сети доставки контента для передачи медиапотоков.
HLS — это протокол потокового мультимедиа нового поколения. Его основной принцип реализации заключается в фрагментации большого медиафайла на сегменты. Пути к ресурсам сегментов записываются в файл m3u8 (также известный как плейлист) вместе с дополнительными описаниями (например, требованиями к пропускной способности ресурса) для доставки клиенту. Затем клиент извлекает соответствующие медиаресурсы из файла m3u8 и воспроизводит их.
Поэтому, когда клиент получает файл потока HLS, он в основном анализирует файл m3u8.
Итак, давайте кратко рассмотрим файл m3u8.
Введение в файл M3U8
Файл m3u8 по сути представляет собой плейлист, который может быть как обычным медиа-плейлистом, так и мастер-плейлистом. Независимо от типа плейлиста, текст внутри него кодируется в кодировке UTF-8.
При использовании файла m3u8 в качестве медиа-плейлиста его внутренняя информация содержит последовательность ресурсов медиа-сегментов. Последовательное воспроизведение этих ресурсов позволяет полностью отобразить медиа-ресурсы. Формат файла следующий:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
Для воспроизведения по запросу клиенту достаточно загрузить указанные выше сегментные ресурсы по порядку и воспроизвести их по одному. Для потоковой передачи в реальном времени клиенту необходимо периодически запрашивать файл m3u8, чтобы проверить наличие новых сегментных данных, которые необходимо загрузить и воспроизвести.
При использовании m3u8 в качестве основного плейлиста он содержит несколько ресурсов списка потоков (Variant Stream) одного и того же медиаресурса. Формат этого списка следующий:
#EXTM3U
#EXT-X-STREAM-INF:ПРОПУСКНАЯ СПОСОБНОСТЬ=150000,РАЗРЕШЕНИЕ=416x234,КОДЕКИ="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:ПРОПУСКНАЯ СПОСОБНОСТЬ=240000,РАЗРЕШЕНИЕ=416x234,КОДЕКИ="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:ПРОПУСКНАЯ СПОСОБНОСТЬ=440000,РАЗРЕШЕНИЕ=416x234,КОДЕКИ="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:ПРОПУСКНАЯ СПОСОБНОСТЬ=640000,РАЗРЕШЕНИЕ=640x360,КОДЕКИ="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
Этот резервный потоковый ресурс содержит несколько плейлистов медиаконтента с разным битрейтом и форматом. Он также может предоставлять различные версии контента ресурса, например, аудиофайлы на разных языках и видеофайлы, снятые с разных ракурсов. Клиенты могут выбрать подходящий поток в зависимости от различных сетевых условий и, в идеале, предпочтений пользователя.
Выше представлено общее содержимое файла m3u8. Далее мы объясним формат содержимого m3u8.
формат файла m3u8
Формат файла m3u8 в основном включает три аспекта:
Определение формата плейлиста: Содержимое плейлиста (также известного как файл m3u8) должно строго соответствовать требованиям спецификации. Ниже приведены некоторые основные условия, которые необходимо соблюдать:
Файлы m3u8 должны быть закодированы в UTF-8, не могут использовать порядок байтов Byte Order Mark (BOM) и не могут содержать управляющие символы UTF-8 (U+0000 ~ U_001F и U+007F ~ U+009F).
Каждая строка файла m3u8 представляет собой либо URI, либо пустую строку, либо начинается с #.НитьПробелы не допускаются, за исключением явных объявлений.
В файле m3u8 строка, начинающаяся с #, является либо комментарием, либо тегом. Теги начинаются с #EXT и чувствительны к регистру.
Списки атрибутов: значения некоторых тегов представляют собой списки атрибутов. Списки атрибутов, следующие за тегом, разделяются запятыми, которые разделяют несколько пар атрибут/значение без пробелов.
Синтаксис пар атрибут/значение следующий:
ИмяАтрибута=ЗначениеАтрибута
в:
AttributeName — это строка без кавычек, состоящая из символов [A..Z], [0..9] и -. Поэтому в AttributeName можно использовать только заглавные буквы, и между AttributeName и = не должно быть пробелов. Аналогично, между = и AttributeValue не должно быть пробелов.
Значение AttributeValue может быть только следующих типов:
Десятичное целое число: десятичная строка без кавычек, состоящая из [0..9], в диапазоне от ~ (18446744073709551615), с длиной символов от 1 до 20.
Шестнадцатеричная последовательность: строка без кавычек, состоящая из [0..9] и [A..F] с префиксом 0x или 0X. Максимальная длина последовательности зависит от имени её атрибута AttributeNames.
Знаковое десятичное число с плавающей точкой: строка без кавычек, состоящая из [0..9], - и .
Строка в кавычках: строка, заключенная в двойные кавычки. Символы 0xA, 0xD и двойные кавычки " не могут присутствовать в строке. Строка чувствительна к регистру.
Перечисляемая строка: последовательность строк без кавычек, явно определённых параметром AttributeName. Строка не может содержать двойные кавычки, запятые и пробелы.
Десятичное разрешение: два целых десятичных числа, разделённых символом x. Первое целое число представляет горизонтальную ширину, а второе — вертикальную высоту (в пикселях).
Теги: Теги используются для указания глобальных параметров файла m3u8 или некоторой информации о следующих файлах сегментов/списках воспроизведения мультимедиа.
Теги можно разделить на пять типов: базовые теги, теги сегментов медиа, теги плейлистов медиа, теги мастер-плейлистов и теги плейлистов. Их конкретное содержание следующее:
Базовые теги: применимы как к медиа-плейлисту, так и к главному плейлисту. Конкретные теги:
EXTM3U: Указывает, что файл имеет расширение m3u8. Каждый файл M3U должен иметь этот тег в первой строке.
EXT-X-VERSION: Указывает номер версии протокола HLS. Этот тег связан с совместимостью с потоковой передачей мультимедиа. Этот тег является глобальным и применяется ко всему файлу m3u8. Для каждого файла m3u8 может быть определён только один из этих тегов. Если файл m3u8 не содержит этого тега, по умолчанию используется первая версия протокола.
Теги сегментов медиаконтента: каждому URI сегмента предшествует ряд тегов сегмента медиаконтента, которые его описывают. Некоторые теги сегмента действительны только для ресурсов следующего сегмента; некоторые теги сегмента действительны для всех последующих сегментов, пока не встретится описание другого сегмента. Теги типа сегмента медиаконтента не могут отображаться в главном плейлисте. Конкретные теги следующие:
EXTINF: Указывает длительность (в секундах) медиасегмента, указанного в URL. Этот тег должен быть указан перед каждым медиасегментом URL. Формат этого тега:
#EXTINF:,[]<br>
в:</p>
<p>Длительность: может быть десятичным целым числом или числом с плавающей точкой, а ее значение должно быть меньше или равно значению, указанному EXT-X-TARGETDURATION.<br>
Примечание: Рекомендуется всегда использовать значения с плавающей точкой для указания длительностей, так как это позволяет клиентам уменьшить ошибки округления при позиционировании потоков. Однако, если номер версии совместимости EXT-X-VERSION меньше 3, необходимо использовать целые значения.<br>
EXT-X-BYTERANGE: Этот тег указывает, что следующий сегментный ресурс является частичным диапазоном медиа-фрагментного ресурса, указанного последующим URI (т.е. содержимое медиа-ресурса URI перехватывается как следующий сегмент). Этот тег действует только для следующего URI. Его формат:</p>
<p>#EXT-X-BYTERANGE:<n>[@<o>]<br>
в:</p>
<p>n — десятичное целое число, представляющее размер перехваченного сегмента (единица: байты).<br>
Необязательный параметр o также является десятичным целым числом, указывающим начальную позицию перехвата (выраженную в байтах, перехват выполняется после перемещения позиции байта от начала ресурса, указанного URI).<br>
Если o не указано, то начальная позиция перехвата берется со следующего байта после предыдущего перехвата метки (то есть предыдущего n+o+1).<br>
Если этот тег не указан, областью сегментации является весь фрагмент ресурса URI.<br>
Примечание: для использования тега EXT-X-BYTERANGE необходимо, чтобы совместимый номер версии EXT-X-VERSION был больше или равен 4.<br>
EXT-X-DISCONTINUITY: Этот тег указывает на разрыв между предыдущим и следующим фрагментами. Его формат:</p>
<p>#EXT-X-РАЗРЫВ<br>
Этот тег необходимо использовать при изменении любого из следующих условий:</p>
<p>формат файла<br>
Количество, тип, идентификаторы треков<br>
последовательность временных меток<br>
Этот тег следует использовать при изменении любого из следующих условий:</p>
<p>параметры кодирования<br>
кодирующая последовательность<br>
Примечание: Классический пример использования EXT-X-DISCONTINUITY — вставка рекламы в видеопотоки. Поскольку видеопоток и рекламный видеопоток — это разные ресурсы, EXT-X-DISCONTINUITY используется для индикации переключения между двумя потоками. Когда клиент видит этот тег, он решает проблему прерывания переключения, обеспечивая более комфортное использование.<br>
Более подробную информацию см. в разделе «Включение рекламы в плейлист».</p>
<p>EXT-X-KEY: Медиа-сегмент может быть зашифрован, и этот тег может указывать метод расшифровки.<br>
Этот тег действует для всех сегментов мультимедиа и всех блоков инициализации мультимедиа (раздел инициализации мультимедиа) вокруг них, объявленных тегом EXT-X-MAP, пока не встретится следующий тег EXT-X-KEY (если файл m3u8 имеет только один тег EXT-X-KEY, он действует для всех сегментов мультимедиа).<br>
К одному и тому же медиасегменту можно применить несколько тегов EXT-X-KEY, если все они генерируют один и тот же ключ.<br>
Формат этого тега:</p>
<p>#EXT-X-KEY:<attribute-list><br>
Список свойств может содержать следующие ключи:</p>
<p>МЕТОД: Это значение представляет собой перечислимую строку, которая определяет метод шифрования.<br>
Этот ключ является обязательным параметром. Его значение может быть NONE, AES-128 или SAMPLE-AES.<br>
в:<br>
NONE: указывает на то, что фрагмент не зашифрован (другие атрибуты не могут отображаться в это время);<br>
AES-128: Указывает, что для шифрования используется AES-128.<br>
SAMPLE-AES: Это означает, что медиасегмент содержит образцы медиаданных, например, аудио или видео, зашифрованные с помощью AES-128. В этом случае атрибут IV может присутствовать или отсутствовать.</p>
<p>URI: указывает путь к ключу.<br>
Ключ представляет собой 16-байтовые данные.<br>
Этот ключ является обязательным параметром, если только METHOD не равен NONE.</p>
<p>IV: Это значение представляет собой 128-битное шестнадцатеричное значение.<br>
AES-128 требует одинакового 16-байтового значения IV для шифрования и дешифрования. Использование разных значений IV может повысить стойкость шифра.<br>
Если IV присутствует в списке атрибутов, используйте это значение; если нет, используйте порядковый номер сегмента носителя (т. е. EXT-X-MEDIA-SEQUENCE) в качестве его значения IV по умолчанию, используйте порядок байтов от старшего к младшему и дополняйте его нулями слева, пока порядковый номер не достигнет 16 байтов (128 бит).</p>
<p>KEYFORMAT: Строка, заключенная в двойные кавычки, которая определяет, как ключ хранится в файле ключей (ключ AES-128 в файле ключей — это 16-байтовый ключ, хранящийся в двоичном формате).<br>
Этот атрибут является необязательным и его значение по умолчанию — «identity».<br>
Для использования этого атрибута необходимо, чтобы номер версии совместимости EXT-X-VERSION был больше или равен 5.</p>
<p>KEYFORMATVERSIONS: строка в кавычках, состоящая из одного или нескольких положительных целых значений, разделенных символом / (например: "1", "1/2", "1/2/5").<br>
Если определены одна или несколько конкретных версий KEYFORMT, этот атрибут можно использовать для указания конкретной версии, с которой следует выполнять компиляцию.<br>
Этот атрибут является необязательным и его значение по умолчанию — «1».<br>
Для использования этого атрибута необходимо, чтобы номер версии совместимости EXT-X-VERSION был больше или равен 5.</p>
<p>EXT-X-MAP: Этот тег определяет, как получить раздел инициализации носителя.<br>
Этот тег действителен для всех последующих сегментов мультимедиа, пока не встретится другой тег EXT-X-MAP.<br>
Его формат:</p>
<p>#EXT-X-MAP:<attribute-list><br>
Диапазон значений списка его атрибутов следующий:</p>
<p>URI: строка в кавычках, указывающая путь к ресурсу, содержащему блок инициализации медиа. Этот атрибут обязателен.</p>
<p>BYTERANGE: строка в кавычках, которая указывает местоположение (фрагмент) блока инициализации мультимедиа в ресурсе, указанном URI.<br>
Диапазон, указанный этим атрибутом, должен содержать только блоки инициализации носителя.<br>
Этот атрибут необязателен. Если он не указан, это означает, что ресурс, указанный в URI, представляет собой весь блок инициализации медиа-данных.</p>
<p>EXT-X-PROGRAM-DATE-TIME: этот тег использует абсолютную дату/время для указания времени выборки первого сегмента.<br>
Его формат:</p>
<p>#EXT-X-ПРОГРАММА-ДАТА-ВРЕМЯ:<date-time-msec><br>
Среди них дата-время-мсек является <a href="https://uzbox.com/ru/%d1%8f%d1%80%d0%bb%d1%8b%d0%ba/%d0%b8%d0%b7%d0%be" class="st_tag internal_tag" rel="tag" title="изо">ИСО</a>/Формат даты, определенный IEC 8601:2004, следующий: ГГГГ-ММ-ДДTчч:мм:сс.СССZ.</p>
<p>EXT-X-DATERANGE: Этот тег определяет диапазон дат, состоящий из серии пар атрибут/значение.<br>
Его формат:</p>
<p>#EXT-X-DATERANGE:<attribute-list><br>
Список атрибутов имеет следующие значения:</p>
<p>ID: уникальный идентификатор, заключенный в двойные кавычки, который указывает диапазон дат.<br>
Этот атрибут является обязательным параметром.</p>
<p>КЛАСС: ряд атрибутов и соответствующих семантических значений, определенных заказчиком, заключенных в двойные кавычки.<br>
Все диапазоны дат с одинаковым атрибутом CLASS должны соответствовать соответствующей семантике.<br>
Этот атрибут необязателен.</p>
<p>ДАТА-НАЧАЛА: Начальное значение диапазона дат, заключенное в двойные кавычки.<br>
Этот атрибут является обязательным параметром.</p>
<p>ДАТА ОКОНЧАНИЯ: Конечное значение диапазона дат, заключенное в двойные кавычки.<br>
Значение этого атрибута должно быть больше или равно START-DATE.<br>
Этот атрибут необязателен.</p>
<p>ДЛИТЕЛЬНОСТЬ: Длительность диапазона дат представляет собой десятичное значение с плавающей запятой (единица измерения: секунды).<br>
Значение этого свойства не может быть отрицательным.<br>
При выражении непосредственного времени просто установите значение этого свойства равным 0.<br>
Этот атрибут необязателен.</p>
<p>ПЛАНИРУЕМАЯ-ДЛИТЕЛЬНОСТЬ: этот атрибут представляет собой ожидаемую продолжительность диапазона дат.<br>
Его значение представляет собой десятичное число с плавающей запятой (единица измерения: секунды).<br>
Значение этого свойства не может быть отрицательным.<br>
Если фактическая длительность заранее неизвестна, это свойство можно использовать в качестве оценки ожидаемой длительности диапазона дат.<br>
Этот атрибут необязателен.</p>
<p>X-<client-attribute>: Префикс X- — это пространство имен, зарезервированное для свойств, определяемых клиентом.<br>
Когда клиент настраивает имя атрибута, происходит обратное <a href="https://uzbox.com/ru/%d1%8f%d1%80%d0%bb%d1%8b%d0%ba/dns" class="st_tag internal_tag" rel="tag" title="DNS">DNS</a>(обратный DNS) синтаксис для избежания конфликтов.<br>
Значение настраиваемого атрибута должно быть строкой, заключенной в двойные кавычки, или шестнадцатеричной последовательностью, или десятичным числом с плавающей запятой, например: X-COM-EXAMPLE-AD-ID="XYZ123".<br>
Этот атрибут необязателен.</p>
<p>SCTE35-CMD, SCTE35-OUT, SCTE35-IN: используются для передачи данных SCTE35.<br>
Этот атрибут необязателен.</p>
<p>END-ON-NEXT: Это значение атрибута представляет собой перечислимую строку, и его значение должно быть ДА.<br>
Этот атрибут указывает на достижение конца диапазона, то есть на то, что он равен дате начала следующего диапазона. Последующий диапазон — это диапазон дат с самой ранней датой начала после даты начала данного тега того же класса.<br>
Этот атрибут необязателен.</p>
<p>Тег типа списка воспроизведения мультимедиа: Тег списка воспроизведения мультимедиа — это глобальная информация о параметрах файла m3u8.<br>
Эти теги могут встречаться в файле m3u8 не более одного раза.<br>
Тег списка воспроизведения мультимедиа не может отображаться в главном списке воспроизведения.<br>
Конкретные теги списка воспроизведения медиа следующие:</p>
<p>EXT-X-TARGETDURATION: указывает максимальную продолжительность каждого видеосегмента (в секундах).<br>
Этот тег является обязательным.<br>
Его формат:</p>
<p>#EXT-X-TARGETDURATION:<s><br>
Параметр s представляет собой целевую длительность (единица: секунды).</p>
<p>EXT-X-MEDIA-SEQUENCE: Указывает порядковый номер первого файла фрагмента URL в списке воспроизведения.<br>
Каждый URL-адрес сегмента медиа имеет уникальный целочисленный порядковый номер.<br>
Порядковый номер каждого сегмента мультимедиа увеличивается на 1 в порядке его появления.<br>
Если этот тег не указан, порядковый номер по умолчанию начинается с 0.<br>
Порядковый номер сегмента мультимедиа не имеет ничего общего с именем файла сегмента.<br>
Его формат:</p>
<p>#EXT-X-MEDIA-SEQUENCE:<number><br>
Среди них: номер параметра — это серийный номер среза.</p>
<p>EXT-X-DISCONTINUITY-SEQUENCE: этот тег позволяет синхронизировать различные версии одного и того же потока и различные резервные потоки с тегом EXT-X-DISCONTINUITY.<br>
Его формат:</p>
<p>#EXT-X-РАЗРЫВ-ПОСЛЕДОВАТЕЛЬНОСТЬ:<number><br>
Среди них: номер параметра представляет собой целое десятичное число.<br>
Если в плейлисте не установлен тег EXT-X-DISCONTINUITY-SEQUENCE, то порядковый номер разрыва для первого сегмента ДОЛЖЕН быть равен 0.</p>
<p>EXT-X-ENDLIST: Указывает конец файла m3u8.<br>
Этот тег может располагаться в любом месте файла m3u8, обычно в конце.<br>
Его формат:</p>
<p>#EXT-X-ENDLIST<br>
EXT-X-PLAYLIST-TYPE: Указывает тип потокового медиа. Это поле глобальное.<br>
Этот тег необязателен.<br>
Его формат:</p>
<p>#EXT-X-PLAYLIST-TYPE:<type-enum><br>
Среди них: необязательные значения type-enum следующие:</p>
<p>VOD:即 Video on Demand,表示该视屏流为点播源,因此服务器不能更改该 m3u8 文件;</p>
<p>СОБЫТИЕ: Указывает, что видеопоток<a href="https://uzbox.com/ru/%d1%8f%d1%80%d0%bb%d1%8b%d0%ba/%d0%b6%d0%b8%d0%b1%d0%be%d1%8e%d0%b0%d0%bd%d1%8c" class="st_tag internal_tag" rel="tag" title="Живой источник">Живой источник</a>, поэтому сервер не может изменить или удалить какую-либо часть файла (но может добавить новый контент в конец файла).<br>
Примечание: файлы VOD обычно имеют тег EXT-X-ENDLIST, поскольку они являются источниками по запросу и не изменяются. Однако файлы EVEVT обычно не имеют тега EXT-X-ENDLIST при инициализации, что указывает на то, что новые файлы будут добавляться в конец плейлиста. Поэтому клиенту также необходимо периодически загружать файл m3u8 для получения новых ресурсов медиасегмента, пока не будет получен доступ к тегу EXT-X-ENDLIST.</p>
<p>EXT-XI-FRAMES-ONLY: этот тег указывает, что каждый сегмент медиафайлов представляет собой I-кадр. I-кадры кодируются независимо от других кадров, что обеспечивает быстрое воспроизведение и быстрое перелистывание.<br>
Этот тег действует глобально.<br>
Его формат:</p>
<p>#EXT-XI-FRAMES-ONLY<br>
Если в списке воспроизведения установлено EXT-XI-FRAMES-ONLY, длительность фрагмента (значение тега EXTINF) представляет собой длительность от начала I-кадра текущего фрагмента до появления следующего I-кадра.<br>
Если медиаресурс содержит фрагменты I-кадра, он должен предоставлять блок инициализации медиа или предоставлять доступ к блоку инициализации медиа через тег EXT-X-MAP, чтобы клиент мог загружать и декодировать эти фрагменты I-кадра в любом порядке.<br>
Если для фрагмента I-кадра задано EXT-BYTERANGE, то блок инициализации носителя НЕ ДОЛЖЕН предоставляться.<br>
Для использования EXT-XI-FRAMES-ONLY требуется номер версии совместимости EXT-X-VERSION больше или равный 4.</p>
<p>Тег типа основного плейлиста: основной плейлист определяет резервные потоки, потоки многоязыкового перевода и другие глобальные параметры.<br>
Тег основного плейлиста НЕ ДОЛЖЕН появляться в плейлисте мультимедиа.<br>
Конкретные теги следующие:</p>
<p>EXT-X-MEDIA: используется для указания альтернативных ресурсов списка медиа для воспроизведения многоязычного перевода для одного и того же контента.<br>
Например, три тега EXT-X-MEIDA можно использовать для предоставления аудиоресурсов, содержащих одинаковый контент на английском, французском и испанском языках, или два тега EXT-X-MEDIA можно использовать для предоставления видеоресурсов, снятых с двух разных ракурсов.<br>
Его формат:</p>
<p>#EXT-X-MEDIA:<attribute-list><br>
Диапазон значений списка атрибутов следующий:</p>
<p>ТИП: Значение атрибута — перечисляемая строка.<br>
Существует четыре значения: АУДИО, ВИДЕО, СУБТИТРЫ и СУБТИТРЫ.<br>
Обычно используются СУБТИТРЫ.<br>
Этот атрибут является обязательным параметром.</p>
<p>URI: Путь к списку воспроизведения медиаресурсов, заключенный в двойные кавычки.<br>
Если значение атрибута TYPE равно CLOSED-CAPTIONS, то URI не предоставляется.<br>
Этот атрибут необязателен.</p>
<p>GROUP-ID: строка, заключенная в двойные кавычки, указывающая группу, к которой принадлежит поток многоязыкового перевода.<br>
Этот атрибут является обязательным параметром.</p>
<p>ЯЗЫК: Строка в двойных кавычках, которая указывает язык, используемый потоком.<br>
Этот атрибут необязателен.</p>
<p>ASSOC-LANGUAGE: строка в двойных кавычках, содержащая тег языка, используемая для предоставления одной из языковых версий многоязыкового потока.<br>
Этот параметр необязателен.</p>
<p>ИМЯ: Строка в двойных кавычках, используемая для предоставления понятного человеку описания потока перевода.<br>
Если установлен атрибут LANGUAGE, необходимо также установить атрибут NAME.<br>
Этот атрибут является обязательным параметром.</p>
<p>ПО УМОЛЧАНИЮ: значение атрибута представляет собой перечислимую строку.<br>
Возможные значения: ДА и НЕТ.<br>
Если это свойство не указано, значение по умолчанию — НЕТ.<br>
Если это свойство установлено в значение ДА, то клиент ДОЛЖЕН воспроизводить переведенный поток при отсутствии другой дополнительной информации.<br>
Этот атрибут необязателен.</p>
<p>АВТОВЫБОР: Значение свойства — перечисляемая строка.<br>
Допустимые значения: ДА или НЕТ.<br>
Если не указано иное, по умолчанию используется значение НЕТ.<br>
Если этому свойству задано значение ДА, клиент может выбрать воспроизведение потока перевода, даже если пользователь явно не установил это, поскольку он может настроить текущую среду воспроизведения, например выбор языка системы.<br>
Если это свойство установлено, то когда DEFAULT установлено на YES, это свойство также должно быть установлено на YES.<br>
Этот атрибут необязателен.</p>
<p>ПРИНУДИТЕЛЬНО: Значение атрибута — перечисляемая строка.<br>
Допустимые значения: ДА или НЕТ.<br>
Если не указано иное, по умолчанию используется значение НЕТ.<br>
Это свойство можно задать только в том случае, если для параметра TYPE задано значение SUBTITLES.<br>
Если этому свойству задано значение «ДА», это означает, что поток перевода содержит важный контент. Если это свойство задано, клиент должен выбрать для воспроизведения поток перевода, который наилучшим образом соответствует текущей среде воспроизведения.<br>
Если этому атрибуту задано значение НЕТ, это указывает на то, что содержимое потока перевода предназначено для использования в ответ на запросы пользователя на отображение.<br>
Этот атрибут необязателен.</p>
<p>INSTREAM-ID: строка, заключенная в двойные кавычки, используемая для указания языковой (представительской) версии фрагмента.<br>
Этот атрибут должен быть установлен, если для параметра TYPE установлено значение CLOSED-CAPTIONS.<br>
Доступные значения: «CC1», «CC2», «CC3», «CC4» и «SERVICEn» (n равно 1~63).<br>
Для других значений ТИПА это свойство НЕ ДОЛЖНО быть установлено.</p>
<p>ХАРАКТЕРИСТИКИ: Строка, состоящая из одного или нескольких ИКТ, разделенных запятыми и заключенных в двойные кавычки.<br>
Каждый ИМП представляет собой характеристику потока перевода.<br>
Этот атрибут может содержать частные ИМП.<br>
Этот атрибут необязателен.</p>
<p>КАНАЛЫ: Строка, состоящая из упорядоченного списка параметров, разделенных обратными косыми чертами / и заключенная в двойные кавычки.<br>
Все аудиотеги EXT-X-MEDIA должны иметь установленный атрибут CHANNELS.<br>
Если основной плейлист содержит два потока трансляции с одинаковой кодировкой, но с разным количеством каналов, необходимо установить атрибут CHANNELS; в противном случае атрибут CHANNELS необязателен.</p>
<p>EXT-X-STREAM-INF: Этот атрибут указывает источник резервного копирования. Значение атрибута содержит информацию об источнике резервного копирования.<br>
Его формат:</p>
<p>#EXT-X-STREAM-INF:<attribute-list><br>
<uri><br>
в:</p>
<p>Список воспроизведения мультимедиа, указанный URI, содержит резервный источник перевода, указанный этим тегом.<br>
URI является обязательным параметром.</p>
<p>Список атрибутов параметров тега EXT-X-STREAM-INF имеет следующие параметры:</p>
<p>ПРОПУСКНАЯ СПОСОБНОСТЬ: Этот атрибут представляет собой количество битов, передаваемых в секунду, также известное как пропускная способность. Он представляет собой пиковую скорость резервного потока.<br>
Этот атрибут является обязательным параметром.</p>
<p>СРЕДНЯЯ ПРОПУСКНАЯ СПОСОБНОСТЬ: Этот атрибут представляет собой среднюю скорость передачи фрагмента резервного потока.<br>
Этот атрибут необязателен.</p>
<p>КОДЕКИ: строка в двойных кавычках, содержащая список форматов, разделенных запятыми.<br>
Каждый тег EXT-X-STREAM-INF должен иметь атрибут CODECS.</p>
<p>РАЗРЕШЕНИЕ: Этот атрибут описывает оптимальное разрешение пикселей для источника резервного потока видео.<br>
Этот атрибут необязателен, но рекомендуется добавить настройку этого атрибута для потоков резервного копирования, содержащих видеоисточники.</p>
<p>FRAME-RATE: этот атрибут использует десятичное значение с плавающей запятой для описания максимальной частоты кадров всех видео в резервном потоке.<br>
Для любого источника видео в резервном потоке, частота кадров которого превышает 30 кадров в секунду, необходимо добавить этот параметр свойства.<br>
Этот атрибут необязателен, но рекомендуется добавить настройку этого атрибута для потоков резервного копирования, содержащих видеоисточники.</p>
<p>HDCP-LEVEL: Значение этого атрибута представляет собой перечислимую строку.<br>
Допустимые значения: TYPE-0 или NONE.<br>
Значение TYPE-0 указывает на то, что резервный поток может не воспроизводиться, если выходной сигнал не защищен с помощью технологии защиты широкополосного цифрового контента (HDCP).<br>
Значение NONE указывает на то, что содержимое потока не требует защиты от копирования выходных данных.<br>
Для потоков резервного копирования, использующих разные уровни шифрования HDCP, следует использовать разные ключи шифрования мультимедиа.<br>
Этот атрибут является необязательным и должен предоставляться в случаях, когда воспроизведение может завершиться неудачей из-за отсутствия HDCP.</p>
<p>АУДИО: значение атрибута заключено в двойные кавычки и должно совпадать со значением атрибута GROUP-ID тега EXT-X-MEDIA с атрибутом TYPE, установленным на AUDIO, определенным где-то в основном списке воспроизведения.<br>
Этот атрибут необязателен.</p>
<p>ВИДЕО: Значение атрибута заключается в двойные кавычки и должно совпадать со значением атрибута GROUP-ID тега EXT-X-MEDIA с атрибутом TYPE, установленным на VIDEO, определенным где-то в основном списке воспроизведения.<br>
Этот атрибут необязателен.</p>
<p>SUBTITLES: Значение атрибута заключается в двойные кавычки и должно совпадать со значением атрибута GROUP-ID тега EXT-X-MEDIA с атрибутом TYPE, установленным на SUBTITLES, определенным где-то в основном списке воспроизведения.<br>
Этот атрибут необязателен.</p>
<p>CLOSED-CAPTIONS: Значение этого атрибута может быть строкой в двойных кавычках или NONE.<br>
Если его значение представляет собой строку, оно должно совпадать со значением атрибута GROUP-ID тега EXT-X-MEDIA с атрибутом TYPE, установленным на CLOSED-CAPTIONS, определенным где-то в основном списке воспроизведения.<br>
Если его значение равно NONE, все теги ext-x-stream-inf также должны устанавливать этот атрибут в NONE, указывая, что резервные потоки основного плейлиста не имеют заключительного заголовка. Если у одного резервного потока есть заключительный заголовок, у другого резервного потока его нет, что может привести к прерыванию воспроизведения.<br>
Этот атрибут необязателен.</p>
<p>EXT-XI-FRAME-STREAM-INF: этот тег указывает, что файл списка воспроизведения мультимедиа содержит кадры I-frame нескольких медиаресурсов.<br>
Его формат:</p>
<p>#EXT-XI-FRAME-STREAM-INF:<attribute-list><br>
Список атрибутов этого тега содержит те же параметры, что и тег EXT-XI-FRAME-STREAM-INF, за исключением FRAME-RATE, AUDIO, SUBTITLES и CLOSED-CAPTIONS. Кроме того, к другим атрибутам относятся:</p>
<p>URI: значение этого атрибута представляет собой строку, заключенную в двойные кавычки, которая указывает путь к файлу списка воспроизведения медиафайлов I-frame. Файл списка воспроизведения медиафайлов должен содержать тег EXT-XI-FRAMES-ONLY.<br>
EXT-X-SESSION-DATA: этот тег позволяет основному плейлисту переносить произвольные данные сеанса.<br>
Этот тег необязателен.<br>
Его формат:</p>
<p>#EXT-X-СЕАНС-ДАННЫЕ:<attribute-list><br>
Среди них имеются следующие варианты значений списка атрибутов параметров:</p>
<p>DATA-ID: строка, заключенная в двойные кавычки, представляющая конкретное значение данных.<br>
Этому свойству следует присвоить имя с использованием обратного DNS, например, «com.example.movie.title». Однако из-за отсутствия централизованного реестра могут возникать конфликты.<br>
Этот атрибут является обязательным параметром.</p>
<p>ЗНАЧЕНИЕ: Это значение атрибута представляет собой строку в двойных кавычках, содержащую значение, указанное DATA-ID.<br>
Если задан LANGUAGE, VALUE должно содержать понятную человеку строку на этом языке.</p>
<p>URI: строка URI, заключённая в двойные кавычки. Ресурс, указанный в URI, должен быть в формате JSON; в противном случае клиент может не распознать его.</p>
<p>ЯЗЫК: Строка, заключенная в двойные кавычки, содержащая тег языка, указывающий язык, используемый ЗНАЧЕНИЕМ.</p>
<p>EXT-X-SESSION-KEY: Этот тег позволяет главному плейлисту указывать ключ шифрования медиаплейлиста. Это позволяет клиенту предварительно загружать эти ключи, не получая их из медиаплейлиста.<br>
Этот тег необязателен.<br>
Его формат:<br>
#EXT-X-СЕАНС-КЛЮЧ:<attribute-list><br>
Список атрибутов такой же, как для EXT-X-KEY, за исключением того, что значение атрибута METHOD не должно быть NONE.<br>
Теги типов плейлистов: следующие теги можно задать как в главном плейлисте, так и в медиа-плейлисте.<br>
Однако теги, заданные в главном плейлисте, не должны повторно устанавливаться в плейлисте мультимедиа, на который указывает главный плейлист.<br>
Теги, которые присутствуют в обоих плейлистах, должны иметь одинаковое значение. Эти теги не могут появляться в одном плейлисте несколько раз (их можно использовать только один раз). Конкретные теги перечислены ниже:</p>
<p>EXT-X-INDEPENDENT-SEGMENTS: этот тег указывает, что все образцы медиа в сегменте медиа могут быть декодированы независимо, без опоры на информацию другого сегмента медиа.<br>
Этот тег действителен для всех медиаклипов в списке.<br>
Его формат:</p>
<p>#EXT-X-НЕЗАВИСИМЫЕ-СЕГМЕНТЫ<br>
Если этот тег появляется в главном плейлисте, он применяется ко всем медиаклипам во всех медиаплейлистах.</p>
<p>EXT-X-START: Этот тег указывает начальную позицию плейлиста.<br>
По умолчанию, когда клиент начинает сеанс воспроизведения, он должен использовать для воспроизведения позицию, указанную этим тегом.<br>
Этот тег необязателен.<br>
Его формат:</p>
<p>#EXT-X-START:<attribute-list><br>
Диапазон значений списка атрибутов параметров следующий:</p>
<p>TIME-OFFSET: Значение этого атрибута представляет собой десятичное число с плавающей запятой со знаком (единица измерения: секунды).<br>
Положительное число, представляющее смещение времени от начала плейлиста.<br>
Отрицательное число представляет собой смещение по времени до последней позиции медиа-сегмента в плейлисте.<br>
Абсолютное значение этого атрибута не должно превышать длительность плейлиста. Превышение означает, что файл достиг конца (положительное значение) или начала (отрицательное значение).<br>
Если плейлист не содержит тега EXT-X-ENDLIST, значение атрибута TIME-OFFSET не должно находиться в пределах трех сегментов последнего сегмента плейлиста.</p>
<p>ТОЧНО: Значение представляет собой перечислимую строку.<br>
Допустимые значения: ДА или НЕТ.<br>
Если значение равно ДА, клиент ДОЛЖЕН воспроизвести медиа-сегмент, содержащий TIME-OFFSET, но НЕ ДОЛЖЕН отображать фрагменты сэмплов внутри этого фрагмента, которые предшествуют TIME-OFFSET.<br>
Если значение равно НЕТ, клиент ДОЛЖЕН попытаться отобразить все фрагменты выборки в медиасегменте.<br>
Этот атрибут является необязательным и считается НЕТ, если не указан.</p>
<p>На этом этапе мы полностью внедрили теги, связанные с m3u8.</p>
<p>Далее мы кратко рассмотрим конкретные операции по получению файлов ресурсов.</p>
<p>Как уже упоминалось выше, файл m3u8 представляет собой либо медиа-плейлист, либо мастер-плейлист. Независимо от типа плейлиста, его содержимое состоит из двух структур:</p>
<p>Информация, начинающаяся с #EXT, представляет собой информацию тега, которая дополнительно описывает медиаресурс;<br>
Остальное — информация о ресурсах: либо путь к ресурсу фрагмента (список воспроизведения мультимедиа), либо путь к ресурсу m3u8 (главный список воспроизведения);<br>
Давайте сначала кратко рассмотрим представление фрагментов медиафайла m3u8:</p>
<p>В файле m3u8 сегмент мультимедиа может быть представлен полным путем, как показано ниже:<br>
#EXTINF:10.0,<br>
<a href="http://example.com/movie1/fileSequenceA.ts" rel="nofollow">http://example.com/movie1/fileSequenceA.ts</a><br>
Таким образом, путь для получения фрагмента ресурса — это путь, указанный в файле m3u8, то есть: http://example.com/movie1/fileSequenceA.ts</p>
<p>В файлах m3u8 медиа-сегменты также могут быть представлены с использованием относительных путей, как показано ниже:<br>
#EXTINF:10.0,<br>
fileSequenceA.ts<br>
Это означает, что путь к файлу фрагмента указан относительно пути к файлу m3u8. То есть, если текущий путь к m3u8: https://127.0.0.1/hls/m3u8, то путь к файлу фрагмента fileSequenceA.ts будет: https://127.0.0.1/hls/fileSequenceA.ts</p>
<p>Хотя в файлах m3u8 можно использовать абсолютные пути для указания путей к ресурсам сегментов медиа, лучше использовать относительные пути. Относительные пути более портативны, чем абсолютные, и указываются относительно URL-адреса файла m3u8. Абсолютные же пути увеличивают размер файла m3u8 (увеличивают количество символов), что приводит к увеличению его объёма и увеличению сетевого трафика.</p>
<p>Некоторые другие заметки<br>
Существует два способа запросить плейлист m3u8: один — запросить его через URI m3u8, при этом файл должен заканчиваться на .m3u8 или .m3u;<br>
Второй — сделать запрос через HTTP, тогда заголовок запроса<a href="https://uzbox.com/ru/%d1%8f%d1%80%d0%bb%d1%8b%d0%ba/%d1%81%d0%be%d0%b4%d0%b5%d1%80%d0%b6%d0%b0%d0%bd%d0%b8%d0%b5" class="st_tag internal_tag" rel="tag" title="содержание">Содержание</a>-Тип должен быть установлен на application/vnd.apple.mpegurl или audio/mpegurl.</p>
<p>Пустые строки и строки комментариев при анализе игнорируются.</p>
<p>Общая длительность потоковых ресурсов в списке воспроизведения мультимедиа представляет собой сумму длительностей каждого фрагмента ресурса.</p>
<p>Скорость передачи данных каждого фрагмента — это размер фрагмента, деленный на его соответствующую длительность (длительность, указанную EXTINF).</p>
<p>Один и тот же атрибут AttributeName может встречаться в списке атрибутов тега только один раз.</p>
<p>Длительность, заданная параметром EXT-X-TARGETDURATION, НЕЛЬЗЯ изменять. Обычно это значение равно 10 секундам.</p>
<p>Для фрагментов, где указано EXT-X-FRAMES-ONLY и первый сегмент мультимедиа (или первый сегмент, за которым следует EXT-X-DISCONTINUITY) не несет сразу блок инициализации мультимедиа, следует добавить тег EXT-X-MAP, чтобы указать, как получить блок инициализации мультимедиа.</p>
<p>Номер версии совместимости EXT-X-VERSION, необходимый для использования тега EXT-XI-FRAMES-ONLY внутри тега EXT-X-MAP, должен быть больше или равен 5; номер версии совместимости, необходимый для использования только EXT-X-MAP, должен быть больше или равен 6.</p>
<p>Блок инициализации носителя, объявленный тегом EXT-X-MAP, может быть зашифрован методом AES-128. В этом случае тег EXT-X-KEY, действующий на тег EXT-X-MAP, должен установить атрибут IV.</p>
<p>Тег EXT-X-DATERANGE с атрибутом END-ON-NEXT=YES должен содержать атрибут CLASS, но не может содержать атрибуты DURATION и END-DATE. Другие теги EXT-X-DATERANGE с тем же CLASS не могут указывать перекрывающиеся диапазоны дат.</p>
<p>Если для диапазона дат не указаны атрибуты DURATION, END_DATE и END-ON-NEXT=YES, его длительность неизвестна, даже если установлен атрибут PLANNED-DURATION.</p>
<p>Если список воспроизведения устанавливает тег EXT-X-DATERANGE, он также должен установить тег EXT-X-PROGRAM-DATE-TIME.</p>
<p>Если в списке воспроизведения заданы два тега EXT-X-DATERANGE с одинаковым значением атрибута ID, соответствующие значения в двух тегах EXT-X-DATERANGE для одного и того же имени атрибута должны быть согласованными.</p>
<p>Если EXT-X-DATERANGE задает оба атрибута DURATION и END-DATE, значение атрибута END-DATE должно быть равно значению атрибута START-DATE плюс значение атрибута DURATION.</p>
<p>Тег EXT-X-MEDIA-SEQUENCE ДОЛЖЕН располагаться перед первым сегментом в списке воспроизведения.</p>
<p>Тег EXT-X-DISCONTINUITY-DEQUENCE ДОЛЖЕН располагаться перед первым сегментом в списке воспроизведения.</p>
<p>Тег EXT-X-DISCONTINUITY-DEQUENCE ДОЛЖЕН располагаться перед любым тегом EXT-X-DISCONTINUITY.</p>
<p>Если тег EXT-X-PLAYLIST-TYPE не задан в файле m3u8, плейлист можно изменить в любое время. Например, можно обновить или удалить медиа-сегменты в плейлисте.</p>
<p>Каждый тег EXT-XI-FRAME-STREAM-INF должен содержать атрибуты BANDWIDTH и URI.</p>
<p>Каждый тег EXT-X-SESSION-DATA должен содержать либо атрибут VALUE, либо атрибут URI, но не оба одновременно.</p>
<p>Список воспроизведения может содержать несколько тегов EXT-X-SESSION-DATA с одинаковым атрибутом DATA-ID, но не может содержать несколько тегов EXT-X-SESSION-DATA с одинаковым DATA-ID и одинаковым атрибутом LANGUAGE.</p>
<p>Если установлен EXT-X-SESSION-KEY, то его значения атрибутов METHOD, KEYFORMAT и KEYFORMATVERSIONS ДОЛЖНЫ быть идентичны значениям любого тега EXT-X-KEY, связанного с тем же URI.</p>
<p>Если несколько альтернативных потоков или многоязычных потоков используют один и тот же ключ шифрования и формат, следует установить тег EXT-X-SESSION-KEY.</p>
<p>Главный плейлист НЕ ДОЛЖЕН устанавливать несколько тегов EXT-X-SESSION-KEY с одинаковыми значениями атрибутов METHOD, URI, IV, KEYFORMAT и KEYFORMATVERSIONS.</p>
<h3 class="typography-headline"><span id="HTTP"><a href="https://developer.apple.com/streaming/"><span>Понять, что такое HTTP-трансляция в реальном времени</span></a></span></h3><div class="kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom" data-payload="{"align":"center","id":"9800","slug":"default","valign":"bottom","ignore":"","reference":"auto","class":"","count":"0","legendonly":"","readonly":"","score":"0","starsonly":"","best":"5","gap":"5","greet":"评分","legend":"0\5 - (0 голосов)","size":"24","title":"m3u8 格式是什么文件?","width":"0","_legend":"{score}\{best} ({count} {votes})","font_factor":"1.25"}">
<div class="kksr-stars">
<div class="kksr-stars-inactive">
<div class="kksr-star" data-star="1" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="2" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="3" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="4" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="5" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
</div>
<div class="kksr-stars-active" style="width: 0px;">
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
</div>
</div><div class="kksr-legend" style="font-size: 19.2px;">
<span class="kksr-muted">счет</span>
</div>
</div>