Skip to content

Сдвиг времени (time-zone compensation)

Эта страница отвечает на частую задачу локального провайдера (edge/headend), когда ТВ-каналы приходят от апстрим-провайдера, а абоненты находятся в другом часовом поясе.

Пример задачи клиента:

  • принять каналы один раз у провайдера;
  • раздавать локально (1-to-many), экономя WAN bandwidth;
  • для выбранных “премиум” каналов сделать фиксированный сдвиг, например (6h), и дать catchup.

Catena SE решает эту задачу через архив (DVR/nPVR): сначала записываем канал, затем читаем архив со сдвигом.

Важное про время

  • Все времена в API/ссылках рассматривайте в UTC epoch (секунды).
  • Сдвиг (6h) — это 21600 секунд.

Требования

  • Канал должен писаться в архив.
  • Глубина архива должна быть больше, чем желаемый сдвиг. Для (6h) практично держать запас (например, 8–24 часа), чтобы переживать “дыры” и инциденты источника.

Способ 1 (рекомендуемый для популярных каналов): отложенный канал

Это лучший вариант для задачи “1-to-many”: архив читается один раз, независимо от количества зрителей.

Идея:

  • есть исходный канал channel, который пишется в архив;
  • создаётся второй канал, который читает архив с постоянным сдвигом.

Пример концепции:

  • исходный канал пишет архив;
  • отложенный канал читает его с задержкой 21600 секунд (6 часов).

Такой “отложенный” канал дальше раздаётся как обычный live-канал и попадает в общий балансировщик /lb/.

Если вы делаете “отложенный канал” как отдельный объект в Catena SE, то (по аналогии с Flussonic Media Server) его источник можно задать как чтение архива исходного канала с фиксированным сдвигом, например:

timeshift://channel/21600

Пример настройки в интерфейсе (исходный канал recorded, сдвиг на 1 час — 3600 секунд):

  1. В разделе Каналы уже есть канал с архивом (например, recorded). Создайте новый канал для отложенного просмотра.

Список каналов

  1. Откроется страница нового канала. Перейдите во вкладку Источники.

Страница созданного канала

  1. Добавьте источник timeshift://recorded/3600 (или timeshift://recorded/21600 для сдвига 6 часов) и сохраните.

Источник timeshift настроен

  1. На вкладке Основное встроенный плеер показывает поток со сдвигом.

Плеер отложенного канала

Как это сочетается с catchup (EPG)

Time-zone compensation и catchup решают разные задачи и обычно используются вместе:

  • time-zone compensation: “смотреть эфир как будто он идёт в моём времени” (постоянный сдвиг, например 6 часов);
  • catchup: “посмотреть конкретную передачу по EPG” (архив по from/duration).

Рекомендация для middleware:

  • если вы показываете абоненту “отложенный канал” как отдельный live-канал, то и EPG на UI обычно нужно отображать со сдвигом (на стороне middleware);
  • для catchup URL по EPG используйте те же правила, что в nPVR и playback (UTC epoch, archive-<from>-<duration>).

Практическая привязка к фиксированному сдвигу:

  • если вы показываете EPG для “отложенного канала” со сдвигом (+21600), то при формировании catchup-ссылки на архив исходного канала используйте from = from_displayed - 21600;
  • пример: пользователь выбрал передачу, которая в “сдвинутом” EPG начинается в from_displayed. Для проигрывания по HLS сформируйте ссылку:
https://<hostname>/lb/-/<name>/archive-<from_displayed-21600>-<duration>.m3u8

Практические замечания для edge/headend

  • Для таких “отложенных каналов” нагрузка возрастает несущественно и вещание происходит в основном из оперативной памяти, клиенты не обращаются к диску.
  • Планируйте место на диске от битрейта: (channels \times bitrate \times hours).