prog4food / ott-play-epg-converter

Converter EPG XMLTV to OTT-play (by Alex) server side JSON

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EPG converter for OTT-play FOSS

Описание

Инструмент создания телепрограммы для OTT-Play FOSS, использует 1 поток, и буферное чтение из файла, что позволяет минимизировать нагрузку на систему при разборе больших файлов, потребляет примерно 25 мб оперативной памяти при обработке 300 МБ файла, на современном процессоре тратит на это порядка 35 сек. Для любопытных есть бенчмарки.

Вся информация о провайдерах заносится в конфиг файлы в формате json, можно настроить провайдер так, что он будет получать данные через stdin (а значит файл можно вообще не скачивать на диск). Пример конфига в samples/sample_config.json

Поддерживается прямое скачивание файлов с поддержкой редиректов(301/302), а также прямая работа с gzip источниками.

После каждого запуска актуализируется база данных по обработанным провайдерам chcache.db на ее основе в конце создается общий список каналов.
epgcache.tmp это данные epg последнего обработанного провайдера, пересоздается при обработке нового провайдера.
Файл providers.json содержит имя провайдера, хеши поддерживаемых url-tvg, и время последней передачи в EPG (для контроля актуальности провайдера).
Для каждого провайдера также создается channels.json, в котором содержится хеш ид канала, время последней передачи на канале (позволяет контролировать актуальность и наличие EPG), ссылку на логотип канала, список названий канала.

Аргументы командной строки

Общая схема: <app> [--epg-ram] [-tar FILE [-z LEVEL]] [-c OPTS] [-cr TEXT]
Основные опции:
    -c <opts>  обработать json конфиг, в котором прописаны XMLTV источники, формат <opts> описан ниже
               [i] Символ "," используется как разделитель в блоке <opts>
               [i] Aргументы -c можно комбинировать
  -cr <jtext>  обработать json конфиг, указанный в <jtext> (json конфигурация провайдера, как в конфиге)
    --epg-ram  включает обработку базы в оперативной памяти, дает ~20% прирост
               производительности, но увеличивает потребление памяти до ~200МБ
  -tar <file>  записывать все файлы tar архив <file>, вместо прямой записи в каталоги
               [i] Eсли в качестве имени файла указать "-", то вывод будет в StdOut (консоль)
               [i] Eсли в конце имени файла присуствует ".gz", то автоматически включится сжатие (-z) с уровнем 1
   -z <level>  если выбрана запись в tar архив, то дополнительно сжимать его (gzip),
               уровнем <level>, допустимые значения от -2 (HuffmanOnly) до 9 (BestCompression)


  -c config_file[,prov_name1...]
    config_file  файл со списком для обработки
    prov_name    дополнительный фильтр, для выборки только одного провайдера,
                 через "," можно указывать несколько

Описание конфига и примеры

С комментариями находятся в samples/sample_config.json

Примеры запуска

### Создать EPG для провайдера it999 из конфиг файла sample_config.json:
  ott-play-epg-converter -c sample_config.json,it999
### Создать EPG для провайдера iptvx.one (пример выше) из конфиг файла sample_config.json:
  zcat somepg.xml.gz | ott-play-epg-converter -c sample_config.json,iptvx.one
### Создать EPG для всех провайдеров из конфиг файла sample_config.json:
  ott-play-epg-converter -c sample_config.json
### Создать EPG для всех провайдеров из конфиг файла sample_config.json, и записать файлы в архив out_sample.tar.gz:
  ott-play-epg-converter -c sample_config.json -tar out_sample.tar.gz
### Создать EPG для провайдера it999, указав настройки в командной строке:
  ott-play-epg-converter -cp "{ id:'it999', xmltv: [ 'https://epg.it999.ru/epg.xml.gz' ] }"
### Другие примеры:
  cat epgone.xml | ott-play-epg-converter -c sample_config.json,intest
  curl --silent http://prov.host/epg.xml.gz | gzip -d -c - | ott-play-epg-converter -c sample_config.json,intest
  curl --silent --compressed http://prov.host/epg.xml | ott-play-epg-converter -c sample_config.json,intest
  ...
  ott-play-epg-converter -c sample_config.json,it999

Prebuild

Готовые бинарники я компилирую для Windows (x64, x86)/Linux (x64, arm64, arm7a-soft-float, arm7-hard-float)
Иногда буду добавлять версии для Android (arm64, arm7a-soft-float)
В теории можно завести на всем, что поддерживает GO и кросс-компил, но сборкой придется заняться самостоятельно.

Бенчмарки

В файле benchmarks.md есть немного тестов EPG от it999 на различных платформах.

About

Converter EPG XMLTV to OTT-play (by Alex) server side JSON


Languages

Language:Go 95.3%Language:Shell 4.7%