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.
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 .WindowXMLDialogContenido 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:
- El constructor __init__ método se llama automáticamente cuando se crea el objeto
- Anulación del método de inicio de video onPlayBackStarted
- 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:
- El constructor __init__ método se llama automáticamente cuando se crea el objeto
- 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:
- 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
- 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 UbuntuTambié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
bashPara 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
El script debe ejecutarse como un usuario normal, pero durante el inicio requiere la instalación de los siguientes programas
git zip ffmpeg gourceSi están ausentes, el script intentará instalarlos usando el
comando de escalado de privilegios -
sudo .
En resumen, el script hace lo siguiente:
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 ( ) => " " => ""