Поиск по блогу

среда, 1 мая 2019 г.

Обновил конвертер JTV в XMLTV

Несколько лет назад интернет-провайдер, который первым в нашем доме предложил интернет через Ethernet, предоставлял программу передач для IPTV только в формате JTV.
Формат JTV появился в одноименной программе польского разработчика Ярослава Ковальского для ТВ-тюнеров на базе чипов bt8x8. Это двоичный формат, база телепрограмм JTV обычно является архивом ZIP или RAR, содержащим пары файлов (с расширением NDX и PDT) для каждого телеканала.
Программа передач в формате XMLTV тогда провайдером не предоставлялась и собирать EPG из разных источников было проблемой. Я поискал в интернете и не найдя готового конвертера из JTV в XMLTV написал свой.

Спустя три года я подтянул свои знания в Python и решил в качестве практического упражнения обновить утилиту. Несколько часов ушло на рефакторинг кода и добавление тестов. Благодаря одному из них я нашел ошибку, которую не замечал несколько лет - в результирующем XML отстутствовала самая последняя передача.

Добавил tox для запуска проверок в изолированных окружениях. Последним штрихом реализовал поддержку python 3.x, которая стоила мне нескольких часов отладки проблем с кодировками в zipfile. Согласно .ZIP File Format Specification (Appendix D) при кодировании имен файлов допускается использовать cp437 либо UTF-8, но многие реализации zip отступают от стандарта и используют другие кодировки. В частности русскоязычная Windows использует cp866 для имен файлов содержащих кириллицу. А поскольку в JTV имя файла задает название канала, то важно правильно декодировать его.

В итоге я добавил поддержку python 3.x, тесты и пакет для Debian/Ubuntu. Пакет jtv2xmltv версии 0.1.1 для Debian/Ubuntu можно скачать из моего репозитария или с GitHub.

6 комментариев:

  1. Уже обрадовался, что нашел простой конвертер, но jtv от моего провайдера оказался не по зубам и конвертер в итоге не дал результат, выдав ошибку об неверном формате.

    ОтветитьУдалить
    Ответы
    1. А можно увидеть ссылку на файл с неверным форматом? Мне уже репортили похожую проблему (https://github.com/tataranovich/jtv2xmltv/issues/4) и там действительно кривой исходный файл оказался.

      Удалить
  2. Это конкретно, который не смог конвертировать
    https://drive.google.com/open?id=13R6DEopWDH7GV7TtQjtRxuwys6Q9AV0h
    Вообще от провайдера http://portal2.myttk.ru/jtv2.zip
    Но провайдер может ограничивать скачивание для локального сегмента.

    ОтветитьУдалить
  3. В этом формате какая то путаница с байтами в начальной части. У кого то 0x0A, а у кого то 0xA0. Но IP-TV Player нормально воспринимает мой экземпляр. По сути, нужно просто что бы оба воспринимались конвертером.

    ОтветитьУдалить
    Ответы
    1. Я добавил поддержку альтернативного заголовка JTV в v0.2.1 (https://github.com/tataranovich/jtv2xmltv/releases/tag/v0.2.1) и возможность указывать кодировку для EPG.

      Похоже у "сломанного" заголовка есть какой-то один источник: http://dkt.iptvportal.ru/jtv.zip

      Удалить
  4. а слить воедино с наработками https://github.com/snakefishh/mnn-xbmc-repo/tree/master/script.service.jtvtoxmltv не порывался?

    имхо в виде плагина для коди этож полезнее будет )

    ОтветитьУдалить