Local TV Guide: настройка локальной программы передач 2026
Если у тебя настроен CCcam или OScam, каналы идут, картинка есть — но в меню ресивера пусто там, где должно быть расписание, ты не один. Настройка local tv guide для шифрованных каналов — отдельная история, которую большинство гайдов объясняют криво или не объясняют вовсе. Разберём с нуля: откуда берётся EPG, почему он пропадает и как его починить.
Что такое локальный TV guide и как он работает в CCcam/OScam окружении
EPG (Electronic Program Guide) — это не отдельный сервис. Это данные, которые транслируются прямо внутри транспортного потока вместе с видео и аудио. Стандарт DVB описывает их как SI/PSI таблицы, конкретно — EIT (Event Information Table), которая передаётся на фиксированном PID 0x12.
Ресивер постоянно парсит этот поток, вытаскивает EIT и складывает в локальный кэш. На Enigma2 это файл /etc/enigma2/epg.dat, на старых OpenBox/Opensat — /var/tuxbox/config/epgcache. Пока тюнер принимает сигнал — кэш живёт и пополняется. Стоит переключить канал или перегрузить ресивер — всё, что не сохранено, теряется.
Разница между встроенным DVB EPG и внешним XMLTV
DVB EPG идёт прямо из спутникового сигнала. Ресивер его читает автоматически, никаких дополнительных настроек не нужно — если поток нормальный. XMLTV — это внешний XML-файл с расписанием, который скачивается отдельно и импортируется плагином типа EPGImport.
Когда DVB EPG работает нормально — это идеальный вариант. Но провайдеры часто передают только now/next (текущая и следующая программа), а полная неделя отсутствует. Вот тут и нужен XMLTV.
Откуда ресивер получает данные о программе
Два пути: из эфира (EIT scan) и из внешнего источника (XMLTV через HTTP или локальный файл). В Enigma2 оба варианта могут работать параллельно, и это иногда создаёт проблемы — двойные записи в расписании для одного канала.
Почему через card sharing EPG часто пустой
Вот момент, который путают 90% пользователей. Card sharing расшифровывает только видео и аудио потоки. EIT таблицы на PID 0x12 передаются в открытом виде — они не шифруются провайдером в подавляющем большинстве случаев. Значит, card sharing вообще не влияет на EPG.
Если EPG пустой — проблема в другом: EPG scan отключён в настройках bouquet, ресивер не успел накопить кэш, или EIT просто не доходит до тюнера из-за слабого сигнала. Не ищи причину в CCcam.cfg.
Роль now/next и 7-day EPG таблиц
EIT делится на два типа. Present/Following (table_id 0x4E) — это now/next, только текущая и следующая программа. Schedule tables (0x50–0x5F для текущего транспондера, 0x60–0x6F для других) — полная программа на 8 дней вперёд. Не все провайдеры передают schedule. Многие региональные каналы ограничиваются now/next, поэтому без XMLTV полной программы не будет.
Источники данных для локального TV guide
Хороший local tv guide строится на надёжном источнике данных. Есть несколько вариантов, у каждого свои плюсы.
Сбор EPG напрямую с транспондера (EIT scan)
Самый простой способ — просто включить сканирование EIT в настройках ресивера. В Enigma2 это Settings → Service Searching → EPG. Можно настроить background scan, который собирает данные со всех транспондеров в буклете. Минус: занимает время (30–60 минут на полное сканирование) и работает только пока ресивер включён.
XMLTV grabbers и формат файла
XMLTV — это просто XML. Минимальная структура выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="custom-grabber">
<channel id="channel.one">
<display-name lang="ru">Первый канал</display-name>
</channel>
<programme start="20260516180000 +0300" stop="20260516190000 +0300" channel="channel.one">
<title lang="ru">Вечерние новости</title>
<desc lang="ru">Выпуск новостей в 18:00</desc>
</programme>
</tv>
Атрибуты start и stop должны быть в формате YYYYMMDDHHmmss с UTC-смещением. Это важно — неправильный timezone здесь даёт сдвиг программы на час или больше.
При выборе XMLTV-источника проверяй: покрывает ли он твой регион, как часто обновляется (хорошая частота — каждые 12–24 часа), есть ли описания программ или только названия. Источник без описаний — это не EPG, это просто список названий.
OpenTV и MHW2 EPG для спутниковых каналов
Некоторые спутниковые платформы используют проприетарные форматы EPG вместо стандартного DVB EIT. OpenTV (используется на некоторых европейских платформах) и MediaHighway2 (MHW2) — два таких формата. Enigma2 умеет читать оба, но нужно убедиться что в настройках EPG включён соответствующий парсер. В OpenPLi это есть по умолчанию, в некоторых сборках OpenATV нужно ставить дополнительный плагин.
Скрипты конвертации сетки в XMLTV
Если у тебя есть источник расписания в другом формате (JSON API, HTML страница, CSV), можно написать простой Python-скрипт конвертации. Минимальный шаблон:
from xml.etree.ElementTree import Element, SubElement, tostring
from datetime import datetime
tv = Element('tv')
ch = SubElement(tv, 'channel', id='my.channel')
SubElement(ch, 'display-name').text = 'Мой канал'
prog = SubElement(tv, 'programme',
start='20260516180000 +0300',
stop='20260516190000 +0300',
channel='my.channel')
SubElement(prog, 'title').text = 'Программа'
Запускаешь по крону каждые 12 часов, кладёшь результат в /hdd/xmltv.xml — готово.
Настройка EPG в Enigma2 ресиверах с CCcam/OScam
Enigma2 — самая распространённая платформа для спутниковых ресиверов с поддержкой card sharing. EPGImport — стандартный плагин для внешних XMLTV источников.
Установка плагина EPGImport через feed
В Enigma2 (OpenPLi, OpenATV, OpenVix): Menu → Blue Panel → Plugins → Plugin Browser → EPGImport. Если не находит — нужно обновить список плагинов или добавить feed своей прошивки. После установки плагин появится в Extensions.
Конфигурация источников в /etc/epgimport/
EPGImport читает конфигурацию из /etc/epgimport/. Структура:
*.sources.xml— описание источников (URL XMLTV файлов)*.channels.xml— маппинг XMLTV channel id на service reference Enigma2
Пример sources.xml:
<sources>
<source type="gen_xmltv" nocheck="1">
<description>Локальный EPG</description>
<url>http://192.168.1.100/xmltv.xml</url>
<channels>/etc/epgimport/local.channels.xml</channels>
</source>
</sources>
Если XMLTV лежит прямо на ресивере: file:///hdd/xmltv.xml.
Привязка XMLTV каналов к bouquets через channel_id_list
Это самое важное. В channels.xml каждый XMLTV channel id нужно привязать к service reference Enigma2:
<channels>
<channel id="channel.one">1:0:1:1234:5678:0028:E0000000:0:0:0:</channel>
</channels>
Формат service reference: 1:0:TYPE:SID:TSID:ONID:NAMESPACE:0:0:0:. TYPE: 1 = TV, 2 = Radio. SID, TSID, ONID — смотришь в /etc/enigma2/lamedb или через Menu → Information → Service Info на нужном канале.
Можно автоматизировать поиск через grep:
grep -i "первый канал" /etc/enigma2/lamedb
Расписание автоматического импорта через cron
На большинстве ресиверов Enigma2 cron доступен. Добавить в /etc/cron/cron.daily или через crontab:
0 4 * * * python /usr/lib/enigma2/python/Plugins/Extensions/EPGImport/EPGImport.py --import
Или проще — настроить автозапуск прямо в плагине: EPGImport → Setup → Auto update time → 04:00.
Очистка кэша epg.dat при сбоях
Если EPG показывает мусор или устаревшие данные:
init 4
rm /etc/enigma2/epg.dat
rm /hdd/epg.dat 2>/dev/null
init 3
После перезапуска Enigma2 начнёт собирать EIT заново. Запусти импорт EPGImport вручную сразу после — иначе ждать придётся до следующего автообновления.
Привязка локального TV guide к каналам через CCcam/OScam потоки
Повторю ещё раз, потому что это действительно важно: EIT таблицы на PID 0x12 не шифруются. Твой local tv guide не зависит от того, работает card sharing или нет. OScam в режиме dvbapi занимается только дешифровкой ECM/EMM — пакеты EIT проходят мимо него.
Получение service reference для зашифрованных каналов
Для зашифрованных каналов service reference такой же, как для открытых. SID берёшь из /etc/enigma2/lamedb. Строка канала в lamedb выглядит так:
1:0:1:1234:5678:0028:E0000000:0:0:0:
Название канала
SID = 0x1234, TSID = 0x5678, ONID = 0x0028, NAMESPACE = 0xE0000000.
Совпадение PID EIT и видимого расписания
Если хочешь убедиться что EIT доходит — используй tcpdump на интерфейсе ресивера или смотри через wireshark на dvbapi порту OScam (по умолчанию 988):
tcpdump -i eth0 -nn port 988 -c 100
Но лучше проще: посмотри в плагине Service Information (доступен в большинстве прошивок Enigma2) — там будет показан PIDs текущего канала, включая EIT PID.
Что делать когда CAID меняется и EPG ломается
Смена CAID на канале на EPG не влияет. EPG ломается когда провайдер меняет SID или TSID канала (transponder reshuffling). В этом случае service reference в channels.xml становится неверным — нужно обновить его вручную. Ресивер при этом обычно сам находит канал (через bouquet update), но маппинг в EPGImport остаётся старым.
Решение: после обнаружения что EPG пропал для конкретного канала — проверь его service reference через Service Info, сравни с тем что в channels.xml, обнови если отличается.
Использование SoftCam с OScam для приёма EIT данных
В /etc/oscam/oscam.conf, секция [dvbapi], параметр pmt_mode влияет на то, как OScam взаимодействует с тюнером. При некоторых значениях (pmt_mode = 4 или 6) OScam может блокировать EIT фильтры. Если EPG пропал после установки OScam — попробуй:
[dvbapi]
enabled = 1
boxtype = dreambox
user = your_user
pmt_mode = 0
Также проверь файл /etc/oscam/oscam.dvbapi — если там есть строки с P: 0012 (фильтр на PID 0x12 EIT) — удали их.
Альтернативные методы для IPTV каналов и гибридных setup
Если часть каналов идёт через DVB-S, а часть через IPTV — это гибридный setup. EPG нужно настраивать для обоих источников отдельно.
M3U playlist с tvg-id и tvg-url атрибутами
В M3U плейлисте для IPTV каналов EPG привязывается через атрибуты в строке #EXTINF:
#EXTM3U url-tvg="http://192.168.1.100/xmltv.xml" x-tvg-url="http://192.168.1.100/xmltv.xml"
#EXTINF:-1 tvg-id="channel.one" tvg-name="Первый канал" tvg-logo="http://logo.url/ch1.png",Первый канал
udp://@239.1.1.1:1234
Атрибут tvg-id должен совпадать с id в XMLTV файле — это точка склейки. Если они не совпадают, EPG не подтянется даже если файл правильный.
Связка XMLTV с IPTV bouquets
В Enigma2 IPTV каналы (тип IPTV) тоже имеют service reference, но с другим type. Для них EPGImport работает точно так же — нужно добавить их в channels.xml с их service reference. Посмотреть ref можно через Service Info на конкретном IPTV канале.
EPG для HTTP/HLS потоков через прокси
Если IPTV-провайдер не даёт XMLTV — попробуй найти его EPG через tvheadend. TVheadend умеет принимать IPTV потоки и одновременно собирать EPG из нескольких источников, а затем отдавать клиентам единый поток по HTSP протоколу.
Tvheadend как промежуточный EPG сервер
Tvheadend — это полноценный TV-сервер для Linux. Он работает параллельно с OScam и может:
- Принимать DVB-S сигнал напрямую (если ресивер отдаёт поток по сети)
- Импортировать XMLTV из любых источников
- Отдавать EPG клиентам по HTSP (порт 9982) или HTTP API (порт 9981)
- Экспортировать готовый XMLTV для других ресиверов
Конфиг XMLTV grabber в Tvheadend: Configuration → Channel/EPG → EPG Grabber Modules → External XMLTV. Указываешь путь к скрипту или файлу, частоту обновления. После настройки все ресиверы в сети берут EPG с одного источника.
Диагностика и устранение типичных проблем
Большинство проблем с EPG решается за 5 минут если знать где смотреть.
EPG пустой после импорта — проверка channel_id_list
Первое что смотришь — лог EPGImport:
tail -f /tmp/epgimport.log
Там будет видно сколько каналов из XMLTV совпало с channels.xml. Если "0 matched" — проблема в маппинге. Проверь что tvg-id в XMLTV совпадает с id в channels.xml посимвольно, без лишних пробелов.
Второе — проверить размер epg.dat:
ls -la /hdd/epg.dat
Файл должен расти. Если размер 0 или файла нет — Enigma2 не сохраняет кэш в нужное место.
Сдвиг времени на ±1 час — настройка timezone и DST
Сдвиг ровно на 1 час — почти всегда DST (летнее/зимнее время). Проверь:
cat /etc/timezone
cat /etc/TZ
date
Timezone должен соответствовать твоему региону. Для России: Europe/Moscow, для Украины: Europe/Kiev, и так далее. При этом start/stop в XMLTV файле должны быть с правильным UTC-смещением. Если источник XMLTV пишет время без смещения — это его баг, и придётся либо конвертировать на лету, либо искать другой источник.
Программа есть только для now/next, нет на 7 дней
Провайдер не передаёт schedule tables. Единственное решение — внешний XMLTV с полной программой. Встроенный EPG scan здесь не поможет — если данных нет в потоке, взять их неоткуда.
EPG исчезает после перезагрузки ресивера
Классика. По умолчанию /etc/enigma2/ на большинстве ресиверов — это либо flash-память, либо tmpfs, который очищается при перезагрузке. Решение:
Menu → Setup → System → EPG → EPG Cache Path → изменить на /hdd/epg.dat. После этого перезагрузка ресивера не потеряет накопленный кэш. Если /hdd не смонтирован или места нет — используй USB-носитель: /media/usb/epg.dat.
Особо актуально для ресиверов с маленьким flash 32–64 MB — epg.dat там просто не умещается. Файл может вырасти до 20–50 MB при большом количестве каналов и полной неделе программы.
Конфликт двух источников EPG для одного канала
Если ресивер одновременно получает EIT из транспортного потока и XMLTV через EPGImport — могут появиться дубликаты в расписании. В Enigma2 это лечится отключением встроенного EPG scan для конкретного bouquet: в настройках буклета выставить "Don't use EIT" или аналогичный параметр. Либо наоборот — отключить EPGImport для каналов где хорошо работает встроенный EIT.
Ещё один нетривиальный случай: каналы с timeshift версиями (+3/+6 часов). Это региональные копии канала с тем же контентом но сдвинутым расписанием. Для них нужен отдельный XMLTV с соответствующим смещением времени, или отдельная запись в channels.xml с правильным offset в атрибутах.
Также: на старых прошивках OpenPLi 4.x и OpenATV 6.x формат epg.dat несовместим с новыми версиями EPGImport 4.x. Если после обновления плагина EPG перестал работать — попробуй откатить EPGImport до версии, совместимой с твоей прошивкой. Смотри changelog плагина на GitHub проекта EPGImport.
Почему EPG не отображается для каналов которые я смотрю через CCcam/OScam?
EIT таблицы передаются на PID 0x12 в транспортном потоке и не шифруются — card sharing здесь вообще ни при чём. Если EPG пустой, проверь: включён ли EPG scan в настройках ресивера, не отключён ли он для конкретного bouquet, и нормальный ли уровень сигнала. Слабый сигнал (ниже 60% качества) даёт потери пакетов и EIT не накапливается. OScam влияет только на дешифровку видео/аудио, не на EPG.
Можно ли использовать XMLTV файл без интернета на ресивере?
Да. Скопируй XMLTV файл на USB-диск или HDD: /hdd/xmltv.xml. В EPGImport sources.xml укажи URL как file:///hdd/xmltv.xml вместо http://. Это отлично работает для домашней сети: один сервер (Raspberry Pi, NAS) генерирует XMLTV и раздаёт его по NFS или SMB, ресивер монтирует шару и читает файл локально.
Чем отличается now/next EPG от полной 7-дневной программы?
Now/next — это EIT present/following с table_id 0x4E, содержит только текущую и следующую программу. Полная программа хранится в schedule tables (0x50–0x5F для текущего транспондера, 0x60–0x6F для остальных). Не все провайдеры передают schedule — многие ограничиваются now/next для экономии полосы. Если у тебя есть only now/next в эфире, единственный способ получить расписание на неделю — внешний XMLTV источник.
Как привязать XMLTV channel id к каналу в Enigma2?
Создай файл /etc/epgimport/mylocal.channels.xml со строками вида: <channel id="xmltv_id">1:0:1:SID:TSID:ONID:NAMESPACE:0:0:0:</channel>. SID, TSID, ONID смотришь в /etc/enigma2/lamedb (значения в hex) или через плагин Service Information — нажать кнопку Info на нужном канале. NAMESPACE обычно 0xE0000000 для спутника или 0x00000000 для IPTV.
EPG показывает программу на час раньше или позже — как исправить?
Сдвиг ровно на час — это DST. Проверь cat /etc/timezone на ресивере — должен быть правильный регион, например Europe/Moscow. В XMLTV атрибут start должен включать UTC-смещение: 20260516180000 +0300. Если XMLTV пишет время без смещения или в другой зоне — программа будет смещена. При переходе на летнее/зимнее время сдвиг появляется если timezone прописан жёстко как UTC+3 вместо named timezone с поддержкой DST.
Можно ли использовать один XMLTV источник для нескольких ресиверов в локальной сети?
Именно так и надо делать. Поднимаешь nginx или lighttpd на любой машине в сети (роутер, NAS, Raspberry Pi), кладёшь туда XMLTV файл, обновляешь его по cron каждые 12–24 часа. Все ресиверы прописывают один HTTP URL в своём EPGImport. Файл скачивается один раз и раздаётся локально — экономия трафика, синхронизированный EPG на всех устройствах. Nginx конфиг минимальный: location / { root /var/www/epg; }
Почему после перезагрузки ресивера весь EPG пропадает?
По умолчанию epg.dat сохраняется в /etc/enigma2/, который на большинстве ресиверов находится в flash-памяти или tmpfs и очищается при перезагрузке. Зайди в Settings → EPG → EPG Cache Path и смени путь на /hdd/epg.dat — это уже постоянное хранилище. После следующей перезагрузки ресивер прочитает кэш и не будет ждать нового EIT scan. Для ресиверов с маленьким flash (32–64 MB) это вообще единственный рабочий вариант.
Практические советы для стабильного просмотра
Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.
При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.
Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.
- Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
- Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
- Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.