Attribuer un économiseur d'écran à Kodi
Le projet est conçu pour créer un économiseur d'écran
"Enchanting" avec une quantité minimale de code source en Python. Le projet est le plugin le plus simple pour le centre multimédia Kodi.
Le projet montre comment créer un très beau économiseur d'écran entièrement basé sur le travail de la communauté "OpenSource". Un projet d'intégration, c'est un exemple d'écriture de deux composants indépendants, chacun prenant environ 80 lignes de code. Le premier composant est un générateur de contenu, un script shell, le deuxième composant est un plugin Kodi multimédia center, qui est responsable de l'affichage du contenu.
Et enfin, si vous êtes un programmeur et utilisez le système de contrôle de version Git, vous pouvez visualiser votre travail, l'écrire dans un fichier vidéo et profiter du résultat sur un écran de télévision ou d'ordinateur, en vous appuyant sur votre chaise avec une tasse de café. Et lors des fraîches soirées d'automne, vous pouvez dormir tranquillement sous votre économiseur d'écran, sans oublier de régler la minuterie de l'appareil dans Kodi.
Préambule
Vous pouvez sans cesse regarder trois choses:
comment le feu brûle, comment l'eau coule et comment les autres travaillent.Puisque le plugin est écrit pour le "Kodi Multimedia Center", je vais donc visualiser le travail de la super équipe de "Kodi Programmers".
Utiliser des plugins dans Kodi
Le Kodi Multimedia Center est un programme très puissant et flexible, fonctionnant en conjonction avec la bibliothèque externe ffmpeg, pour décoder les fichiers audio et vidéo.
Pour créer une application tierce, Kodi utilise le mécanisme d'extension «addons» ou simplement des plug-ins. Pour créer mon propre plugin, j'ai besoin de quelques compétences et d'un peu de connaissance du langage de programmation Python.
Le mécanisme du plugin Kodi est extrêmement flexible et pratique. Python est un langage interprété, ce qui signifie que je n'ai pas besoin de compiler quoi que ce soit, de le compiler dans un package logiciel séparé, de souffrir avec des fichiers de construction comme "makefile", etc.
Pour la distribution finale du plugin Kodi, il suffit de l'emballer dans l'archive Zip, en respectant certaines règles sur la structure du répertoire. Ayant la dernière archive Zip sous la main, elle peut être installée sur n'importe quel appareil sur lequel Kodi fonctionne: un ordinateur, une tablette et enfin un téléviseur (c'est-à -dire un tas de TV + une seule plaque), en spécifiant l'archive comme source de plug-in.
Structure du plugin Kodi
└── screensaver.kodi.universe
├── README.md
├── addon.xml
├── changelog.txt
├── create.sh
├── fanart.jpg
├── icon.png
├── ressources
│ ├── langue
│ │ ├── anglais
│ │ │ └── strings.po
│ │ └── russe
│ │ └── strings.po
│ ├── settings.xml
│ └── peaux
│ └── par défaut
│ ├── 720p
│ │ └── kodi-univers.xml
│ ├── 1080i
│ │ └── kodi-univers.xml
│ └── médias
│ ├── black.jpg
│ ├── buran.jpg
│ └── kodi-univers.mkv
└── screensaver.py
- README.md - fichier facultatif, contient une description du projet pour github.com
- addon.xml - un fichier avec une description du plugin; il contient le type de plugin, l'encodage, la version, les dépendances, le nom de l'auteur, etc.
- changelog.txt - un fichier optionnel avec une liste des modifications du projet
- create.sh est un fichier facultatif, un script bash est conçu pour créer un économiseur d'écran d'archive Zip (a) et générer un fichier vidéo à partir de l'historique Git à l'aide de l'outil Gource, le fichier n'a pas de relation avec le plugin Kodi lui-même, il est nécessaire pour une distribution pratique du plugin. Il est entièrement autonome, c'est-à -dire n'ayant que ce fichier, vous pouvez toujours créer une archive Zip complète du plugin (si vous avez une connexion Internet).
- fanart.jpg - image d'arrière-plan du plugin
- icon.png - l'icĂ´ne principale
- resources - répertoire avec les ressources du plugin
- screensaver.py - le fichier principal du plugin, contient tout le code source du plugin en Python, le nom du fichier peut être n'importe quoi, l'essentiel est que ce nom soit écrit dans le fichier addon.xml
Description des ressources du plugin
Le répertoire des ressources contient les fichiers suivants:
- language / English / strings.po - chaînes d'interface de plugin originales en anglais
- language / Russian / strings.po - traduction en russe, le fichier est inclus dans le mécanisme Kodi standard pour traduire le contenu dans les langues nationales des pays, le début du fichier contient un en-tête de texte standard de plusieurs lignes (un exemple peut être trouvé sur le site Web kodi.wiki , section plugins) , puis il existe des sauts de ligne composés de trois champs:
- msgctxt - lien vers un numéro de ligne unique
- msgstr - identifiant de la chaîne de texte d'origine en anglais
- msgstr - traduction de la valeur msgid dans la langue nationale, dans ce cas, en russe (répertoire russe)
- settings.xml - le fichier principal des paramètres du plugin, décrit le menu graphique des propriétés du plugin, dont les paramètres de chaîne peuvent être modifiés, où:
- id - identifiant de ressource texte
- label - une étiquette numérique unique pour le champ de texte (correspond au champ msgctxt dans le fichier de traductions strings.po)
- type - un type de ressource prédéfini (tous les types possibles sont décrits sur le site Web kodi.wiki , section plugins)
- default - la valeur par défaut du paramètre (vous pouvez réinitialiser le paramètre à cette valeur en utilisant le menu Kodi du même nom)
- resources / skins / default / 1080i / kodi-univers.xml - fichier de configuration xml
- resources / skins / default / 720p / kodi-univers.xml - fichier xml de configuration qui décrit l'emplacement des contrôles du plug-in (contrôles), leur géométrie, la taille globale, la position des éléments, le type de visibilité, etc. Le nom de la configuration est déterminé en fonction du mode de l'adaptateur vidéo (par exemple, 1080i ou 720p)
contenu de 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 " "
contenu 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>
Ressources média du plugin:- resources / skins / default / media / black.jpg - fond noir qui remplit l'écran avant de démarrer la vidéo
- resources / skins / default / media / buran.jpg - image futuriste du vaisseau spatial "Bourane, sur les ailes d'un rĂŞve"
- resources / skins / default / media / kodi-univers.mkv - le fichier vidéo principal qui est lu cycliquement par le plugin jusqu'à l'événement d'éveil
Fichier de configuration racine du plugin - addon.xml
Addon.xml - est le fichier de configuration principal du plugin, à partir duquel Kodi prend toutes les informations nécessaires pour lancer le plugin et l'intégrer dans le centre multimédia.
contenu 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>
Les principaux paramètres du plugin sont:
- Section complémentaire
- id - identifiant texte unique du plugin
- name - nom du plugin
- version - version plugin
- provider-name - nom du fournisseur du plugin
- Section requise - dépendances
dans cette section les modules dont dépend le fonctionnement de ce plug-in
- Section d' extension - extensions
dans cette section (il peut y en avoir plusieurs), le type du plugin est indiqué,
point d'entrée principal du plugin:
point = "xbmc.ui.screensaver" library = "screensaver.py"
dans notre cas, le plugin est le «Screen Saver» auquel il est transmis
contrôle en appelant un script python appelé "screensaver.py"
point = "xbmc.addon.metadata" peut également être spécifié dans la section extensions
avec le type de plateforme sur laquelle le plugin peut fonctionner, le nom et la description du plugin
dans une langue / des langues particulières, ainsi que le type de plugin LICENCE
La quantité totale de métadonnées pouvant être spécifiées dans cette section d'extension peut être
Vous pouvez trouver suffisamment d'informations volumineuses et plus détaillées sur le site Web
kodi.tv
Implémentation du plugin
Étant donné que le plugin doit être extrêmement simple et direct, dans sa mise en œuvre, je me limiterai à un fichier source principal screensaver.py situé dans le répertoire racine de screensaver (a)
Pour que le script python soit appelé, je l'ai enregistré dans le fichier addon.xml, voir la section ci-dessus
Le langage de programmation Python est assez flexible, il vous permet d'effectuer la même action de plusieurs façons, et pour plus de clarté, j'utiliserai l'approche orientée objet avec les classes.
économiseur d'écran de classe (xbmcgui.WindowXMLDialog)
La classe principale de l'économiseur d'écran
L'API Python Kodi comprend plusieurs modules principaux:
xbmc, xbmcgui, xbmcplugin, xbmcaddon et xbmcvfs . Pour travailler avec l'interface graphique Kodi, j'utiliserai le module xbmcgui. Ce module contient des classes responsables de différents éléments d'interface.
Pour créer une boîte de dialogue de plugin avec son interface décrite dans le fichier de configuration xml, la classe
xbmcgui est
utilisée.WindowXMLDialogContenu kodi-univers.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>
Le fichier de configuration XML décrit deux éléments de contrôle:
Le premier avec l'identifiant -
1 , est une image de fond - "Tempête de neige, sur les ailes d'un rêve", de certaines tailles, alignée au centre de l'écran.
Le deuxième élément avec l'identifiant -
2 , est une fenêtre de lecture de la vidéo, avec un signe de visibilité et certaines dimensions géométriques.
La classe Screensaver hérite de la classe WindowXMLDialog et possède trois méthodes:
- La méthode constructeur __init__ est appelée automatiquement lorsque l'objet est créé
- OnInit - méthode d'initialisation graphique, appelée avant la première fenêtre d'affichage
- La méthode onAction est une méthode de traitement d'événements qui est appelée lorsque certains événements se produisent, dans ce cas, lorsqu'un événement d'éveil se produit, c'est-à -dire en cliquant sur le bouton de la souris, le clavier, en déplaçant le pointeur de la souris ou l'arrivée de tout événement à partir du panneau de commande
La classe Screensaver utilise deux classes d'assistance:
- Classe BsPlayer - héritée de la classe standard de lecteur vidéo XBMC xbmc.Player , la classe contient trois méthodes:
- La méthode constructeur __init__ est appelée automatiquement lorsque l'objet est créé
- Substitution de la méthode de démarrage vidéo onPlayBackStarted
- Substitution de la méthode de fin de vidéo onPlayBackStopped
Remarque: depuis que j'ai redéfini la méthode d'arrêt de la lecture et qu'elle est vide,
alors la règle fonctionnera: N'arrêtons pas, allons-y
- Classe BsPlaylist - une classe de liste conçue pour renvoyer un objet xbmc.PlayList
la classe contient deux méthodes:
- La méthode constructeur __init__ est appelée automatiquement lorsque l'objet est créé
- La méthode getPlaylist pour définir une liste de lecture à l'aide de la liste XBMC standard - xbmc.PlayList
L'algorithme général de l'économiseur d'écran (a) est le suivant:
- Lorsque l'événement d'appel Screensaver se produit (a) - l'inactivité de l'utilisateur pendant le nombre spécifié de minutes et l'absence de lecture vidéo / audio active, Kodi transfère le contrôle au script screensaver.py
- Sur la base du fichier de configuration xml, la fenêtre graphique principale du plugin est créée. Lorsque la fenêtre graphique est initialisée, les ressources de chaîne des paramètres du plugin sont chargées (le menu est «paramètres»).
Si le fichier vidéo n'est pas spécifié
__addon __. getSetting ("fichier vidéo")il est rempli avec un paramètre par défaut
video_url = def_video_url__addon __. setSetting ("videofile", video_url)s'il n'y a pas d'indicateur - "désactiver la lecture vidéo"
__addon __. getSetting ("non-vidéo")l'image futuriste «Tempête de neige sur les ailes du rêve» est affichée pendant deux secondes
xbmc.sleep (2000)en outre par l'identifiant de la commande 1, une image de fond noir est définie
self.getControl (1) .setImage ("black.jpg")puis le lecteur vidéo XBMC commence par une liste de lecture à fichier unique
self.player.play (self.vpl, windowed = True)Le fichier vidéo est lu en cercle jusqu'au moment où il arrive
événement éveillé, c.-à -d. toute action utilisateur active
Création de visualisations pour le plugin Kodi dans Ubuntu
Remarque:
Toutes les instructions décrites ci-dessous seront exécutées sous le système d'exploitation Linux, à savoir la distribution UbuntuIl est également possible d'effectuer les étapes décrites ci-dessous dans un système d'exploitation compatible Debian - la condition principale pour le lancement sera la présence du gestionnaire de paquets
Apt dans le système, c'est-à -dire un gestionnaire qui vous permet d'installer le logiciel
Deb dans le système. Bien sûr, vous pouvez effectuer les étapes suivantes sur n'importe quel système Linux, mais cela nécessitera des actions supplémentaires de votre part et il est possible de modifier la séquence de certaines commandes (par exemple: installer des packages RPM au lieu de Deb, etc.)
Gource est un projet très intéressant et fascinant.
Gource est nommé d'après la source, c'est-à -dire code source + G (graphique). Cette application vous permet de visualiser l'historique des changements dans le système de contrôle de version. Gource comprend nativement Git, pour d'autres systèmes tels que SVN, Mercurial, il existe des convertisseurs qui vous permettent de convertir la base de stockage au format Git.
Gource -
rend incroyablement beau avec OpenGL, et dispose d'un grand nombre de paramètres pour son travail. Cet outil incroyablement puissant pour générer une visualisation "Enchanting" que j'utiliserai.
Pour créer une visualisation, j'ai besoin d'une séquence de commandes décrite dans un script
bashPour générer la vidéo, j'ai besoin de deux programmes principaux:
Gource - pour créer le fichier vidéo source pour l'historique Git de tout projet spécifié
FFmpeg - une bibliothèque pour l'encodage et le décodage vidéo et audio
Script pour générer un fichier vidéo de plugin
Le script doit être exécuté en tant qu'utilisateur normal, mais au démarrage, le script nécessite l'installation des programmes
git zip ffmpeg gource suivantsS'ils sont absents, le script tentera de les installer Ă l'aide de la
commande d' augmentation des privilèges -
sudo .
En bref, le script fait ce qui suit:
Options de Gource
- 01 - mode caméra de piste en mode caméra
(suit les utilisateurs actifs actuels)
- 02 - position d' arrĂŞt 1.0 position finale
(définit la position finale pour la lecture, plage de 0,0 à 1,0)
- 03 --secondes par jour 1 nombre de jours par seconde vidéo
(le paramètre détermine la quantité de travail que vous verrez dans l'intervalle d'une seconde de la vidéo)
- 04 --Git-Branch Origin / Master Project Work Branch
- 05 - arrêt de fin après la fin du journal git
- 06 - le lissage multi-échantillonnage permet
- 07 --hide-filenames supprimer les noms de fichiers
- 08 - les utilisateurs en surbrillance mettent en évidence les noms d'utilisateur
- 09 --file-idle-time 13 temps d'arrĂŞt pour le fichier
(la durée après laquelle le nom de fichier est supprimé de l'affichage)
- 10 --max-files 0 nombre maximum de fichiers
(une valeur de 0 supprime la limite du nombre de noms de fichiers affichés)
- 11 - masquer la date supprimer la date pour laquelle le cadre actuel est affiché
- 12 - titre Kodi le nom qui apparaît dans le coin inférieur gauche de la vidéo
- 13 --bloom-multiplier 1.0 contrôle l'effet de la "floraison légère" en utilisant le rayon.
- 14 - L' intensité de floraison 1.0 contrôle l'effet de la «floraison légère» en utilisant l'intensité.
- 15 - cadence de sortie 30 trames de sortie par seconde
- 16 --output-ppm-stream name nom du fichier de sortie au format PPM
remarque: certains paramètres peuvent s'exclure mutuellement,
Une liste complète des paramètres peut être trouvée
ici .
Petit didacticiel vidéo pour l'économiseur d'écran (a)
1) Téléchargez le projet depuis github: git clone https://github.com/berserktv/screensaver.kodi.universe.git
2) Générez une vidéo et créez une archive Zip du plugin: cd screensaver.kodi.universe chmod u+x create.sh ./create.sh
3) Temps de génération vidéo et utilisation de l'espace disque libre: . - 20 Gource (PPM) MKV FFmpeg. ( h.264) , Git XBMC (Kodi) 700 . PPM 10 ( FullHD, 30 ).
4) Installez l'économiseur d'écran dans Kodi "" Kodi ( ) Kodi - "" => " " => " Zip " , Kodi Universe Screensaver(), . Settings ( ) => " " => ""