Сдвиг времени (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 секунд):
- В разделе Каналы уже есть канал с архивом (например,
recorded). Создайте новый канал для отложенного просмотра.

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

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

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

Как это сочетается с 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).