Skip to content

Плейлист и XMLTV

Не всякий абонент смотрит в витрине: кто-то предпочитает свой плеер на компьютере, приставке или телефоне. Для этого Catena отдаёт то же самое двумя файлами — список каналов в M3U и программу передач в XMLTV.

Оба файла содержат ровно те каналы, которые доступны этому подписчику по формуле доступа. Канал, у которого не назначен стрим, в выгрузку не попадает: играть в нём нечего.

Адреса

Что Адрес
Список каналов /playback/tv/playlist.m3u8?token=<токен>
Программа передач /playback/tv/xmltv.xml?token=<токен>

Адреса относительны корню установки: если витрина открывается как https://tv.example.com/tv/, то плейлист лежит по https://tv.example.com/playback/tv/playlist.m3u8.

Токеном годится любой из двух:

  • токен плейбека подписчика — тот, что виден оператору в карточке подписчика, поле Токен плейбека;
  • токен устройства, полученный при входе в витрину.

Разница только в отзыве: отозвав устройство, оператор гасит и его ссылку, а токен плейбека живёт с самим подписчиком.

Что внутри плейлиста

Строка канала выглядит так:

#EXTINF:-1 tvg-id="ch_992YXaVtjYS" tvg-chno="1",News 24
/playback/tv/channels/ch_992YXaVtjYS/play?token=<токен>
  • tvg-id — идентификатор канала в Catena. Он же стоит идентификатором канала в XMLTV, так что плеер сам сводит расписание с каналом.
  • tvg-chno — номер канала: по нему плеер строит привычный абоненту порядок.

Адрес записан относительно корня сервера, и плеер достраивает его от адреса, по которому скачал плейлист.

Сам адрес — ссылка на выдачу, а не готовый адрес потока. Открыв её, плеер получает переадресацию на воспроизведение со свежим допуском. Сделано это ради срока жизни: скачанный файл живёт у абонента неделями, а допуск к просмотру — часы, и плейлист с зашитым допуском перестал бы играть в первый же вечер.

Отсюда следствие: плеер должен уметь ходить по переадресации. Все распространённые умеют.

Что внутри XMLTV

Файл содержит объявления каналов и их передачи. Окно по умолчанию — сутки назад и шесть вперёд: прошедшие сутки нужны догону, который плеер строит по этому же файлу, а шесть суток — предел выдачи сетки.

Окно можно задать явно параметрами from и to — моментами в формате RFC 3339, например ?from=2026-08-20T00:00:00Z&to=2026-08-22T00:00:00Z.

Время передач всегда приводится к UTC и записывается в форме XMLTV YYYYMMDDHHMMSS +0000. Передача, у которой границы не разбираются, пропускается: плеер с одной битой датой рисует пустой сеткой весь файл, а не одну строку.

Расписание берётся из программы передач. Если сетка пуста, XMLTV приедет с объявлениями каналов, но без передач — и чинится это на стороне источника, а не выгрузки.

Ограничения

  • Потолок экранов действует и здесь. Просмотр из стороннего плеера занимает экран так же, как просмотр в витрине; уперевшись в потолок, плеер получит отказ (Сколько экранов одновременно).
  • Догон плеер строит сам, по границам передачи из XMLTV. Что записано, определяет архив стрима: за его пределами воспроизведения не будет.
  • Файл не обновляется сам. Появился новый канал в подписке — абонент перекачивает плейлист.

Сценарий: выдать абоненту ссылку на плейлист

  1. Откройте карточку подписчика и скопируйте поле Токен плейбека.
  2. Соберите адрес: https://<адрес установки>/playback/tv/playlist.m3u8?token=<токен>.
  3. Проверьте его в браузере: должен скачаться текстовый файл, начинающийся с #EXTM3U.
  4. Той же парой соберите адрес XMLTV и передайте абоненту обе ссылки — плееру нужны обе.

Если файл пришёл пустым (только #EXTM3U), у подписчика нет ни одного канала с назначенным стримом: смотрите блок Доступные каналы в его карточке.

Что дальше