Protector de pantalla encantador para Kodi

imagen alt

Asignación de un protector de pantalla a Kodi


El proyecto está diseñado para crear un protector de pantalla "Encantador" con una cantidad mínima de código fuente en Python. El proyecto es el complemento más simple para el centro multimedia Kodi.

El proyecto muestra cómo puede crear un protector de pantalla muy hermoso basado completamente en el trabajo de la comunidad "OpenSource". Un proyecto de integración, este es un ejemplo de escritura de dos componentes independientes, cada uno de los cuales toma alrededor de 80 líneas de código. El primer componente es un generador de contenido, script de shell, el segundo componente es un complemento del centro multimedia Kodi, que es responsable de mostrar el contenido.

Y, por último, si usted es un programador y utiliza el sistema de control de versiones Git, puede visualizar su trabajo, escribirlo en un archivo de video y disfrutar del resultado en un televisor o pantalla de computadora, recostándose en su silla con una taza de café. Y en las frescas noches de otoño, puede dormir tranquilamente bajo su protector de pantalla, sin olvidar configurar el temporizador de apagado del dispositivo en Kodi.

Preámbulo


Puedes mirar interminablemente tres cosas:
cómo arde el fuego, cómo fluye el agua y cómo trabajan otras personas.

Dado que el complemento está escrito para el "Centro Multimedia Kodi", visualizaré el trabajo del súper equipo de "Programadores Kodi".

Usando complementos en Kodi


El Centro Multimedia Kodi es un programa muy potente y flexible, que trabaja en conjunto con la biblioteca externa ffmpeg, para decodificar archivos de audio y video.

Para crear una aplicación de terceros, Kodi utiliza el mecanismo de extensión de "complementos" o simplemente complementos. Para crear mi propio complemento, necesito algunas habilidades y un poco de conocimiento del lenguaje de programación Python.

El mecanismo del complemento Kodi es extremadamente flexible y conveniente. Python es un lenguaje interpretado, lo que significa que no necesito compilar nada, compilarlo en un paquete de software separado, sufrir archivos de compilación como "makefile", etc.

Para la distribución final del complemento Kodi, simplemente empáquelo en el archivo Zip, observando algunas reglas en la estructura del directorio. Con el archivo Zip final a la mano, se puede instalar en cualquier dispositivo en el que trabaje Kodi: una computadora, tableta y, finalmente, un televisor (es decir, un montón de TV + placa única), especificando el archivo como una fuente de complemento.

Estructura del complemento Kodi


 └── screensaver.kodi.universe
     ├── README.md
     ├── addon.xml
     ├── changelog.txt
     ├── create.sh
     ├── fanart.jpg
     ├── icon.png
     ├── recursos
     │ ├── idioma
     │ │ ├── inglés
     │ │ │ └── strings.po
     │ │ └── ruso
     │ │ └── strings.po
     │ ├── settings.xml
     │ └── pieles
     │ └── predeterminado
     │ ├── 720p
     │ │ └── kodi-universe.xml
     │ ├── 1080i
     │ │ └── kodi-universe.xml
     │ └── medios
     │ ├── black.jpg
     │ ├── buran.jpg
     │ └── kodi-universe.mkv
     └── screensaver.py


  • README.md - archivo opcional, contiene una descripción del proyecto para github.com
  • Complemento
  • changelog.txt: un archivo opcional con una lista de cambios del proyecto
  • create.sh es un archivo opcional, un script bash está diseñado para crear un protector de pantalla de archivo Zip (a) y generar un archivo de video desde el historial de Git usando la herramienta Gource, el archivo no tiene relación con el complemento Kodi en sí, es necesario para una distribución conveniente del complemento. Es totalmente autónomo, es decir teniendo solo este archivo, siempre puede crear un archivo Zip completo del complemento (si tiene una conexión a Internet).
  • fanart.jpg - imagen de fondo del complemento
  • icon.png - el icono principal
  • recursos - directorio con recursos de complementos
  • screensaver.py: el archivo principal del complemento, contiene todo el código fuente del complemento en Python, el nombre del archivo puede ser cualquier cosa, lo principal es que este nombre está escrito en el archivo addon.xml

Descripción de los recursos del complemento


El directorio de recursos contiene los siguientes archivos:

  • language / English / strings.po - cadenas de interfaz de plugin originales en inglés
  • language / Russian / strings.po - traducción al ruso, el archivo está incluido en el mecanismo estándar de Kodi para traducir el contenido a los idiomas nacionales de los países, el comienzo del archivo contiene un encabezado de texto estándar de varias líneas (se puede encontrar un ejemplo en el sitio web kodi.wiki , sección de complementos) , luego hay saltos de línea que constan de tres campos:

    • msgctxt : enlace a un número de línea único
    • msgstr - identificador de cadena de texto original en inglés
    • msgstr - traducción del valor de msgid al idioma nacional, en este caso, al ruso (directorio ruso)

  • settings.xml: el archivo principal de la configuración del complemento, describe el menú gráfico de las propiedades del complemento, cuyos parámetros de cadena se pueden cambiar, donde:

    • id : identificador de recurso de texto
    • etiqueta : una etiqueta numérica única para el campo de texto (corresponde al campo msgctxt en el archivo de traducciones strings.po)
    • tipo : un tipo de recurso predefinido (todos los tipos posibles se describen en el sitio web kodi.wiki , sección de complementos)
    • predeterminado : el valor predeterminado del parámetro (puede restablecer el parámetro a este valor utilizando el menú Kodi del mismo nombre)

  • resources / skins / default / 1080i / kodi-universe.xml - archivo de configuración xml
  • resources / skins / default / 720p / kodi-universe.xml: archivo de configuración xml que describe la ubicación de los controles del complemento (controles), su geometría, tamaños generales, posición de los elementos, tipo de visibilidad, etc. El nombre de la configuración se determina según el modo del adaptador de video (por ejemplo, 1080i o 720p)

contenido de ruso / 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 "  " 



contenido de settings.xml
  <?xml version="1.0" encoding="utf-8" standalone="yes"?> <settings height="800"> <category label="32001"> <setting id="videofile" label="32002" type="video"/> <setting id="not-video" type="bool" \ label="32003" default="false"/> </category> </settings> 


Recursos multimedia del complemento:

  • resources / skins / default / media / black.jpg: fondo negro que llena la pantalla antes de comenzar el video
  • resources / skins / default / media / buran.jpg - imagen futurista de la nave espacial "Buran, en las alas de un sueño"
  • resources / skins / default / media / kodi-universe.mkv: el archivo de video principal que se reproduce cíclicamente por el complemento hasta el evento de despertar

Archivo de configuración raíz del complemento - addon.xml


Addon.xml: es el archivo de configuración principal del complemento, del cual Kodi toma toda la información necesaria para iniciar el complemento e integrarlo en el centro multimedia.

contenido addon.xml
  <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="screensaver.kodi.universe" name="Kodi Universe" \ version="0.1.2" provider-name="berserktv"> <requires> <import addon="xbmc.python" version="2.7"/> </requires> <extension point="xbmc.ui.screensaver" library="screensaver.py" /> <extension point="xbmc.addon.metadata"> <platform>all</platform> <source>https://github.com/berserktv/screensaver.kodi.universe </source> <summary lang="en">Kodi Universe</summary> <summary lang="ru"> </summary> <description lang="en">Screensaver - Kodi Universe </description> <description lang="ru">  -  </description> <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license> </extension> </addon> 


Los principales parámetros del complemento son:

  • Sección de complementos
    • id : identificador de texto único del complemento
    • nombre - nombre del complemento
    • version - versión del complemento
    • nombre-proveedor - nombre del proveedor del complemento

  • Requiere sección - dependencias
    en esta sección, los módulos de los que depende el funcionamiento de este complemento
  • Sección de extensión - extensiones
    en esta sección (puede haber varias), se indica el tipo de complemento,
    punto de entrada principal al complemento:
    point = "xbmc.ui.screensaver" library = "screensaver.py"

    en nuestro caso, el complemento es el "protector de pantalla" al que se transmite
    control llamando a un script de Python llamado "screensaver.py"

    point = "xbmc.addon.metadata" también se puede especificar en la sección de extensiones
    con el tipo de plataforma en la que puede funcionar el complemento, el nombre y la descripción del complemento
    en un idioma / idiomas en particular, así como el tipo de complemento de LICENCIA
    La cantidad total de metadatos que se puede especificar en esta sección de extensión puede ser
    Puede encontrar suficiente información grande y más detallada en el sitio web
    kodi.tv

Implementación de complementos


Dado que el complemento debe ser extremadamente simple y directo, en su implementación me limitaré a un archivo fuente principal screensaver.py ubicado en el directorio raíz del protector de pantalla (a)

Para que se invoque el script de Python, lo registré en el archivo addon.xml, consulte la sección anterior

El lenguaje de programación Python es bastante flexible, le permite realizar la misma acción de varias maneras, y para mayor claridad, utilizaré el enfoque orientado a objetos con las clases.

screensaver.py content
  # -*- 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 


protector de pantalla de clase (xbmcgui.WindowXMLDialog)


La clase principal del protector de pantalla.

La API de Python Kodi incluye varios módulos principales: xbmc, xbmcgui, xbmcplugin, xbmcaddon y xbmcvfs . Para trabajar con la GUI de Kodi, usaré el módulo xbmcgui. Este módulo contiene clases responsables de diferentes elementos de la interfaz.

Para crear un cuadro de diálogo de complemento con su interfaz descrita en el archivo de configuración xml, se utiliza la clase xbmcgui .WindowXMLDialog

Contenido de kodi-universe.xml
  <?xml version="1.0" encoding="utf-8" standalone="yes"?> <window type="window"> <controls> <control type="image" id="1"> <description>Background image</description> <posx>0</posx> <posy>0</posy> <colordiffuse>FF555555</colordiffuse> <aspectratio scalediffuse="false" align="center" \ aligny="center">scale</aspectratio> <width>1920</width> <height>1080</height> <texture>buran.jpg</texture> </control> <control type="videowindow" id="2"> <description>VideoWindow</description> <posx>0</posx> <posy>0</posy> <width>1920</width> <height>1080</height> <visible>true</visible> </control> </controls> </window> 


El archivo XML de configuración describe dos elementos de control:

La primera con el identificador - 1 , es una imagen de fondo - "Tormenta de nieve, en las alas de un sueño", de ciertos tamaños, alineada al centro de la pantalla.

El segundo elemento con identificador - 2 , es una ventana para reproducir el video, con un signo de visibilidad y ciertas dimensiones geométricas.

La clase Screensaver hereda de la clase WindowXMLDialog y tiene tres métodos:

  • El constructor __init__ método se llama automáticamente cuando se crea el objeto
  • OnInit : método de inicialización gráfica, llamado antes de la primera ventana de visualización
  • El método onAction es un método de procesamiento de eventos que se llama cuando ocurren ciertos eventos, en este caso, cuando ocurre un evento de despertar, es decir, haciendo clic en el botón del mouse, el teclado, moviendo el puntero del mouse o la llegada de cualquier evento desde el panel de control.

La clase Screensaver usa dos clases auxiliares:

  • Clase BsPlayer : heredada de la clase de reproductor de video XBMC estándar xbmc.Player , la clase contiene tres métodos:
    1. El constructor __init__ método se llama automáticamente cuando se crea el objeto
    2. Anulación del método de inicio de video onPlayBackStarted
    3. Anulación del método de finalización de video onPlayBackStopped

      Nota: como redefiní el método para detener la reproducción y está vacío,
      entonces la regla funcionará: no pares, vamos

  • Class BsPlaylist : una clase de lista diseñada para devolver un objeto xbmc.PlayList
    la clase contiene dos métodos:

    1. El constructor __init__ método se llama automáticamente cuando se crea el objeto
    2. El método getPlaylist para definir una lista de reproducción utilizando la lista XBMC estándar: xbmc.PlayList

El algoritmo general de Screensaver (a) es el siguiente:

  1. Cuando se produce el evento de llamada Screensaver (a): la inactividad del usuario durante el número especificado de minutos y la ausencia de reproducción activa de video / audio, Kodi transfiere el control al script screensaver.py
  2. Basado en el archivo de configuración xml, se crea la ventana gráfica principal del complemento. Cuando se inicializa la ventana gráfica, se cargan los recursos de cadena de la configuración del complemento (el menú es "configuración").

Si no se especifica el archivo de video
__addon __. getSetting ("videofile")

se rellena con un parámetro predeterminado
video_url = def_video_url
__addon __. setSetting ("videofile", video_url)

si no hay bandera - "deshabilitar reproducción de video"
__addon __. getSetting ("no-video")

la imagen futurista "Tormenta de nieve en las alas del sueño" se muestra durante dos segundos
xbmc.sleep (2000)

luego, por el identificador del control 1, una imagen de fondo negra
self.getControl (1) .setImage ("black.jpg")

y luego el reproductor de video XBMC comienza con una lista de reproducción de un solo archivo
self.player.play (self.vpl, windowed = True)

El archivo de video se reproduce en círculo hasta el momento en que llega
evento de vigilia, es decir cualquier acción activa del usuario

Crear visualizaciones para el complemento Kodi en Ubuntu


Nota:
Todas las instrucciones descritas a continuación las ejecutaré bajo el sistema operativo Linux, es decir, la distribución de Ubuntu

También es posible realizar los pasos descritos a continuación en un sistema operativo compatible con Debian: la condición principal para el lanzamiento será la presencia del administrador de paquetes Apt en el sistema, es decir Un administrador que le permite instalar el software Deb en el sistema. Por supuesto, puede realizar los siguientes pasos en cualquier sistema Linux, pero esto requerirá pasos adicionales de usted y posiblemente cambiar la secuencia de algunos comandos (como un ejemplo: instalar paquetes RPM en lugar de Deb, etc.)

Gource es un proyecto muy interesante y fascinante. Gource lleva el nombre de la fuente, es decir código fuente + G (Gráficos). Esta aplicación le permite visualizar el historial de cambios en el sistema de control de versiones. Gource entiende de forma nativa a Git, para otros sistemas como SVN, Mercurial hay convertidores que le permiten convertir la base de almacenamiento en formato Git.

Gource : se vuelve increíblemente hermoso con OpenGL y tiene una gran cantidad de parámetros para su trabajo. Esta herramienta increíblemente poderosa para generar la visualización "Encantadora" que usaré.

Para crear una visualización, necesito una secuencia de comandos descritos en un script bash

Para generar el video, necesito dos programas principales:
Fuente : para crear el archivo de video fuente para el historial de Git de cualquier proyecto especificado
FFmpeg : una biblioteca para codificar y decodificar video y audio

Script para generar un archivo de video de complemento


contenido de 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} 


El script debe ejecutarse como un usuario normal, pero durante el inicio requiere la instalación de los siguientes programas git zip ffmpeg gource

Si están ausentes, el script intentará instalarlos usando el comando de escalado de privilegios - sudo .

En resumen, el script hace lo siguiente:

  • Descarga dos proyectos de Internet con Github.
    El primer proyecto es Screensaver en sí.
    Segundo proyecto - XBMC (Kodi)

    Si especifica un argumento en la línea de comando que representa una ruta Git, puede cargar cualquier proyecto Git para su visualización, un ejemplo de cómo cargar otro proyecto Git:

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

    en este caso, tomo el famoso motor de Facebook para visualización - Reaccionar
  • Ejecuta el programa Gource con argumentos de línea de comandos para generar fragmentos de video en formato PPM sin comprimir.
    El video se generará hasta que el usuario cierre la ventana Gource con el mouse (haciendo clic en la cruz) o hasta que el usuario presione la tecla ESC

    Nota:
    No recomiendo que genere un video de más de tres minutos , ya que esto puede llevar un tiempo suficientemente largo y requerir que almacene más de 30 GB de espacio libre en su disco duro. Un minuto de imágenes con una resolución de 1920 × 1080 (FullHD) y una frecuencia de 30 cuadros por segundo requiere aproximadamente 10 GB de espacio en el disco duro. Este es un archivo temporal, y después de generar el contenedor de video MKV correcto (códec h.264) usando FFmpeg, este archivo se elimina y el archivo resultante permanece, lo que toma 20 MB por un minuto de video FullHD a 25 cuadros por segundo.

    Con esas configuraciones de Gource que usa el script, tiene la oportunidad de seleccionar cualquier sección de tiempo desde el comienzo del proyecto hasta el presente, la escala lineal en la parte inferior de la ventana de Gource es responsable de esto. Puede usar el mouse para seleccionar en cualquier momento, y la visualización comienza desde este momento, es decir todos los objetos anteriores en la pantalla desaparecen, esto hace que el video sea más dinámico.


  • Inicia el programa FFmpeg con una lista de argumentos para crear un contenedor MKV a partir del conjunto de imágenes original de Gource;
  • Crea el archivo Zip final con el proyecto Screensaver (a) y el archivo de video generado;

Opciones de origen


  • 01 - modo cámara cámara modo pista
    (rastrea usuarios activos actuales)
  • 02 - posición final 1.0 posición final
    (establece la posición final para la reproducción, rango de 0.0 a 1.0)
  • 03 - segundos por día 1 número de días por segundo video
    (el parámetro determina cuánto trabajo verá en el intervalo de un segundo del video)
  • 04 - rama de trabajo de origen de rama git / proyecto maestro
  • 05 - parada al final después de que git log haya terminado
  • 06 - habilitación de suavizado de muestreo múltiple
  • 07: ocultar nombres de archivo eliminar nombres de archivo
  • 08 : los usuarios destacados resaltan los nombres de usuario
  • 09 : tiempo de inactividad del archivo inactivo 13 para archivo
    (la cantidad de tiempo después de la cual el nombre del archivo se elimina de la pantalla)
  • 10 --max-files 0 número máximo de archivos
    (un valor de 0 elimina el límite en el número de nombres de archivo mostrados)
  • 11 - ocultar fecha eliminar la fecha para la que se muestra el marco actual
  • 12 - título Kodi el nombre que aparece en la esquina inferior izquierda del video
  • 13 --bloom-multiplier 1.0 controla el efecto de "floración ligera" usando el radio.
  • 14 - la intensidad de floración 1.0 controla el efecto de "floración ligera" usando intensidad.
  • 15 - velocidad de fotogramas de salida 30 cuadros de salida por segundo
  • 16 - nombre del archivo de salida de salida -ppm-stream en formato PPM

nota: algunos parámetros pueden ser mutuamente excluyentes,
Puede encontrar una lista completa de parámetros aquí .

Breve video tutorial para Screensaver (a)



1) Descargue el proyecto desde github:
  git clone https://github.com/berserktv/screensaver.kodi.universe.git 


2) Genere un video y cree un archivo Zip del complemento:
  cd screensaver.kodi.universe chmod u+x create.sh ./create.sh 


3) Tiempo de generación de video y uso de espacio libre en disco:
       .           -    20      Gource (PPM)   MKV      FFmpeg. (  h.264)  ,   Git  XBMC (Kodi)   700            .       PPM   10     ( FullHD, 30   ). 


4) Instalar protector de pantalla en Kodi
     ""   Kodi (        )   Kodi - "" => " " => " Zip "   ,     Kodi Universe    Screensaver(),     .  Settings ( ) => " " => "" 

Source: https://habr.com/ru/post/466067/


All Articles