Данный документ описывает правила расширения формата M3U для внесения дополнительной информации (директив), способной улучшить взаимодействие пользователя с приложением, при описании списка каналов (плейлиста).
Документ предназначен для разработчиков приложений и поставщиков услуг IPTV–вещания, записей телепередач.
Расширение форматов не затрагивает совместимость с большинством известных проигрывателей, таких как VLC, и соответствует существующим стандартам.
При формировании списка каналов должна использоваться кодировка UTF–8.
Детальное описание принципов формирования списка доступных каналов отражено в разделе “Список каналов”.
Формат M3U разработан для использования кодировки текста Latin–1, позже был раcширен для использования кодировки текста UTF–8 (в данном случае формат называют M3U8).
Плейлист является текстовым файлом, который содержит набор строк. Каждая строка должна завершаться символом переноса строки (\n
) или символами возврата каретки и переноса строки (\r\n
). Каждая строка строка может содержать адрес медиа–ресурса, пустую строку или директиву, начинающуюся с символа решетка (#
).
Пустые строки и неизвестные директивы должны быть интерпретированы как комментарий и проигнорированы клиентом.
Расширение формата осуществляется на основании возможности определения новых директив.
Медиа–тип: audio/x-mpegurl
При использовании протокола HTTP медиа–тип передается сервером в заголовке Content-Type
.
Замечание: для формата m3u
существует несколько общеупотребительных значений медиа–типа, выше указан рекомендуемый и наиболее популярный из всех вариантов.
Версионирование расширений осуществляется путем добавления специальной директивы. Если версия не указана явно, то подразумевается первая версия.
Версия указывает на минимально поддерживаемую версию расширения. Клиенты могут распознавать директивы старшей, чем указано, версии, если отсутствует явное требование к минимальной версии расширения для данных директив.
Таким образом, возможно сформировать список каналов, совместимый с первой и второй версией расширения одновременно.
Клиент должен поддерживать все версии — от первой до поддерживаемой. Если клиент не поддерживает требуемую версию, то разбор формата должен быть завершен с ошибкой — “Версия расширения не поддерживается”.
Для указания дополнительной информации допускается:
INETRA
.Каждая директива может включать набор обязательных и дополнительных атрибутов, дополнительные атрибуты записываются последовательно с разделением пробельными символами. Каждый атрибут предоставляет собой пару ключ–значение, разделенных символом равенства (=
).
Директива может применяться ко всем элементами плейлиста или только к следующему адресу медиа–ресурса. Директива может быть заменена последующей директивой, если названия директив совпадают.
Стандартные директивы:
Новые директивы:
Ниже приведены соглашения по типам данных дополнительных атрибутов:
тип данных | примечания |
---|---|
число |
значение из множества целых чисел |
дробное |
дробная часть отделяется точкой |
строка |
символьное представление строки |
булев |
принимает два значения true или false |
Интерпретация значений атрибутов должна осуществляться без учета регистра.
Экранирование строкового представления атрибутов:
"
);"
) должны быть экранированы при помощи символа косая черта (\
).Директива определяет содержимое как плейлист в формате M3U, должна быть первой значимой строкой в плейлисте. Может содержать дополнительные атрибуты.
Формат директивы:
#EXTM3U [<attributes-list>]
Директива описывает длительность и название элемента. Может содержать дополнительные атрибуты.
Формат директивы:
#EXTINF:<duration> [<attributes-list>], <title>
где:
название | тип | смысл |
---|---|---|
duration |
число |
длительность элемента, в случае live–вещания указывается -1 |
title |
строка |
название элемента |
Дополнительные атрибуты:
название | тип | по умолчанию | смысл |
---|---|---|---|
group-title |
строка |
отсутствует | Название группы, в которую входит канал. Может быть указано только у первого в группе |
Замечание:
Директива задает версию расширения. Появилась в версии 2.
Формат директивы:
#EXT-INETRA-VERSION:<version>
где:
version
— версия расширения.Директива описывает информацию о канале. Появилась в версии 2.
Формат директивы:
#EXT-INETRA-CHANNEL-INF:<attributes-list>
Дополнительные параметры:
название | тип | по умолчанию | смысл |
---|---|---|---|
channel-id |
число |
отсутствует | Идентификатор канала (доступен в Media Guide API) |
territory-id |
число |
отсутствует | Идентификатор территории (доступен в Registry API) |
recordable |
булев |
false |
Наличие архива записей телепередач для данного канала |
age-restriction |
число |
отсутствует | Возрастное ограничение для канала |
Идентификатор территории territory-id
описывает регион, для которого осуществляется вещание:
Возрастное ограничение задает минимально разрешенный возраст для просмотра канала.
Директива описывает свойства медиа–потока. Появилась в версии 2.
Формат директивы:
#EXT-INETRA-STREAM-INF:<attributes-list>
Дополнительные атрибуты:
название | тип | по умолчанию | смысл |
---|---|---|---|
resolution |
строка |
отсутствует | Идентифицирует разрешение источника |
aspect-ratio |
строка |
отсутствует | Соотношение сторон кадра |
crop |
строка |
отсутствует | Кадрирование изображения |
has-timeshift |
булев |
false |
Признак наличия поддержки технологии Timeshift |
access |
строка |
allowed |
Наличие доступа к источнику вещания канала |
pending-till |
число |
отсутствует | Время планируемого появления доступа к вещанию канала у абонента |
allowed-till |
число |
отсутствует | Время планируемого отключения доступа к вещанию канала у абонента |
audio-language |
строка |
отсутствует | Языки аудио дорожек |
subtitles-language |
строка |
отсутствует | Языки субтитров |
priority |
число |
0 | Приоритет для ранжирования источников |
ad-targeting |
булев |
false |
Признак наличия in-stream рекламы, для которой доступны таргетинги |
id |
число |
отсутствует | Уникальный числовой идентификатор источника вещания из пространства идентификаторов провайдера |
Параметр resolution
должен быть задан в формате ширина
x высота
, например, 720x576
:
0x0
обозначает отсутствие видео–дорожки в потоке;Принципы использования параметров access
, allowed-till
и pending-till
описаны в разделе Взаимодействие с автоматизированной системой расчетов оператора связи.
Атрибуты aspect-ratio
и crop
указываются в формате ширина
: высота
, например: 1:1
, 100:75
. Кадрирование изображения производится после изменения соотношения сторон (если оно есть). Порядок их использования описан в разделе Кадрирование и изменение пропорций изображений каналов стандартной четкости.
Признак наличия поддержки технологии Timeshift has-timeshift
носит вспомогательный характер и не гарантирует поддержку сервером вещания.
Атрибуты audio-language
и subtitles-language
указывает один или несколько естественных языков содержимого, для носителей которых оно предназначается. Языки перечисляются через запятую, порядок значения не имеет (подробности см. в RFC3282). Если данный атрибут опущен, то предполагается, что содержимое предназначено для людей, понимающих любой язык (или же язык вообще значения не имеет). При этом возможно, что человек не отыщет там информацию на понятном ему языке.
Версия 2:
#EXTM3U
#EXT-INETRA-VERSION:2
#EXT-INETRA-CHANNEL-INF: channel-id=10338245 recordable=true
#EXT-INETRA-STREAM-INF: resolution=720x576 aspect-ratio=4:3 crop=100:75 access=pending pending-till=1399367372 allowed-till=1401959372 has-timeshift=true
#EXTINF:-1, Первый канал
udp://@239.1.15.1:1234
#EXT-INETRA-CHANNEL-INF: channel-id=10338245 recordable=true territory-id=16
#EXTINF:-1, Первый канал
http://hls.cn.ru/streaming/1kanal/tvrec/playlist.m3u8
#EXT-INETRA-CHANNEL-INF: channel-id=10338258
#EXTINF:-1, Россия 1
udp://@239.1.15.2:1234
Версия 1:
#EXTM3U
#EXTINF:-1 group-title="Эфир", Первый канал
udp://@239.1.15.1:1234
#EXTINF:-1, Россия 1
udp://@239.1.15.2:1234
pending-till
и allowed-till
(TVREC–270).access
.access
, allowed-till
и pending-till
вынесены в общий документ.has-timeshift
;cn-id
, cn-records
из директивы EXTINF
устарели со второй версии расширения.audio-language
и subtitles-language
для директивы EXT-INETRA-STREAM-INF
.m3u
.cn-id
, cn-records
для директивы EXTINFpriority
для источника вещания.ad-targeting
для директивы EXT-INETRA-STREAM-INF
.id
для директивы EXT-INETRA-STREAM-INF
.