Импорт EPG/XMLTV

База EPG наполняется из источников трёх видов:

  • EIT из принимаемых потоков — настройка «Извлекать EIT в базу данных EPG» у потока (SPTS и MPTS, Модификация потока);

  • EIT с DVB-адаптеров — настройка «Экспорт EPG» адаптера (DVB-приёмник);

  • внешние источники XMLTV — по ссылке на веб-ресурс или из локального файла.

EIT, извлечённый из потоков и с DVB-адаптеров, накапливается в общем встроенном источнике «поток-импорт»; каждый внешний источник XMLTV ведёт собственную базу. Идентификатор канала уникален в пределах своего источника; названия каналов и тексты событий хранятся на нескольких языках.

Настройка источников

Источники настраиваются на экране «Настройки EPG» (Настройки EPG). На вкладке «Импорт» — общие параметры: «Включить импорт», «Хранить историю, дней» (глубина хранения прошедших событий) и «Автоочистка осиротевших каналов» (удаление каналов, у которых не осталось событий).

Внешние источники XMLTV добавляются на вкладке «Источники»: имя, «URL / путь источника», «Включено», «Интервал обновления, с» (по умолчанию раз в час), «Кодировка контента» (автоопределение или принудительно GZip), учётные данные и Cookies для закрытых веб-источников, «Сохранять загруженную копию» для диагностики. Источник — адрес http или https либо абсолютный путь к файлу на узле; Cookies передаются в заголовке Cookie только хосту источника. После изменения включённого источника (например, его адреса) данные загружаются сразу, не дожидаясь интервала обновления.

С версии 2.0.2.418 у источника есть таймаут загрузки — параметр fetch-timeout источника в файле настроек или через API (от 0 до 3600 секунд, 0 — прежние 30 секунд); с версии 2.0.2.419 его задаёт поле «Тайм-аут загрузки, с» (Настройки EPG). Это предел ожидания каждой отправки и каждого приёма данных: первого байта ответа и любой паузы в передаче. Он нужен медленным источникам, которые собирают файл по запросу. Соединение устанавливается не дольше 30 секунд, вся передача длится не дольше 30 минут (или двух таймаутов, если это больше). Истёкший таймаут — неудачная загрузка: он записывается в журнал и показывается в ошибке источника.

Очередь загрузок и повторы

С версии 2.0.2.418 внешние источники загружаются, разбираются и применяются по одному: пока идёт один, остальные ждут своей очереди, и на вкладке «Состояние источников» такой источник показан ожидающим, с номером позиции в очереди (Queued: position N); с версии 2.0.2.419 он отмечен ещё и синей точкой. Повторные «Обновить сейчас» для ожидающего источника сливаются в одну загрузку. После запуска службы источники начинают загрузку не одновременно, а по очереди с интервалом: первый через 10 секунд, каждый следующий на секунду позже. Поэтому пик памяти при перезапуске узла с несколькими большими лентами остаётся на уровне одной ленты, и после загрузки память возвращается системе.

Неудачная загрузка повторяется не через полный интервал обновления, а через 2, 5 и 15 минут, затем каждые 30 минут (но не реже интервала обновления); время следующей попытки показано в поле «Следующее обновление». С версии 2.0.2.419 это поле на время неудач называется «Следующая попытка», а рядом показано поле «Неудачных загрузок подряд» (База данных EPG). Счёт неудач сбрасывают успешная загрузка, правка источника и перезапуск службы. Пустой ответ источника с этой версии тоже считается ошибкой.

База данных EPG

Накопленная программа передач просматривается на экране «База данных EPG» (База данных EPG). На вкладке «База данных» выбирается источник, доступны поиск каналов и фильтр по набору каналов; расписание канала листается по дням, текущая передача подсвечена. Для каждого канала можно изменить:

  • «Название канала» — имя для экспорта XMLTV;

  • «Часовой пояс» — если время событий при импорте не было привязано к UTC;

  • «URL значка» — иконка канала;

  • «Наборы каналов» — членство в наборах для выдачи внешним потребителям (EPG для OTT middleware).

Ручные правки могут быть перезаписаны при следующем обновлении источника — веб-интерфейс предупреждает об этом.

Вкладка «Состояние источников» показывает ход импорта: время последнего и следующего обновления, число каналов и событий, ошибки; кнопка «Обновить сейчас» запускает обновление источника немедленно, не дожидаясь расписания.

С версии 2.0.2.420 изменения программы во внешних источниках распознаются надёжнее: изменением считается и обмен текстом между двумя полями передачи. Лента, которая не изменилась с прошлого обновления, заново не разбирается, но её каналы по-прежнему считаются обновлёнными, поэтому «Автоочистка осиротевших каналов» их не удаляет; до версии 2.0.2.420 такие каналы могли пропасть. Первое обновление после перехода на 2.0.2.420 ничего в базе не переписывает, и правки названий каналов, сделанные в веб-интерфейсе, сохраняются.