Local TV Guide через CCcam: настройка локальных каналов 2026
Если вы уже подняли CCcam или OScam и каналы расшифровываются нормально — поздравляю, это была проще часть. Теперь начинается настоящая головная боль: local tv guide либо пустой, либо показывает программу для чужого региона с чужим часовым поясом. Передачи сдвинуты на три часа, названия каналов не совпадают, или EPG есть только на пяти каналах из пятидесяти. Разберёмся как это чинить от начала до конца.
Что такое local TV guide и почему он не работает из коробки
Сначала важно понять разницу между тем, что делает карточный шаринг, и тем, откуда берётся программа передач. Это два совершенно разных механизма, и путать их — первая ошибка большинства пользователей.
EPG в DVB-потоке vs внешний XMLTV
В DVB-транспортном потоке есть специальные таблицы — EIT (Event Information Table). Именно там лежат названия передач, время начала и конца, описание. Ресивер читает эти таблицы в реальном времени пока крутит канал. Проблема в том, что EIT покрывает обычно 24–48 часов вперёд, часто только текущую и следующую передачу, и приходит не для всех каналов.
Внешний XMLTV — это другой формат. Файл epg.xml (или epg.xml.gz) скачивается из интернета и содержит расписание на 7–14 дней. Плагины вроде EPGImport или CrossEPG парсят этот файл и загружают данные в базу ресивера. Это и есть правильный способ получить полноценный local tv guide для региональных каналов.
Форматов EPG несколько: помимо XMLTV есть OpenTV (используется на спутниковых платформах вроде Sky и Tivùsat), MHW (MediaHighway — старый формат Canal+), Sky EPG. Для большинства самодельных сетапов с шарингом релевантны XMLTV и OpenTV.
Почему CCcam/OScam не влияют на EPG напрямую
CCcam и OScam занимаются одним — расшифровкой Control Words (CW) из ECM-запросов. Они вообще не касаются EPG. EIT-таблицы в транспортном потоке передаются в открытом виде — без шифрования. Поэтому если EPG пустой, проблема точно не в шаринге. Ищите причину в ресивере, плагинах и источниках данных.
Исключение: некоторые провайдеры шифруют EIT вместе с остальным контентом. Редкость, но бывает. В таком случае EIT из потока не вытащить — нужен только внешний XMLTV.
Роль ресивера и плагинов EPGImport/CrossEPG
На Enigma2 (Dreambox, VU+, Formuler, Zgemma) есть два основных инструмента: EPGImport и CrossEPG. EPGImport работает с XMLTV-файлами, CrossEPG умеет сканировать OpenTV и EIT непосредственно с транспондеров. В 2026 году EPGImport более актуален для шаринг-сетапов, потому что внешние XMLTV-фиды обновляются стабильнее чем OTA-данные.
Источники EPG для локальных каналов
Задача — найти XMLTV-фид, который покрывает нужный регион, обновляется хотя бы раз в сутки и содержит корректные идентификаторы каналов. Звучит просто, но нюансов хватает.
Категории источников: открытые XMLTV-фиды, OTA EIT, OpenTV транспондеры
Открытые XMLTV-фиды — файлы которые кто-то собирает из открытых источников (сайты телеканалов, телепрограммы) и выкладывает в интернет. Качество варьируется от отличного до мусора. Ищите фиды которые обслуживают сообщество активно — у них обычно есть channels.xml с правильным маппингом.
OTA EIT — данные прямо из эфира. Если принимаете DVB-T2 или спутник без шифрования EIT, ресивер читает их сам. Настраивать почти ничего не нужно, но глубина — 24–48 часов максимум.
OpenTV-транспондеры — спутниковые платформы, которые вещают EPG в проприетарном формате на отдельном транспондере. Sky UK, Canal+ France, Tivùsat — все они публикуют полные 14-дневные расписания в OpenTV. CrossEPG умеет их читать.
Критерии выбора источника: покрытие региона, частота обновления, корректность таймзоны
Три вещи которые нужно проверить прежде чем тратить время на настройку:
- Покрытие: есть ли в файле каналы вашего региона? Откройте
channels.xmlи поищите знакомые названия. - Частота обновления: проверьте заголовок
Last-Modifiedчерезcurl -I https://example.com/epg.xml.gz. Если файл не обновлялся 3+ дня — не тратьте время. - Таймзона: в корневом теге
<tv>должен быть атрибут или конкретное время в формате20260518120000 +0300. Если все времена в UTC без указания зоны — придётся настраивать offset вручную в плагине.
Где искать XMLTV-фиды для своего региона
Лучший способ в 2026 году — GitHub. Ищите по запросам вида xmltv epg [страна] или epg [country] channels.xml. Много community-maintained репозиториев с актуальными фидами для Европы, России, Ближнего Востока. Второй вариант — форумы Enigma2-сообщества (Satdreamgr, DigitAll и подобные), там обычно есть тред про EPG конкретно для вашего региона.
Пример структуры корректного channels.xml:
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel id="channel.one.ru">
<display-name lang="ru">Первый канал</display-name>
</channel>
<channel id="russia1.ru">
<display-name lang="ru">Россия 1</display-name>
</channel>
</channels>
А вот как выглядит запись в epg.xml:
<programme start="20260518140000 +0300" stop="20260518150000 +0300" channel="channel.one.ru">
<title lang="ru">Новости</title>
<desc lang="ru">Выпуск новостей.</desc>
</programme>
Установка и настройка EPGImport на Enigma2
Перейдём к конкретике. EPGImport — самый распространённый способ подключить local tv guide через XMLTV на Enigma2-ресиверах.
Установка пакета enigma2-plugin-extensions-epgimport через opkg
SSH на ресивер и выполняем:
opkg update
opkg install enigma2-plugin-extensions-epgimport
После установки плагин появится в меню Plugins → EPGImport. Перед первым запуском стоит перезапустить GUI: killall -HUP enigma2 или через меню.
Если opkg не находит пакет — добавьте репозиторий вашего имиджа. Для OpenPLi это:
echo "src/gz openpli http://downloads.openpli.org/feeds/6.4/all" >> /etc/opkg/customfeeds.conf
opkg update
Структура папок: /etc/epgimport/ и custom sources
После установки EPGImport создаёт директорию /etc/epgimport/. Там лежат встроенные источники. Свои custom-источники кладите туда же — плагин подхватывает все файлы с расширением .sources.xml.
Если раздел /etc маленький (стандартный flash на старых Dreambox — 32 МБ), выносите базу EPG на внешний накопитель. В настройках EPGImport есть опция EPG data path — укажите /media/hdd/epgimport/ или /media/usb/epgimport/. Иначе после пары полных обновлений получите переполненный flash и кирпич.
Создание custom sources.xml и channels.xml
Создайте файл /etc/epgimport/myregion.sources.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sources>
<source type="gen_xmltv" nocheck="1">
<description>Мой регион EPG</description>
<url>https://example.com/epg/myregion.xml.gz</url>
<channels>/etc/epgimport/myregion.channels.xml</channels>
</source>
</sources>
Тег nocheck="1" отключает проверку SSL-сертификата — полезно если источник на HTTP или с самоподписанным сертом. Без него EPGImport иногда молча пропускает источник.
Резервный URL можно добавить вторым тегом <url> — EPGImport попробует его если первый не отвечает:
<url>https://mirror.example.com/epg/myregion.xml.gz</url>
Это важно: бывает что XMLTV-источник возвращает 200 OK но отдаёт пустой или битый gzip. Fallback на резервный URL спасает ситуацию без ручного вмешательства.
Маппинг service reference (SID:TID:ONID) к channel id
Это — самое важное место. И самое непонятное для большинства. Без правильного маппинга EPG не отобразится ни на одном канале, даже если файлы скачиваются отлично.
Service reference выглядит так: 1:0:1:6EF:452E:2710:820000:0:0:0:. Разбивка: SID=0x6EF, TID=0x452E, ONID=0x2710.
В myregion.channels.xml нужно связать этот reference с channel id из XMLTV:
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel id="channel.one.ru">1:0:1:6EF:452E:2710:820000:0:0:0:</channel>
<channel id="russia1.ru">1:0:1:A0B:452E:2710:820000:0:0:0:</channel>
</channels>
Чтобы узнать service reference канала на ресивере, зайдите в информацию о канале (обычно кнопка Info или i на пульте). Там будет строка типа 1:0:1:6EF:452E:2710:820000:0:0:0. Можно также читать напрямую из файла bouquet:
grep "^#SERVICE" /etc/enigma2/userbouquet.mylist.tv | head -20
Привязка EPG к bouquet файлам и часовому поясу
Редактирование /etc/enigma2/userbouquet.*.tv
Файл bouquet содержит строки вида:
#SERVICE 1:0:1:6EF:452E:2710:820000:0:0:0:
#DESCRIPTION Первый канал
Именно 1:0:1:6EF:452E:2710:820000:0:0:0: — это service reference который должен совпадать с тем что прописан в channels.xml. Если ресивер поменял транспондер и у канала изменился SID или ONID — старый EPG прилипает к новому каналу и показывает мусор. В таком случае нужно обновить reference в channels.xml.
Проверка и настройка таймзоны
Неправильный часовой пояс — вторая по частоте причина кривого EPG. Проверяем:
date
cat /etc/timezone
Если время неправильное — ставим tzdata и выставляем нужную зону:
opkg install tzdata
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
echo "Europe/Moscow" > /etc/timezone
Для других регионов: Europe/Warsaw, Europe/Berlin, Europe/Kiev, Asia/Almaty — смотрите список в /usr/share/zoneinfo/. После смены таймзоны перезапустите Enigma2 — плагины кэшируют offset при старте.
Автообновление через cron
Создайте скрипт /usr/script/epgimport.sh:
#!/bin/sh
/usr/lib/enigma2/python/Plugins/Extensions/EPGImport/epgimport.py --import-sources /etc/epgimport/myregion.sources.xml
Права: chmod 755 /usr/script/epgimport.sh
Добавляем в cron — запуск в 04:00 каждую ночь:
0 4 * * * /usr/script/epgimport.sh
Важный момент: на многих ресиверах перезагрузка сбрасывает crontab. Чтобы задача сохранялась, используйте пакет cron-persistent или кладите скрипт в /etc/cron.daily/:
cp /usr/script/epgimport.sh /etc/cron.daily/epgimport
chmod 755 /etc/cron.daily/epgimport
Обновлять чаще одного раза в сутки смысла нет — XMLTV-фиды в большинстве своём генерируются раз в день. Ночное окно 3:00–5:00 оптимально: нагрузка на ресивер минимальна, пользователи не смотрят ТВ.
Альтернатива: CrossEPG и OpenTV-сканирование
Когда использовать CrossEPG вместо EPGImport
CrossEPG нужен когда нет подходящего XMLTV-фида, но есть спутниковая платформа которая вещает EPG в OpenTV или MHW формате. Типичный кейс: вы принимаете Sky UK или Canal+ France и хотите получить их полное 14-дневное расписание.
Для шаринг-сетапов CrossEPG работает хуже чем EPGImport. Причина: OpenTV EPG часто привязан к конкретным SID той же платформы, а у шаринг-каналов service reference может отличаться. В итоге маппинг рассыпается. XMLTV надёжнее.
Сканирование OpenTV-провайдеров
В CrossEPG выберите провайдера из списка (Sky UK, Tivùsat, Canal+ и др.), запустите сканирование. Плагин найдёт транспондер EPG, скачает данные и сохранит в собственную базу. Экспорт в формат EIT для Enigma2 происходит автоматически.
Для локальных эфирных DVB-T2 каналов OpenTV-сканирование не подходит — они используют стандартный EIT. CrossEPG там бесполезен. Нужен либо EIT из потока (работает автоматически, но только 24–48 часов), либо внешний XMLTV.
Хранение базы
CrossEPG по умолчанию пишет базу в /etc/crossepg/. На маленьком flash это проблема. Переносите:
mkdir -p /media/hdd/crossepg
ln -sf /media/hdd/crossepg /etc/crossepg
Или укажите путь напрямую в конфиге /etc/crossepg/crossepg.conf через параметр db_path = /media/hdd/crossepg.
Диагностика: что делать если EPG пустой
Итак, всё настроили, EPGImport запустили, ждёте программу передач — а там пусто. Вот рабочий порядок диагностики.
Шаг 1: смотрим логи
tail -f /tmp/epgimport.log
Запустите импорт вручную из меню плагина и смотрите что пишется в реальном времени. Там сразу видно: не скачался файл, не нашёл channels.xml, неверный формат. Большинство проблем диагностируется за 30 секунд.
Если ресивер крашнулся во время импорта:
ls /tmp/enigma2_crash_*.log
cat /tmp/enigma2_crash_2026*.log | tail -50
Шаг 2: права доступа
chmod -R 755 /etc/epgimport
ls -la /etc/epgimport/
Звучит банально, но пропущенные права — неожиданно частая причина. Особенно если файлы копировались с Windows через WinSCP с дефолтными настройками.
Шаг 3: несовпадение service reference
Это самая частая причина пустого EPG. Алгоритм проверки:
- Открыть канал на ресивере, нажать Info, записать service reference.
- Найти этот reference в
channels.xml. - Найти channel id из
channels.xmlвepg.xml.
Если хоть одно звено разорвано — EPG не появится. Чаще всего проблема на стыке: в channels.xml прописан старый reference, а канал переехал на новый транспондер с другим TID.
Быстрая проверка через grep:
# Находим channel id по service reference
grep "1:0:1:6EF:452E:2710" /etc/epgimport/myregion.channels.xml
# Проверяем что этот channel id есть в EPG файле
zcat /tmp/epg.xml.gz | grep 'channel id="channel.one.ru"' | head -5
Шаг 4: проблемы с gzip
Проверяем целостность скачанного файла:
file /tmp/epg.xml.gz
gunzip -t /tmp/epg.xml.gz
Если gunzip -t возвращает ошибку — архив битый. Сменить источник или добавить fallback URL. Если файл проходит проверку, но EPGImport всё равно ругается — проверьте кодировку:
zcat /tmp/epg.xml.gz | head -1
Первая строка должна содержать encoding="UTF-8" и открывать тег <?xml. Некоторые источники отдают Windows-1251 — Enigma2 это не переварит.
Шаг 5: конфликт EIT и внешнего XMLTV
Бывает что EPG заполнен, но там двойные записи или данные перезаписывают друг друга. Причина — ресивер читает и EIT из потока, и XMLTV, и они конфликтуют. Лечение: отключите "Read EPG from EIT" в настройках Enigma2 (Setup → System → Expert → DVB → Read EPG from transponder → No). Оставьте только XMLTV как единственный источник.
После любых изменений настроек EPG — перезапускайте enigma2 полностью, не только плагин. База EPG кэшируется в памяти и не всегда корректно обновляется без рестарта.
Влияет ли CCcam или OScam на EPG локальных каналов?
Нет, никак. Cardsharing занимается только расшифровкой ECM — это управляющие слова для дескремблирования видеопотока. EPG передаётся в открытом виде в EIT-таблицах транспортного потока или загружается из внешнего XMLTV. Если local tv guide пустой — ищите проблему в плагинах ресивера и источниках данных, а не в шаринге.
Почему время передач сдвинуто на несколько часов?
Неправильная таймзона — либо на ресивере, либо в XMLTV-источнике. Проверьте командой date и cat /etc/timezone. Исправление: ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime, затем полный перезапуск enigma2. Если на ресивере время правильное, а в XMLTV-файле все времена в UTC без указания зоны — EPGImport может применять неверный offset. Откройте epg.xml и проверьте формат атрибутов start и stop.
Можно ли использовать один XMLTV-источник для разных стран?
Технически да, если в файле есть lineup для нужных регионов и channel id уникальны. На практике лучше держать отдельный sources.xml на каждую страну — меньше путаницы и проще отлаживать. Объединённые фиды часто оказываются огромными (50+ МБ), что замедляет парсинг на слабых ресиверах типа старых Dreambox.
Как часто EPGImport должен обновлять расписание?
Достаточно одного раза в сутки. Большинство XMLTV-фидов генерируются раз в 24 часа, чаще обновлять бессмысленно — получите тот же файл. Оптимальное время: 03:00–05:00 ночи по местному времени, минимальная нагрузка на ресивер и меньше шансов прервать просмотр.
EPG показывается на главном канале но пропадает после переключения — что делать?
Service reference в bouquet не совпадает с channel id в XMLTV для этих каналов. Откройте /etc/enigma2/userbouquet.*.tv, возьмите строку #SERVICE для проблемного канала и сравните SID:TID:ONID со значениями в channels.xml. Поправьте маппинг вручную — это единственное рабочее решение.
Подходит ли OpenTV-сканирование для локальных эфирных каналов?
Нет. OpenTV используется спутниковыми платформами (Sky UK, Canal+ France, Tivùsat). Локальные эфирные DVB-T2 каналы транслируют стандартный EIT — его читает Enigma2 напрямую, без CrossEPG. Для полноценного 7–14-дневного расписания эфирных каналов нужен внешний XMLTV-фид.
Что делать если epg.xml.gz скачивается но не парсится?
Первым делом: gunzip -t epg.xml.gz. Если ошибка — архив битый, меняйте источник или добавляйте резервный URL в sources.xml. Если архив целый — проверьте кодировку (zcat epg.xml.gz | head -1 должна показать encoding="UTF-8") и наличие корневого тега <tv>. Некоторые источники отдают файл с BOM или в Windows-1251 — EPGImport это не обрабатывает.