Local TV Guide: настройка локальной программы передач 2026
Если каналы открываются, но в гайде пусто или показывает программу какого-то чужого региона — это не проблема CCcam. Это отдельная история про EPG. Local tv guide на ресивере — отдельная подсистема, которая не имеет никакого отношения к расшифровке. Настроить её можно и нужно независимо от того, какой у вас CardSharing-сервер.
Что такое локальная TV-программа и зачем она нужна на ресивере
EPG (Electronic Program Guide) — это база данных с расписанием передач. Ресивер показывает её в гайде: название передачи, описание, время начала и конца. Без EPG вы смотрите канал вслепую — не знаете что идёт сейчас и что будет через час.
На большинстве ресиверов Enigma2 (VU+, Dreambox, Formuler, Zgemma) EPG по умолчанию пытается собирать данные из транспортного потока. Работает это не всегда.
Разница между EPG из потока DVB и внешней XMLTV программой
DVB EPG — это EIT таблицы (Event Information Tables), которые вещатель включает прямо в транспортный поток. Ресивер читает их в фоне, пока вы смотрите канал. Плюс — работает без настройки. Минус — многие вещатели дают EIT только на 1-2 дня вперёд, а некоторые региональные каналы вообще не передают EIT.
XMLTV — внешний файл с программой передач. Ресивер загружает его по HTTP или берёт с локального носителя, парсит и складывает в свой кэш. Данных там обычно на 7-14 дней, что удобнее. Но настраивать нужно вручную.
Почему встроенная EPG часто бесполезна для локальных каналов
Спутниковые пакеты, которыми пользуются через CCcam/OScam, часто включают сотни каналов из разных стран. EIT от польских или турецких каналов ресивер получит нормально. А вот локальный региональный канал из вашего города — скорее всего без EPG вообще.
Кроме того, некоторые операторы намеренно вырезают EIT из зашифрованных мультиплексов. Данные есть, но доступны только через собственный EPG-сервис оператора — который вам, конечно, недоступен.
Как EPG связана с CCcam/OScam (на самом деле — никак)
Это частое заблуждение. CCcam и OScam занимаются исключительно Control Words — ключами расшифровки. Они получают CW от сервера и отдают их декодеру. К расписанию передач это не имеет отношения от слова совсем.
EPG — отдельный модуль ресивера. Даже если выключить CCcam, EPG продолжит работать на FTA каналах. Если EPG пустая — проблема не в кардшаринге, а в источнике программы передач.
Источники XMLTV для локальной программы передач
XMLTV — открытый формат. Файл представляет собой XML с перечнем каналов и передач. Вот минимальная структура:
<?xml version="1.0" encoding="UTF-8"?>
<tv generator-info-name="WebGrab+Plus">
<channel id="channel.one.ru">
<display-name lang="ru">Первый канал</display-name>
</channel>
<programme start="20260511060000 +0300" stop="20260511070000 +0300" channel="channel.one.ru">
<title lang="ru">Утренние новости</title>
<desc lang="ru">Выпуск утренних новостей</desc>
</programme>
</tv>
Атрибут start должен содержать таймзону — об этом ниже в разделе проблем.
Открытые XMLTV grabber-ы: tv_grabber_wg, WebGrab+Plus
WebGrab+Plus (WG++) — де-факто стандарт для генерации XMLTV. Работает на Linux, Windows, в Docker. Берёт данные с сайтов телепрограмм через конфигурируемые siteini-файлы. Последняя стабильная версия — 3.2.0.
Классический tv_grab_* из пакета xmltv-utils в Debian/Ubuntu — более старый подход. Для некоторых стран (Великобритания, Финляндия, Нидерланды) грабберы актуальны и поддерживаются. Для постсоветского пространства — WG++ работает лучше.
Где брать списки сайтов-источников по странам
WG++ использует siteini-файлы — это конфигурации для парсинга конкретных сайтов с программами. Официальный репозиторий siteini.pack обновляется сообществом. Найти его можно через поиск "WebGrab+Plus siteini.pack github" — он открытый, там несколько сотен конфигов под разные страны.
Для России и СНГ обычно работают конфиги под крупные агрегаторы программ. Для Польши — под TVN, TVP. Для Германии — под tvspielfilm. Качество зависит от активности поддерживающего.
Формат XMLTV: структура файла, channel-id, programme-id
Атрибут id у тега <channel> — это внутренний идентификатор. Он должен совпадать с атрибутом channel у каждой <programme>. Формат произвольный, но принято использовать обратный домен: perviy.russia.ru, hbo.us.
EPG Importer на Enigma2 соединяет этот id с реальными DVB-каналами через channels-файл. Это ключевой момент — без правильного маппинга данные не отобразятся.
Как сопоставить channel-id из XMLTV с SID каналов в lamedb
lamedb — база каналов Enigma2, лежит в /etc/enigma2/lamedb. Каждый канал там имеет DVB-триплет: namespace, tsid, onid, sid. Именно эти числа нужно указать в channels-файле EPG Importer.
Открыть lamedb можно любым текстовым редактором — он в читаемом формате. Ищите строку с названием канала, рядом будет запись вида 1:0:1:3F4:7DC:282:EEEE0000:0:0:0: — это и есть нужные идентификаторы.
Установка и настройка EPG Importer на Enigma2 (OpenATV, OpenPLi, VTi)
EPG Importer — самый популярный плагин для загрузки внешней программы на Enigma2. Работает на всех основных прошивках: OpenATV 7.x, OpenPLi 9.x, VTi 14.x.
Установка плагина
Через SSH на ресивер:
opkg update
opkg install enigma2-plugin-extensions-epgimport
После установки перезапустите Enigma2 или перегрузите ресивер. Плагин появится в меню Расширения.
Структура папки /etc/epgimport/ — sources файлы
Плагин читает все *.sources.xml файлы из /etc/epgimport/. Каждый sources-файл описывает один или несколько источников. Стандартные источники уже есть после установки — файлы вида rytec.sources.xml. Кастомный добавляется рядом.
Создание custom источника: XML формат
<?xml version="1.0" encoding="UTF-8"?>
<sources>
<source type="gen_xmltv" name="MyLocalGuide">
<description>Локальный гайд с домашнего сервера</description>
<url>http://192.168.1.100/epg/guide.xml.gz</url>
<channels>/etc/epgimport/myguide.channels.xml</channels>
</source>
</sources>
Сохранить как /etc/epgimport/myguide.sources.xml. Параметр type="gen_xmltv" говорит плагину что файл в формате XMLTV. Расширение .gz плагин распаковывает на лету.
Файл channels: маппинг XMLTV id на DVB triplet
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel name="Первый канал">
channel.one.ru:EEEE0000:7DC:282:3F4
</channel>
<channel name="Россия 1">
rossiya.one.ru:EEEE0000:7DC:282:3F5
</channel>
</channels>
Формат: xmltv_channel_id:namespace:tsid:onid:sid. Все числа — в hex. Берёте из lamedb. Это самая трудоёмкая часть — нужно вручную сопоставить каждый канал. Но делается один раз.
Планировщик импорта: автоматический запуск раз в сутки
В настройках EPG Importer есть встроенный планировщик. Выставить время около 4:00 — когда ресивер в режиме ожидания. Включить "Import on wake-up" если ресивер выключается на ночь.
Принудительный запуск через OpenWebif (порт 80 на ресивере):
wget -qO- 'http://127.0.0.1/web/saveepg'
После импорта данные пишутся в /etc/enigma2/epg.dat. Этот бинарный файл — кэш EPG, который Enigma2 читает при старте.
Настройка WebGrab+Plus для собственного XMLTV источника
Если публичные XMLTV источники не покрывают ваши каналы — собирайте сами. WG++ — это именно для этого.
Установка WG++ на Linux сервер рядом с OScam
# Debian/Ubuntu
apt-get install mono-runtime
wget https://webgrabplus.com/sites/default/files/download/SW/V3.2.0/WG++V3.2.0_Setup_Linux.tar.gz
tar -xzf WG++V3.2.0_Setup_Linux.tar.gz -C /opt/wgplus
WG++ работает через Mono — .NET runtime для Linux. На Raspberry Pi и небольших серверах работает нормально, только не ждите скорости на больших списках каналов.
Структура WebGrab++.config.xml
<settings>
<filename>/opt/wgplus/guide.xml</filename>
<mode>m</mode>
<postprocess run="yes" pass="2">MDB</postprocess>
<user-agent>Mozilla/5.0 (compatible)</user-agent>
<logging>on</logging>
<channel update="i" site="tvprogramma.pro" site_id="perviy" xmltv_id="channel.one.ru">
Первый канал
</channel>
</settings>
Режимы: m — merge (добавляет к существующим данным), f — full (пересобирает полностью), c — clear (только то что нашёл). Для ежедневного обновления лучше m.
Siteini файлы: что внутри, как обновлять
Каждый siteini — это скрипт на специальном языке WG++, который описывает как парсить конкретный сайт: какие XPath-пути, как извлекать время, описание, жанры. Обновлять вручную не нужно — достаточно периодически обновлять весь пакет siteini.pack из репозитория.
Запуск по cron
0 4 * * * /opt/wgplus/run.sh >> /var/log/wgplus.log 2>&1
Скрипт run.sh просто запускает mono /opt/wgplus/WebGrab+Plus.exe. Запускать в 4 утра — в это время большинство сайтов-источников под минимальной нагрузкой.
Хостинг готового guide.xml для ресиверов: nginx
location /epg/ {
root /opt/wgplus;
add_header Content-Type application/xml;
gzip_static on;
}
Если guide.xml.gz уже есть рядом с guide.xml, nginx отдаст сжатую версию через gzip_static on. Ресиверы с EPG Importer это понимают.
Сжатие в .xml.gz
gzip -k /opt/wgplus/guide.xml
Типичный guide.xml для 200 каналов весит 15-40 МБ. В gz — 2-5 МБ. При нескольких ресиверах в сети это заметно. Флаг -k сохраняет оригинал рядом.
Решение типичных проблем с локальной EPG
EPG настроена, импорт проходит без ошибок, но что-то всё равно не работает. Вот реальные диагностические команды.
EPG импортирована, но не отображается в гайде
Первое что проверять — channels файл. Скорее всего SID в нём не совпадают с lamedb.
# На ресивере:
cat /etc/enigma2/lamedb | grep -A2 "Первый канал"
# Лог импорта:
tail -f /tmp/epgimport.log
В логе ищите строки вида "channel not matched" — они покажут какой xmltv_id не нашёл пару в channels файле.
Время передач сдвинуто на несколько часов
Классика. Атрибут start в XMLTV должен выглядеть так: 20260511060000 +0300. Если grabber пишет без таймзоны — 20260511060000 — ресивер считает что это UTC и добавляет смещение вашего часового пояса. Итог: сдвиг на 3 часа для Москвы, на 2 для Варшавы.
Фикс в WebGrab++.config.xml — указать timezone="3" для источника, или поставить postprocessor который добавит таймзону автоматически.
Часть каналов получает данные, часть — нет: неверный SID/TSID
Каналы переезжают между транспондерами. Если провайдер переставил канал — его TSID и SID в lamedb обновятся после пересканирования, но в вашем channels файле останутся старые числа. Решение: пересканировать каналы, открыть новый lamedb, сравнить триплеты.
# Быстрая проверка что в epg.dat вообще что-то есть:
cat /etc/enigma2/epg.dat | strings | head -50
ls -la /etc/enigma2/epg.dat
EPG исчезает после перезагрузки ресивера
Если /etc/enigma2/ примонтирован как tmpfs (некоторые прошивки так делают для защиты flash) — epg.dat пропадает при ребуте. Проверить:
mount | grep enigma2
Если tmpfs — либо перенастроить точку монтирования на постоянный раздел, либо вынести epg.dat на USB:
mv /etc/enigma2/epg.dat /media/usb/epg.dat
ln -s /media/usb/epg.dat /etc/enigma2/epg.dat
На ресиверах с маленьким flash (8-16 МБ) это вообще необходимо — epg.dat легко разрастается до 20-30 МБ.
OpenWebif показывает данные, но в гайде ресивера пусто
Кэш не применился. После импорта через EPG Importer нужно или перезагрузить enigma2, или принудительно сохранить:
wget -qO- 'http://127.0.0.1/web/saveepg'
Если и это не помогает — удалить epg.dat и запустить импорт заново. Иногда файл портится.
Кириллица в названиях передач превращается в кракозябры
Проблема кодировки в XMLTV файле. Файл должен быть в UTF-8 без BOM. Если grabber пишет UTF-8 с BOM (особенно грешит Windows) — первые байты EF BB BF ломают XML парсер ресивера.
# Проверить и убрать BOM:
file guide.xml
sed -i 's/^\xEF\xBB\xBF//' guide.xml
Также проверьте что siteini файл для источника указывает правильную кодировку сайта — некоторые старые сайты отдают данные в Windows-1251.
Альтернативные методы: OpenTV EPG, MHW, Sky EPG
XMLTV — не единственный способ получить local tv guide. Некоторые спутниковые пакеты несут EPG прямо в транспортном потоке, причём в расширенных форматах с данными на неделю вперёд.
OpenTV EPG: 7-дневная программа из транспортного потока
OpenTV EPG (он же "Cross-EPG") используется рядом крупных спутниковых пакетов. Отличается от стандартного EIT тем, что содержит данные на 7 дней и богатые метаданные. Плагин CrossEPG для Enigma2 умеет его читать.
CrossEPG настраивается через /etc/crossepg/. Файл crossepg.conf указывает транспондеры для сканирования EPG. После сбора данные конвертируются в тот же формат что и EIT и складываются в epg.dat.
MediaHighway (MHW1/MHW2): EPG формат на некоторых пакетах
MHW/MediaHighway — формат EPG используемый Canal+ и некоторыми другими платными пакетами. Enigma2 поддерживает его нативно через плагин OpenTV-EPG-Importer. Если ваш пакет использует MHW — данные появятся автоматически после настройки плагина, без внешних источников.
Sky EPG: формат используемый Sky UK/DE/IT
Sky EPG — проприетарный формат Sky. Содержит расписание на 7+ дней. Для Enigma2 есть плагины которые умеют его читать с соответствующих транспондеров Astra 28.2E (Sky UK) и Astra 19.2E (Sky DE). Если вы принимаете эти спутники — это бесплатный источник качественной EPG для европейских каналов.
Когда лучше использовать поток EPG, когда — XMLTV
Лучший результат — комбинация. Для каналов которые сами несут хороший EIT (крупные новостные, спортивные) — оставить поток. Для региональных и нишевых каналов без EIT — подключить XMLTV. EPG Importer и CrossEPG умеют работать вместе, не конфликтуют.
Логика такая: поставить CrossEPG как основной источник для европейских каналов, EPG Importer с кастомным XMLTV — для всего остального. В EPG Importer есть опция "Don't overwrite existing data" — она не затирает данные которые уже пришли из потока.
Настроенный таким образом local tv guide покроет 90%+ каналов даже на сложных мультиязычных подборках.
Связана ли локальная TV-программа с работой CCcam или OScam?
Нет. EPG — отдельная подсистема ресивера. CCcam и OScam отвечают только за расшифровку — они передают Control Words декодеру. Программа передач приходит либо из DVB потока через EIT таблицы, либо из внешнего XMLTV файла. Если EPG пустая — ищите проблему в источнике программы, не в кардшаринге.
Где взять XMLTV файл с программой для моего региона?
Через WebGrab+Plus собрать самостоятельно из открытых siteini под нужные сайты-источники. Siteini.pack содержит конфиги для большинства стран. Альтернатива — публичные XMLTV агрегаторы, которых можно найти поиском. Выбор зависит от региона и того, какие сайты с программами там доступны.
Почему EPG Importer импортировал данные, но в гайде пусто?
Скорее всего channels файл содержит неверные DVB триплеты. Откройте lamedb на ресивере (/etc/enigma2/lamedb), найдите нужный канал и проверьте его namespace:tsid:onid:sid. Сравните с тем что написано в вашем channels XML. Расхождение хотя бы в одном числе — канал не найдёт пару. Также проверьте /tmp/epgimport.log на строки "not matched".
Как часто нужно обновлять локальную программу передач?
Раз в сутки достаточно. Большинство источников публикуют данные на 7-14 дней вперёд, так что ежедневное обновление поддерживает актуальность. Cron-задание лучше ставить на 3-5 утра — в это время нагрузка на сайты-источники минимальна, и вероятность таймаута при парсинге ниже.
Куда EPG Importer на Enigma2 сохраняет данные после импорта?
В файл /etc/enigma2/epg.dat — это бинарный кэш EPG. После импорта нужно либо перезагрузить enigma2, либо вызвать saveepg через OpenWebif: wget -qO- 'http://127.0.0.1/web/saveepg'. Без этого шага данные могут не отобразиться в гайде даже при успешном импорте.
Можно ли использовать одну XMLTV программу для нескольких ресиверов в сети?
Да, и это правильный подход. Поднять nginx или lighttpd на роутере или домашнем сервере, отдавать guide.xml.gz по HTTP на внутреннем IP. На каждом ресивере в sources файле EPG Importer прописать этот URL. WG++ собирает данные один раз, все ресиверы берут готовый файл — трафик и нагрузка на источники минимальные.
Что делать если время передач в EPG сдвинуто на несколько часов?
Проблема таймзоны в XMLTV. Атрибут start должен быть в формате YYYYMMDDHHMMSS +TZ, например 20260511183000 +0300. Если grabber пишет время без таймзоны — ресивер считает что это UTC и сдвигает по локальной зоне. Фикс: добавить таймзону в конфиг WebGrab++ или использовать postprocessor для добавления смещения к уже сгенерированному файлу.