Плейлист и 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. Что записано, определяет архив стрима: за его пределами воспроизведения не будет.
- Файл не обновляется сам. Появился новый канал в подписке — абонент перекачивает плейлист.
Сценарий: выдать абоненту ссылку на плейлист¶
- Откройте карточку подписчика и скопируйте поле Токен плейбека.
- Соберите адрес:
https://<адрес установки>/playback/tv/playlist.m3u8?token=<токен>. - Проверьте его в браузере: должен скачаться текстовый файл, начинающийся с
#EXTM3U. - Той же парой соберите адрес XMLTV и передайте абоненту обе ссылки — плееру нужны обе.
Если файл пришёл пустым (только #EXTM3U), у подписчика нет ни одного канала с назначенным стримом: смотрите блок Доступные каналы в его карточке.
Что дальше¶
- Витрина — то же самое в приложении зрителя.
- Программа передач — откуда берётся расписание в XMLTV.
- Подписчики — токен плейбека и доступные каналы.