[Из песочницы] Феерический screensaver для Kodi

image alt


Назначение хранителя экрана для «Kodi»


Проект предназначен для создания «Феерического» хранителя экрана с минимальным количеством исходного кода на языке Python. Проект является простейшим плагином для мультимедиа центра Kodi.

Проект показывает как можно создать очень красивый хранитель экрана целиком опираясь на работу «OpenSource» сообщества. Проект интеграционный, это пример написания двух независимых компонентов, каждый из которых занимает порядка 80 строчек кода. Первый компонент — генератор контента, shell скрипт, второй компонент — плагин для мультимедиа центра Kodi, отвечает за отображение контента.

Ну и напоследок если вы программист и используете систему контроля версий Git, то вы можете визуализировать вашу работу, записать ее в видео файл и наслаждаться полученным результатом на экране телевизора или компьютера, откинувшись на спинку кресла с чашечкой кофе. А прохладными осенними вечерами вы можете убаюкивающе засыпать под ваш screensaver, не забыв при этом поставить таймер выключения устройства в Kodi.

Преамбула


Бесконечно можно смотреть на три вещи:
как горит огонь, как течет вода и как работают другие люди.

Так как плагин пишется для «Мультимедиа центра Kodi», то и визуализировать я буду работу супер команды «Kodi программистов».

Использование плагинов в Kodi


Мультимедиа центр Kodi является очень мощной и гибкой программой, работающей в связке с внешней библиотекой ffmpeg, для декодирования аудио и видео файлов.

Для создания стороннего приложения Kodi использует механизм расширений «addons» или попросту плагинов. Для создания собственного плагина мне потребуются некоторые навыки и небольшое знание языка программирования Python.

Механизм плагинов Kodi является чрезвычайно гибким и удобным. Python интерпретируемый язык, а это значит что мне не нужно ничего компилировать, собирать в отдельный пакет программного обеспечения, мучиться с файлами сборки типа «makefile» и т.п.

Для конечного распространения Kodi плагина достаточно упаковать его в Zip архив, соблюдая некоторые правила по структуре каталогов. Имея на руках конечный Zip архив его можно установить на любом устройстве в котором работает Kodi: компьютере, планшете, и наконец телевизоре (имеется ввиду связка TV + одноплатник), указав архив в виде источника плагина.

Структура плагина для Kodi

└── screensaver.kodi.universe
    ├── README.md
    ├── addon.xml
    ├── changelog.txt
    ├── create.sh
    ├── fanart.jpg
    ├── icon.png
    ├── resources
    │   ├── language
    │   │   ├── English
    │   │   │   └── strings.po
    │   │   └── Russian
    │   │       └── strings.po
    │   ├── settings.xml
    │   └── skins
    │       └── default
    │           ├── 720p
    │           │   └── kodi-universe.xml
    │           ├── 1080i
    │           │   └── kodi-universe.xml
    │           └── media
    │               ├── black.jpg
    │               ├── buran.jpg
    │               └── kodi-universe.mkv
    └── screensaver.py
  • README.md — необязательный файл, содержит описание проекта для github.com
  • addon.xml — файл с описанием плагина, содержит тип плагина, кодировку, версию, зависимости, имя автора и т.п.
  • changelog.txt — необязательный файл, со списком изменений проекта
  • create.sh — необязательный файл, bash скрипт предназначен для создания Zip архива screensaver (а) и генерации видео файла по Git истории с помощью инструмента Gource, к самому Kodi плагину файл отношения не имеет, необходим для удобного распространения плагина. Является полностью автономным, т.е. имея только этот файл вы всегда можете создать полный Zip архив плагина (при наличие интернет соединения).
  • fanart.jpg — фоновое изображение плагина
  • icon.png — основная иконка
  • resources — каталог с ресурсами плагина
  • screensaver.py — основной файл плагина, содержит весь исходный код плагина на языке Python, название файла может быть любым, главное, чтобы это название было прописано в файла addon.xml


Описание ресурсов плагина


Каталог resources содержит следующие файлы:

  • language/English/strings.po — оригинальные строки интерфейса плагина на английском языке
  • language/Russian/strings.po — перевод на русский язык, файл входит в стандартный механизм Kodi по переводу содержимого на национальные языки стран, в начале файла содержится стандартная текстовая шапка из нескольких строк (пример можно взять на сайте kodi.wiki, раздел плагины), затем идут переводы строк, состоящие из трех полей:
    • msgctxt  — ссылка на уникальный номер строки
    • msgid  — оригинальный текстовый идентификатор строки на английском языке
    • msgstr  — перевод значения msgid на национальный язык, в данном случае на русский (каталог Russian)

  • settings.xml — основной файл настроек плагина, описывает графическое меню свойств плагина, строковые параметры которого можно изменить, где:
    • id  — текстовый идентификатор ресурса
    • label  — уникальная числовая метка текстового поля (соответствует полю msgctxt в файле strings.po переводов)
    • type  — предопределенный тип ресурса (все возможные типы описаны на сайте kodi.wiki, раздел плагины)
    • default  — значение параметра по умолчанию (можно сбросить параметр в это значение с помощью одноименного меню Kodi)

  • resources/skins/default/1080i/kodi-universe.xml — конфигурационный xml файл
  • resources/skins/default/720p/kodi-universe.xml — конфигурационный xml файл, описывающий расположение управляющих элементов плагина (controls), их геометрию, общие размеры, позицию элементов, тип видимости и т.д. Имя конфигурации определяется в зависимости от режима видео адаптера (например 1080i или 720р)


содержимое Russian/strings.po
    # Kodi Media Center language file
    # Addon Name: Screensaver Kodi Universe
    # Addon id: screensaver.kodi.universe
    # Addon Provider: berserktv
    msgid ""
    msgstr ""
    "Project-Id-Version: Kodi Addons\n"
    "Report-Msgid-Bugs-To: alanwww1@kodi.org\n"
    "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: Kodi Translation Team\n"
    "Language-Team: English \
    (http://www.transifex.com/projects/p/xbmc-addons/language/en/)\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Language: en\n"
    "Plural-Forms: nplurals=2; plural=(n != 1);\n"

    msgctxt "#32001"
    msgid "Screensaver"
    msgstr "Хранитель экрана"

    msgctxt "#32002"
    msgid "Video file"
    msgstr "Видеофайл"

    msgctxt "#32003"
    msgid "Not Video"
    msgstr "Не запускать видео"
    

содержимое settings.xml
    
    
        
            
            
        
    
    


Медиа ресурсы плагина:

  • resources/skins/default/media/black.jpg — черный фон, которым заполняется экран, перед запуском видео
  • resources/skins/default/media/buran.jpg — футуристическое изображение космического корабля «Буран, на крыльях Мечты»
  • resources/skins/default/media/kodi-universe.mkv — основной видео файл, который циклически проигрывается плагином, до наступления события пробуждения


Корневой конфигурационный файл плагина — addon.xml


Addon.xml — является основным конфигурационным файлом плагина, из которого Kodi берет всю необходимую информацию для запуска плагина и его интеграции в работу мультимедиа центра.

содержимое addon.xml
    
    
        
            
        
        
        
            all
            https://github.com/berserktv/screensaver.kodi.universe
            
            Kodi Universe
            Вселенная Коди
            Screensaver - Kodi Universe  
            Хранитель экрана - Вселенная Коди
            GNU GENERAL PUBLIC LICENSE. Version 2, June 1991
        
    
    


Основными параметрами плагина являются:

  • Секция addon
    • id  — уникальный текстовый идентификатор плагина
    • name  — название плагина
    • version  — версия плагина
    • provider-name  — имя провайдера плагина

  • Секция requires  — зависимости
    в этой секции указываются модули от которых зависит работа данного плагина
  • Секция extension  — расширений
    в этой секции (их может быть несколько) указывается тип плагина,
    основная точка входа в плагин:
    point=«xbmc.ui.screensaver» library=«screensaver.py»

    в нашем случае плагин является «Хранителем экрана», которому передается
    управление с помощью вызова python скрипта с именем «screensaver.py»

    так же в секции расширений может быть указана point=«xbmc.addon.metadata»
    с типом платформы на которой плагин может работать, названием и описанием плагина
    на определенном языке/языках, а также тип ЛИЦЕНЗИИ плагина
    Общее количество метаданных, которые можно указать в этой секции extension может быть
    достаточно большим и более подробную информацию вы можете найти на сайте
    kodi.tv


Реализация плагина


Так как плагин должен быть предельно простым и понятным, то в его реализации я ограничусь одним основным файлом исходного кода screensaver.py, размещенным в корневом каталоге screensaver (а)

Для того, чтобы python скрипт вызывался, я прописал его в файле addon.xml, см. секцию выше

Язык программирования Python достаточно гибкий, он позволяет одно и тоже действие выполнить несколькими способами, и для наглядности я буду использовать объектно-ориентированный подход с классами.

содержимое screensaver.py
    # -*- coding: utf-8 -*-
    # Plugin for Kodi mediacenter
    # Kodi Universe - Very Simple Screensaver
    # GNU GENERAL PUBLIC LICENSE. Version 2, June 1991

    import os
    import sys
    import xbmc
    import urllib
    import xbmcgui
    import xbmcaddon

    __id__ = 'screensaver.kodi.universe'
    __addon__ = xbmcaddon.Addon(id=__id__)
    __path__ = __addon__.getAddonInfo('path')
    def_video_url = __path__+'/resources/skins/default/media/kodi-universe.mkv'

    class BsPlaylist:
        def __init__(self,):
            pass

        def getPlaylist(self,):
            try: xbmc.PlayList(1).clear()
            except: pass
            self.playlist = xbmc.PlayList(1)
            item = xbmcgui.ListItem("item1")
            self.playlist.add(__addon__.getSetting("videofile"),item)
            return self.playlist

    class BsPlayer(xbmc.Player):
        def __init__(self,):
            pass

        def onPlayBackStarted(self):
            xbmc.executebuiltin("PlayerControl(RepeatAll)")

        def onPlayBackStopped(self):
            return


    class Screensaver(xbmcgui.WindowXMLDialog):
        def __init__( self, *args, **kwargs ):
            pass

        def onInit(self):
            video_url = __addon__.getSetting("videofile")
            if (video_url == ""):
                video_url = def_video_url
                __addon__.setSetting("videofile", video_url)
            if (__addon__.getSetting("not-video") == "true" \
                          or not os.path.isfile(video_url) ):
                return

            li = BsPlaylist()
            self.vpl = li.getPlaylist()
            if self.vpl:
                xbmc.sleep(2000)
                self.getControl(1).setImage("black.jpg")
                self.player = BsPlayer()
                if not xbmc.getCondVisibility("Player.HasMedia"):
                    self.player.play(self.vpl,windowed=True)

        def onAction(self,action):
            try: xbmc.PlayList(1).clear()
            except: pass
            try: xbmc.Player().stop()
            except: pass
            try: self.close()
            except: pass


    if __name__ == '__main__':
        scr = Screensaver(
            'kodi-universe.xml',
            __path__,
            'default',
            '',
        )
        scr.doModal()
        del scr
    


class Screensaver (xbmcgui.WindowXMLDialog)


Основной класс хранителя экрана

В Python Kodi API входят несколько базовых модулей: xbmc, xbmcgui, xbmcplugin, xbmcaddon и xbmcvfs. Для работы с графическим интерфейсом Kodi я буду использовать модуль xbmcgui. Этот модуль содержит классы, отвечающие за разные элементы интерфейса

Для создания диалогового окна плагина со своим интерфейсом описанным в конфигурационном xml файле используется класс xbmcgui.WindowXMLDialog

содержимое kodi-universe.xml
    
    
        
            
                Background image
                0
                0
                FF555555
                scale
                1920
                1080
                buran.jpg
            
            
                VideoWindow
                0
                0
                1920
                1080
                true
            
        
    
    


Конфигурационный XML файл описывает два управляющих элемента:

Первый с идентификатором — 1, представляет собой фоновое изображение — «Буран, на крыльях Мечты», определенных размеров, выровненное по центру экрана.

Второй элемент с идентификатором — 2, является окном для проигрывания Видео, с признаком видимости и определенными геометрическими размерами.

Класс Screensaver наследуется от класса WindowXMLDialog, и имеет три метода:

  • Конструктор __init__ метод вызывается автоматически при создании объекта
  • Метод onInit — графической инициализации, вызывается перед первым отображением окна
  • Метод onAction — метод обработки событий, вызывается при наступлении определенных событий, в данном случае при наступлении события пробуждения, т.е. нажатия кнопки мыши, клавиатуры, перемещении указателя мыши или прихода любого события от пульта управления.


Класс Screensaver использует два вспомогательных класса:

  • Класс BsPlayer — наследуемого от стандартного XBMC класса видео проигрывателя xbmc.Player, класс содержит три метода:
    1. Конструктор __init__ метод вызывается автоматически при создании объекта
    2. Переопределение метода начала проигрывания видео onPlayBackStarted
    3. Переопределение метода окончания проигрывания видео onPlayBackStopped

      Примечание: так как я переопределил метод остановки проигрывания и он пустой,
      то сработает правило: Don’t Stop Let’s Go


  • Класс BsPlaylist — класс списка предназначенный для возврата объекта xbmc.PlayList
    класс содержит два метода:
    1. Конструктор __init__ метод вызывается автоматически при создании объекта
    2. Метод getPlaylist для определения списка воспроизведения, используется стандартный список XBMC — xbmc.PlayList


Общий алгоритм работы Screensaver (а) следующий:

  1. При наступлении события вызова Screensaver (a) — отсутствие активности пользователя указанное количество минут и отсутствие активного видео/аудио воспроизведения, Kodi передает управление скрипту screensaver.py
  2. На основе конфигурационного xml файла создается основное графическое окно плагина. При инициализации графического окна загружаются строковые ресурсы настроек плагина (меню — «настройки»).


В случае если видео файл не указан
__addon__.getSetting («videofile»)

он заполняется параметром по умолчанию
video_url = def_video_url
__addon__.setSetting («videofile», video_url)

в случае отсутствия флага — «отключения видео воспроизведения»
__addon__.getSetting («not-video»)

происходит показ футуристического изображения «Буран на крыльях Мечты» в течении двух секунд
xbmc.sleep (2000)

далее по идентификатору элемента управления 1, устанавливается черное изображение фона
self.getControl (1).setImage («black.jpg»)

и затем запускается XBMC видео проигрыватель со списком воспроизведения из одного файла
self.player.play (self.vpl, windowed=True)

Видео файл проигрывается по кругу, до того момента, пока не наступит
событие просыпания т.е. любое активное действие пользователя

Создание визуализации для плагина Kodi в Ubuntu


Примечание:
Все инструкции описанные ниже я буду запускать под операционной системой Linux, а именно дистрибутивом Ubuntu

также возможно выполнить описанные ниже действия в Debian совместимой операционной системе — главным условием запуска будет наличие в системе пакетного менеджера Apt , т.е. менеджера позволяющего установить в системе программное обеспечение в формате Deb. Конечно указанные ниже действия вы можете выполнить в любой Linux системе, но это потребует от вас дополнительных действий и возможно изменение последовательности некоторых команд (как пример: установка RPM пакетов вместо Deb и т.п.)

Gource — очень интересный и завораживающий проект. Gource назван по аналогии с source т.е. исходный код + G (Графика). Это приложение позволяет визуализировать историю изменений в системе контроля версий. Gource нативно понимает Git, для остальных систем например SVN, Mercurial существуют конвертеры, которые позволяют преобразовать базу хранения в Git Формат.

Gource — отрисовывает невероятно красиво при помощи OpenGL, и имеет большое количество параметров для своей работы. Вот этот невероятно мощный инструмент для генерации «Феерической» визуализации я и буду использовать.

Для создания визуализации мне потребуется некоторая последовательность команд описанных в bash скрипте

Для генерации видео мне потребуются две основные программы:
Gource — для создания исходного видео файла по Git истории любого указанного проекта
FFmpeg — библиотека для кодирования и декодирования видео и аудио

Скрипт для генерации видео файла плагина


содержимое create.sh
    #!/bin/bash
    # This is script of the generation video from "Gource".
    #
    # project: Screensaver Kodi Universe (https://berserk.tv)
    # This script creates a ZIP archive of a Kodi screensaver.
    # GNU GENERAL PUBLIC LICENSE. Version 2, June 1991
    # 
    # скрипт запускается под обычным пользователем,
    # но вначале своего выполнения требует установки пакетов 
    # git zip ffmpeg gource с помощью команды sudo

    OUT_DIR="output"
    OUT="kodi-universe.mkv"
    NAME_PROJ="screensaver.kodi.universe"
    MEDIA_PATH="${NAME_PROJ}/resources/skins/default/media"
    NAME_REP="https://github.com/berserktv/${NAME_PROJ}.git"

    GSFILE="output.ppm"
    SECONDS_PER_DAY="1"
    GOURCE_FRAME_RATE="30"
    RESOLUTION="-1920x1080"
    CODEC_OUT_FRAME_RATE="25"

    # -vcodec  -  кодек для кодирования видео потока, 
    #  libx264    в настоящий момент наиболее современный и быстрый кодек (h.264)
    # -profile -  профиль для кодека (baseline, main, high, 
    #                                 high10, high422, high444)
    # -pix_fmt -  установка пиксельного формата (yuv420p, yuv422p, yuv444p)
    FFPARAM="-vcodec libx264 -profile:v high422 -pix_fmt yuv420p"
    GSPARAM1="--camera-mode track ${RESOLUTION} --stop-position 1.0 \
              --seconds-per-day ${SECONDS_PER_DAY}"

    GSPARAM2="--git-branch origin/master --multi-sampling \
              --stop-at-end --hide-filenames"

    GSPARAM3="--highlight-users --file-idle-time 13 --max-files 0 --hide date"
    GSPARAM4="--title Kodi --bloom-multiplier 1.0 --bloom-intensity 1.0"

    VIS="visualize"
    # GIT адрес проекта по которому буду создавать визуализацию работы
    GIT_REP="https://github.com/xbmc/xbmc.git"
    # arg1 - визуализация любого git проекта, 
    #        который можно задать первым аргументом в командной строке
    # example: ./create.sh "https://github.com/facebook/react.git"
    if [ -n "$1" ]; then GIT_REP="$1"; fi

    # установка пакетов git zip ffmpeg и gource
    packages="git zip ffmpeg gource"
    for i in $packages; do
      if ! dpkg -s $i | grep -q "install ok installed"; then 
        sudo apt-get install -y $i; 
      fi
    done 

    # очистка выходного каталога
    test -d ${OUT_DIR} && rm -rf ${OUT_DIR}
    test -d ${OUT_DIR} || mkdir -p ${OUT_DIR}

    cd ${OUT_DIR}
    # загружаю Screensaver и GIT проект, для визуализации 
    if ! git clone ${NAME_REP} ${NAME_PROJ}; then 
      echo "Error, not load ${NAME_REP}, exit ..."; exit 1; 
    fi

    if ! git clone ${GIT_REP} ${VIS};        then 
      echo "Error, not load ${GIT_REP},  exit ..."; exit 2; 
    fi


    # генерация видео для Screensaver(a)
    gource ${VIS} ${GSPARAM1} ${GSPARAM2} ${GSPARAM3} ${GSPARAM4} \
          --output-framerate ${GOURCE_FRAME_RATE} --output-ppm-stream ${GSFILE}
          
    ffmpeg -y -r ${GOURCE_FRAME_RATE} -f image2pipe -vcodec ppm \
          -i ${GSFILE} ${FFPARAM} -r ${CODEC_OUT_FRAME_RATE} ${OUT} && sync

    mv -f ${OUT} ${MEDIA_PATH}
    rm -f ${GSFILE}

    # секция работы с архивом
    # удаляю служебную GIT информацию из проекта screensaver(а)
    test -d ${NAME_PROJ}/.git &&  rm -fr ${NAME_PROJ}/.git
    zip -r ${NAME_PROJ}.zip ${NAME_PROJ}
    


Скрипт должен выполняться под обычным пользователем, но в процессе запуска скрипт требует установки следующих программ «git zip ffmpeg gource»

В случае их отсутствия скрипт попытается их установить с помощью команды повышения привилегий — sudo.

Вкратце скрипт выполняет следующее:

  • Загружает из Интернета два проекта c Github.
    Первый проект — сам Screensaver
    Второй проект — XBMC (Kodi)

    в случае указания аргумента в командной строки представляющего собой Git путь, можно загрузить любой Git проект для визуализации, пример загрузки другого Git проекта:

    ./create.sh https://github.com/facebook/react.git

    в данном случае я беру для визуализации всем известный движок «Facebook» — React
  • Запускает программу Gource c аргументами командной строки, для генерации видео фрагментов в несжатом формате PPM.
    Генерация видео будет происходить до тех пор, пока пользователь не закроет окно Gource мышкой (нажатие на крестик) или же пока пользователь не нажмет клавишу ESC
    Примечание:
    Не рекомендую вам генерировать видео длительностью больше трех минут, так как это может занять достаточно длительное время и потребует от вас для хранения более 30 Гбайт свободного места на жестком диске. Одна минута изображений с разрешением 1920×1080 (FullHD) и частотой 30 кадров в секунду требует порядка 10 Gбайт на жестком диске. Это временный файл, и после генерации правильного MKV видео контейнера (кодек h.264) с помощью FFmpeg, этот файл удаляется и остается результирующий файл, который занимает 20 Мбайт на одну минуту видео FullHD c частотой 25 кадров в секунду.

    C теми настройками Gource, которые использует скрипт вы получаете возможность выбора любого временного участка с начала разработки проекта по настоящее время, за это отвечает линейная шкала внизу Gource окна. Вы можете мышкой выбрать любое время, при этом визуализация начинается с этого момента т.е. все предыдущие объекты на экране исчезают, это делает видео более динамическим.



  • Запускает программу FFmpeg cо списком аргументов для создания MKV контейнера из исходного набора изображений Gource;
  • Создает конечный Zip архив с проектом Screensaver (а) и сгенерированным видео файлом;


Параметры Gource


  • 01 --camera-mode track режим работы камеры
    (отслеживает текущих активных пользователей)
  • 02 --stop-position 1.0 конечная позиция
    (задает конечную позицию для воспроизведения, диапазон от 0.0 до 1.0)
  • 03 --seconds-per-day 1 количество дней в секунде видео
    (параметр определяет, какое количество работы вы увидите в интервале одной секунды видео)
  • 04 --git-branch origin/master рабочая ветка проекта
  • 05 --stop-at-end остановиться после завершения git журнала
  • 06 --multi-sampling включение сглаживания
  • 07 --hide-filenames убирать названия файлов
  • 08 --highlight-users подсвечивать названия пользователей
  • 09 --file-idle-time 13 время простоя для файла
    (количество времени, через которое имя файла снимается с индикации)
  • 10 --max-files 0 максимальное количество файлов
    (значение 0 снимает ограничение на количество отображаемых имен файлов)
  • 11 --hide date убирать дату, для которой показывается текущий кадр
  • 12 --title Kodi название, которое выводиться в левом нижнем углу видеозаписи
  • 13 --bloom-multiplier 1.0 управление эффектом «легкого цветения» с помощью радиуса.
  • 14 --bloom-intensity 1.0 управление эффектом «легкого цветения» с помощью интенсивности.
  • 15 --output-framerate 30 выходное количество кадров в секунду
  • 16 --output-ppm-stream name название выходного файла в формате PPM


примечание: некоторые параметры могут быть взаимоисключающими,
полный список параметров можно посмотреть здесь.

Краткая инструкция по созданию видео для Screensaver (а)

1) Загрузите проект с github:
    git clone https://github.com/berserktv/screensaver.kodi.universe.git
    


2) Сгенерируйте видео и создайте Zip архив плагина:
    cd screensaver.kodi.universe
    chmod u+x create.sh
    ./create.sh
    


3) Время генерации видео и использование свободного места на диске:
    Время генерации зависит от количества минут.
    Могу порекомендовать делать видео заставку продолжительностью
    не более трех минут - что займет примерно 20 минут 
    на перекодировку из формата Gource (PPM) в формат MKV видео
    контейнера с помощью утилиты FFmpeg.
    (используется кодек h.264)

    Также замечу, что размер Git базы XBMC (Kodi) занимает более 700 Мбайт
    и время загрузки зависит от вашей скорости подключения к сети 
    Интернет.

    Размер временного видео файла в формате PPM занимает порядка 
    10Гбайт на одну минуту видео (формат FullHD, 30 кадров в секунду).
    


4) Установите screensaver в Kodi
    Вы можете установить "Хранитель" экрана в Kodi
    (для этого требуется разрешить установку дополнений из других источников)
    Выбрав меню Kodi - "Дополнения" => "Браузер дополнений" 
                                    => "Установка Zip архива"
    После успешной установки, необходимо 
    активировать хранитель экрана Kodi Universe
    в общем списке Screensaver(ов), так как их там несколько.
    меню Settings (значок шестеренки) => "Настройки интерфейса"
                                      => "Заставка"
    

© Habrahabr.ru