Технология Timeshift позволяет просматривать вещание со сдвигом от эфирного, а также получить величину сдвига для начала передачи.
О наличии данной возможности сервер сообщает в HTTP заголовке Inetra-Timeshift
при обращении к источнику вещания. Заголовок содержит набор атрибутов, разделенных символом точка с запятой (;
), строковые значений оборачиваются символом кавычки ("
).
Атрибуты заголовка:
название | тип | по умолчанию | смысл |
---|---|---|---|
base-uri |
строка |
отсутствует | базовый адрес доступа к технологии Timeshift |
api-version |
число |
1 |
версия программного интерфейса, применима к base-uri |
duration |
число |
0 |
максимальный сдвиг по времени в секундах от эфирного вещания канала. Текущее время вещания может быть получено из HTTP заголовка Date |
Пример заголовка:
Inetra-Timeshift: base-uri="http://peers.tv/timeshift/1kanal/playlist.m3u8";duration=86400;api-version=1
В случае [Http Live Streaming][hls-draft-url] базовый адрес должен указывать на индексный файл (ресурс с расширением m3u8).
Для обращения к технологии Timeshift клиент должен сформировать адрес вещания на основе базового адреса (base-uri
) и дополнительным параметров:
название | тип | смысл |
---|---|---|
offset |
натуральное |
смещение относительно эфирного вещания |
start_time |
натуральное |
абсолютное время начала вещания в формате Unix time |
start_over |
true ,false |
признак перехода на начало передачи, значение по умолчанию — false |
При обращении клиентом к вещанию со сдвигом от эфирного сервер должен передать величину относительного смещения при помощи HTTP заголовка Inetra-Timeshift-Offset
в формате:
Inetra-Timeshift-Offset: <seconds>
где <seconds> — величина смещения в секундах относительно эфирного вещания. Величина смещения принимает только натуральные значения.
При выполнении запросов с использованием параметров start_time
, start_over
клиент должен обработать перенаправление (HTTP код ответа 302) на постоянную ссылку с относительным смещением от эфирного вещания и передать проигрывателю результирующую ссылку. Клиенты, которые не могут обрабатывать перенаправления, должны получить значение относительного смещения из HTTP заголовка Inetra-Timeshift-Offset
, а затем сформировать адрес вещания при помощи параметра offset
, используя базовый адрес технологии Timeshift.
При указании параметра start_over
со значением true
сервер выполнит перенаправление на адрес вещания с относительным смещением от эфирного, который будет указывать на фактическое начало текущей передачи. Если в дополнение к параметру start_over
будет указан параметр start_time
или параметр offset
, то адрес вещания будет указывать на фактическое начало передачи, включающей указанное в start_time
абсолютное время или указанное в offset
смещение от эфирного вещания. Рекомендуется использовать параметр start_over
для реализации функции «Начать с начала».
Адрес вещания, сформированный только при помощи параметра offset
, может быть передан непосредственно на воспроизведение проигрывателем.
Параметры start_time
и offset
являются взаимоисключающими.
ВАЖНО: Клиент должен учитывать случай, когда базовый адрес уже содержит с составе запроса GET параметры (см. раздел 3 из RFC 3986). Параметры разделяются при помощи символа амперсанд (&
).
В случае если обработать запрос невозможно (например, нет записанных сегментов), то должна быть возвращена ошибка с кодом ответа 404.
В случае HLS—вещания:
offset
сервер вернет индексный файл, соответствующий эфирному вещанию;start_time
близкой к текущему времени, сервер может проигнорировать переданное значение и вернет индексный файл, соответствующий эфирному вещанию;start_time
сегмент, содержащий указанное время, должен отставать от конца индексного файла не более чем на 3 значения максимальной длительности сегмента (директива EXT-X-TARGETDURATION
).Рекомендации по формированию базового адреса:
Для поддержки технологии «Timeshift» на клиентах, реализующих «CORS», необходимо установить HTTP заголовок Access-Control-Expose-Headers
со значениями:
Inetra-Timeshift-Offset
, Date
— на серверах, обеспечивающих работу технологии Timeshift;Inetra-Timeshift
, Date
— на серверах, обеспечивающих эфирное вещание каналов.Пример задания HTTP заголовка:
Access-Control-Expose-Headers: Inetra-Timeshift,Date
Если значений несколько, то в качестве разделителя может использоваться символ запятая (,
).
Проигрыватели по–разному воспроизводят онлайн–вещание в формате HLS. Стандарт [HTTP Live Streaming][hls-draft-url] рекомендует выбирать сегмент для воспроизведения, который отстоит от конца индексного файла на 3 максимальных длительности сегмента (директива EXT-X-TARGETDURATION
), однако некоторые проигрыватели игнорирует данное предписание и начинают воспроизводить первый медиа–сегмент из списка. Рекомендуется использовать фиксированное значение максимальной длительности сегмента (EXT-X-TARGETDURATION
), а длительность сегментов ограничивать при сегментации потока.
В связи с этим становится сложным предугадать с какого момента времени проигрыватель начнет воспроизведение, поэтому ниже предлагается частная рекомендация по формированию индексного файла.
Частная рекомендация по формированию индексного файла:
EXT-X-TARGETDURATION
);EXT-X-PROGRAM-DATE-TIME
).Пример:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:005117
#EXT-X-PROGRAM-DATE-TIME:2014-05-18T13:06:20Z
#EXTINF:9.83, no desc
segment-1400367207-005117.ts
#EXTINF:10.23, no desc
segment-1400367207-005118.ts
#EXTINF:10.01, no desc
segment-1400367207-005119.ts
#EXTINF:9.95, no desc
segment-1400367207-005120.ts