Timeshift

Статус документа

Оглавление

Описание

Технология Timeshift позволяет просматривать вещание со сдвигом от эфирного, а также получить величину сдвига для начала передачи.

Расположение API

О наличии данной возможности сервер сообщает в 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—вещания:

Рекомендации по формированию базового адреса:

Настройка заголовков CORS

Для поддержки технологии «Timeshift» на клиентах, реализующих «CORS», необходимо установить HTTP заголовок Access-Control-Expose-Headers со значениями:

Пример задания HTTP заголовка:

Access-Control-Expose-Headers: Inetra-Timeshift,Date

Если значений несколько, то в качестве разделителя может использоваться символ запятая (,).

Особенности реализации проигрывателей

Проигрыватели по–разному воспроизводят онлайн–вещание в формате HLS. Стандарт [HTTP Live Streaming][hls-draft-url] рекомендует выбирать сегмент для воспроизведения, который отстоит от конца индексного файла на 3 максимальных длительности сегмента (директива EXT-X-TARGETDURATION), однако некоторые проигрыватели игнорирует данное предписание и начинают воспроизводить первый медиа–сегмент из списка. Рекомендуется использовать фиксированное значение максимальной длительности сегмента (EXT-X-TARGETDURATION), а длительность сегментов ограничивать при сегментации потока.

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

Частная рекомендация по формированию индексного файла:

Пример:

#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

Изменения по версиям

Изменения в версии 1.0.0