Atribuindo um protetor de tela ao Kodi
O projeto foi criado para criar um protetor de tela
"Encantador" com uma quantidade mínima de código fonte em Python. O projeto é o plugin mais simples para o centro multimídia Kodi.
O projeto mostra como você pode criar um protetor de tela muito bonito, inteiramente baseado no trabalho da comunidade "OpenSource". Um projeto de integração, este é um exemplo de gravação de dois componentes independentes, cada um com cerca de 80 linhas de código. O primeiro componente é um gerador de conteúdo, script de shell, o segundo componente é um plug-in do centro multimídia Kodi, responsável pela exibição do conteúdo.
E, finalmente, se você é um programador e usa o sistema de controle de versão Git, pode visualizar seu trabalho, gravá-lo em um arquivo de vídeo e apreciar o resultado em uma TV ou tela de computador, recostando-se na cadeira com uma xícara de café. E nas noites frias de outono, você pode dormir tranquilamente sob o protetor de tela, sem esquecer de desligar o dispositivo no Kodi.
Preâmbulo
Você pode olhar infinitamente para três coisas:
como o fogo queima, como a água flui e como as outras pessoas trabalham.Como o plugin foi escrito para o “Kodi Multimedia Center”, visualizarei o trabalho da super equipe de “Kodi Programmers”.
Usando plugins no Kodi
O Kodi Multimedia Center é um programa muito poderoso e flexível, trabalhando em conjunto com a biblioteca externa ffmpeg, para decodificar arquivos de áudio e vídeo.
Para criar um aplicativo de terceiros, o Kodi usa o mecanismo de extensão "addons" ou simplesmente plug-ins. Para criar meu próprio plugin, preciso de algumas habilidades e um pouco de conhecimento da linguagem de programação Python.
O mecanismo de plug-in do Kodi é extremamente flexível e conveniente. Python é uma linguagem interpretada, o que significa que não preciso compilar nada, compilá-lo em um pacote de software separado, sofrer com arquivos de compilação como "makefile" etc.
Para a distribuição final do plug-in Kodi, basta compactá-lo no arquivo Zip, observando algumas regras na estrutura de diretórios. Tendo o arquivo Zip final em mãos, ele pode ser instalado em qualquer dispositivo em que o Kodi funcione: um computador, tablet e, finalmente, uma TV (o que significa um monte de TV + placa única), especificando o arquivo como fonte de plug-in.
Estrutura do plugin Kodi
└── screensaver.kodi.universe
├── README.md
Add── addon.xml
├── changelog.txt
Create── create.sh
├── fanart.jpg
├── icon.png
├── recursos
│ ├── idioma
│ │ ├── inglês
│ │ │ ─── strings.po
│ │ └── russo
│ │ └── strings.po
│ ├── settings.xml
│ └── peles
│ └── padrão
720p ├── 720p
K │ └── kodi-universe.xml
│ ├── 1080i
K │ └── kodi-universe.xml
│ └── mídia
Black ├── black.jpg
│ ├── buran.jpg
K └── kodi-universe.mkv
└── screensaver.py
- README.md - arquivo opcional, contém uma descrição do projeto para github.com
- addon.xml - um arquivo com uma descrição do plug-in, que contém o tipo, codificação, versão, dependências, nome do autor, etc.
- changelog.txt - um arquivo opcional com uma lista de alterações no projeto
- create.sh é um arquivo opcional, um script bash é projetado para criar um protetor de tela de arquivo Zip (a) e gerar um arquivo de vídeo do histórico do Git usando a ferramenta Gource, o arquivo não tem uma relação com o próprio plug-in Kodi, é necessário para uma distribuição conveniente do plug-in. É totalmente autônomo, ou seja, tendo apenas esse arquivo, você sempre pode criar um arquivo Zip completo do plug-in (se você tiver uma conexão com a Internet).
- fanart.jpg - imagem de fundo do plugin
- icon.png - o ícone principal
- resources - diretório com recursos de plug-in
- screensaver.py - o arquivo principal do plugin, contém todo o código-fonte do plugin em Python, o nome do arquivo pode ser qualquer coisa, o principal é que esse nome esteja escrito no arquivo addon.xml
Descrição dos recursos do plugin
O diretório de recursos contém os seguintes arquivos:
- language / English / strings.po - strings da interface do plugin original em inglês
- language / Russian / strings.po - tradução para o russo, o arquivo está incluído no mecanismo padrão Kodi para traduzir o conteúdo para os idiomas nacionais dos países, o início do arquivo contém um cabeçalho de texto padrão de várias linhas (um exemplo pode ser encontrado no site kodi.wiki , seção plug-ins) , existem feeds de linha compostos por três campos:
- msgctxt - link para um número de linha exclusivo
- msgid - identificador de string de texto original em inglês
- msgstr - tradução do valor msgid para o idioma nacional, neste caso, para russo (diretório russo)
- settings.xml - o arquivo principal das configurações do plug-in, descreve o menu gráfico das propriedades do plug-in, cujos parâmetros de string podem ser alterados, em que:
- id - identificador de recurso de texto
- label - um rótulo numérico exclusivo para o campo de texto (corresponde ao campo msgctxt no arquivo de traduções strings.po)
- type - um tipo de recurso predefinido (todos os tipos possíveis são descritos no site kodi.wiki , seção de plugins)
- default - o valor padrão do parâmetro (você pode redefinir o parâmetro para esse valor usando o menu Kodi com o mesmo nome)
- resources / skins / default / 1080i / kodi-universe.xml - arquivo de configuração xml
- resources / skins / default / 720p / kodi-universe.xml - arquivo xml de configuração que descreve a localização dos controles de plug-in (controles), sua geometria, tamanhos gerais, posição dos elementos, tipo de visibilidade etc. O nome da configuração é determinado dependendo do modo do adaptador de vídeo (por exemplo, 1080i ou 720p)
conteúdo 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 " "
conteúdo 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 de mídia do plug-in:- resources / skins / default / media / black.jpg - fundo preto que preenche a tela antes de iniciar o vídeo
- resources / skins / default / media / buran.jpg - imagem futurista da nave espacial "Buran, nas asas de um sonho"
- resources / skins / default / media / kodi-universe.mkv - o principal arquivo de vídeo que é reproduzido ciclicamente pelo plug-in até o evento de despertar
Arquivo de configuração raiz do plug-in - addon.xml
Addon.xml - é o principal arquivo de configuração do plug-in, do qual o Kodi obtém todas as informações necessárias para iniciar o plug-in e integrá-lo ao centro multimídia.
conteúdo 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>
Os principais parâmetros do plugin são:
- Seção Addon
- id - identificador de texto exclusivo do plug-in
- name - nome do plugin
- version - versão do plugin
- nome do provedor - nome do provedor do plug-in
- Requer seção - dependências
Nesta seção, os módulos dos quais a operação deste plug-in depende
- Seção de extensão - extensões
nesta seção (pode haver vários), o tipo do plug-in é indicado,
principal ponto de entrada para o plug-in:
point = "xbmc.ui.screensaver" library = "screensaver.py"
no nosso caso, o plugin é o “Protetor de Tela” ao qual é transmitido
controle chamando um script python chamado "screensaver.py"
point = “xbmc.addon.metadata” também pode ser especificado na seção de extensões
com o tipo de plataforma na qual o plug-in pode funcionar, o nome e a descrição do plug-in
em um idioma / idiomas específicos, bem como o tipo de plug-in LICENSE
A quantidade total de metadados que pode ser especificada nesta seção de extensão pode ser
Você pode encontrar informações grandes e mais detalhadas suficientes no site
kodi.tv
Implementação de plugins
Como o plug-in deve ser extremamente simples e direto, em sua implementação vou me limitar a um arquivo de origem principal screensaver.py localizado no diretório raiz do screensaver (a)
Para que o script python seja chamado, eu o registrei no arquivo addon.xml, consulte a seção acima
A linguagem de programação Python é bastante flexível, permite executar a mesma ação de várias maneiras e, para maior clareza, usarei a abordagem orientada a objetos com classes.
Protetor de tela de classe (xbmcgui.WindowXMLDialog)
A classe principal do protetor de tela
A API do Python Kodi inclui vários módulos principais:
xbmc, xbmcgui, xbmcplugin, xbmcaddon e xbmcvfs . Para trabalhar com a GUI do Kodi, usarei o módulo xbmcgui. Este módulo contém classes responsáveis por diferentes elementos da interface.
Para criar uma caixa de diálogo de plug-in com sua interface descrita no arquivo de configuração xml, a classe
xbmcgui é
usada.conteúdo 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>
O arquivo XML de configuração descreve dois elementos de controle:
O primeiro com o identificador -
1 , é uma imagem de fundo - "Tempestade de neve, nas asas de um sonho", de certos tamanhos, alinhada ao centro da tela.
O segundo elemento com o identificador -
2 , é uma janela para reproduzir o vídeo, com um sinal de visibilidade e certas dimensões geométricas.
A classe Screensaver herda da classe WindowXMLDialog e possui três métodos:
- O construtor __init__ método é chamado automaticamente quando o objeto é criado
- OnInit - método de inicialização gráfica, chamado antes da primeira janela de exibição
- O método onAction é um método de processamento de eventos que é chamado quando certos eventos ocorrem, nesse caso, quando ocorre um evento de despertar, ou seja, clicando no botão do mouse, teclado, movendo o ponteiro do mouse ou a chegada de qualquer evento no painel de controle.
A classe Screensaver usa duas classes auxiliares:
- Classe BsPlayer - herdada da classe padrão do player de vídeo XBMC xbmc.Player , a classe contém três métodos:
- O construtor __init__ método é chamado automaticamente quando o objeto é criado
- Substituindo o método de início de vídeo onPlayBackStarted
- Substituindo o método final de vídeo onPlayBackStopped
Nota: desde que redefini o método de parar a reprodução e ele está vazio,
então a regra funcionará: não pare, vamos lá
- Classe BsPlaylist - uma classe de lista projetada para retornar um objeto xbmc.PlayList
a classe contém dois métodos:
- O construtor __init__ método é chamado automaticamente quando o objeto é criado
- O método getPlaylist para definir uma lista de reprodução usando a lista XBMC padrão - xbmc.PlayList
O algoritmo geral do Screensaver (a) é o seguinte:
- Quando o evento de chamada Screensaver ocorre (a) - a inatividade do usuário pelo número especificado de minutos e a ausência de reprodução ativa de vídeo / áudio, o Kodi transfere o controle para o script screensaver.py
- Com base no arquivo de configuração xml, a janela gráfica principal do plug-in é criada. Quando a janela gráfica é inicializada, os recursos de string das configurações do plugin são carregados (o menu é "settings").
Se o arquivo de vídeo não for especificado
__addon __. getSetting ("videofile")é preenchido com um parâmetro padrão
video_url = def_video_url__addon __. setSetting ("videofile", video_url)se não houver sinalizador - "desativar a reprodução de vídeo"
__addon __. getSetting ("não vídeo")a imagem futurista “Tempestade de neve nas asas do sonho” é mostrada por dois segundos
xbmc.sleep (2000)ainda pelo identificador do controle 1, uma imagem de fundo preta é definida
self.getControl (1) .setImage ("black.jpg")e o player de vídeo XBMC começa com uma lista de reprodução de arquivo único
self.player.play (self.vpl, windowed = True)O arquivo de vídeo é reproduzido em círculo até o momento em que chega
evento de vigília, ou seja, qualquer ação do usuário ativa
Criando visualizações para o plugin Kodi no Ubuntu
Nota:
Todas as instruções descritas abaixo serão executadas no sistema operacional Linux, a saber, a distribuição UbuntuTambém é possível executar as etapas descritas abaixo em um sistema operacional compatível com Debian - a principal condição para o lançamento será a presença do gerenciador de pacotes
Apt no sistema, ou seja, um gerente que permite instalar o software
Deb no sistema. Obviamente, você pode executar as seguintes etapas em qualquer sistema Linux, mas isso exigirá ações adicionais de você e é possível alterar a sequência de alguns comandos (como exemplo: instalação de pacotes RPM em vez de Deb, etc.)
Gource é um projeto muito interessante e fascinante.
Gource é nomeado após origem, ou seja, código fonte + G (gráficos). Esta aplicação permite visualizar o histórico de alterações no sistema de controle de versão. O Gource entende nativamente o Git, para outros sistemas como SVN, Mercurial existem conversores que permitem converter a base de armazenamento no formato Git.
Gource -
torna incrivelmente bonito com o OpenGL e possui um grande número de parâmetros para seu trabalho. Essa ferramenta incrivelmente poderosa para gerar a visualização "Encantadora" será usada.
Para criar uma visualização, preciso de uma sequência de comandos descritos em um script
bashPara gerar o vídeo, preciso de dois programas principais:
Gource - para criar o arquivo de vídeo de origem para o histórico Git de qualquer projeto especificado
FFmpeg - uma biblioteca para codificação e decodificação de vídeo e áudio
Script para gerar um arquivo de vídeo de plug-in
O script deve ser executado como um usuário comum, mas durante a inicialização, o script requer a instalação dos seguintes programas
git zip ffmpeg gourceSe eles estiverem ausentes, o script tentará instalá-los usando o
comando de escalonamento de privilégios -
sudo .
Em resumo, o script faz o seguinte:
Opções de origem
- 01 - modo de câmera de trilha no modo câmera
(rastreia usuários ativos atuais)
- 02 - posição final 1.0 posição final
(define a posição final da reprodução, varia de 0,0 a 1,0)
- 03 - segundo de dia 1 número de dias por segundo de vídeo
(o parâmetro determina quanto trabalho você verá no intervalo de um segundo do vídeo)
- 04 - origem do ramo de git / ramo de trabalho do projeto principal
- 05 - parada no fim após o término do log do git
- 06 - a suavização de várias amostras permite
- 07 --hide-filenames remove nomes de arquivos
- 08 --highlight-users destacar nomes de usuário
- 09 - tempo de inatividade do arquivo 13 tempo ocioso do arquivo
(a quantidade de tempo após a qual o nome do arquivo é removido da exibição)
- 10 --max-files 0 número máximo de arquivos
(um valor 0 remove o limite do número de nomes de arquivos exibidos)
- 11 --hide date remove a data em que o quadro atual é exibido
- 12 - título Kodi, o nome que aparece no canto inferior esquerdo do vídeo
- 13 --bloom-multiplicator 1.0 controla o efeito de "light bloom" usando o raio.
- 14 - Bloom-Intensity 1.0 controla o efeito de "light bloom" usando intensidade.
- 15 - taxa de quadros de saída 30 quadros de saída por segundo
- 16 --output-ppm-stream name nome do arquivo de saída no formato PPM
nota: alguns parâmetros podem ser mutuamente exclusivos,
Uma lista completa de parâmetros pode ser encontrada
aqui .
Breve tutorial em vídeo para Screensaver (a)
1) Faça o download do projeto no github: git clone https://github.com/berserktv/screensaver.kodi.universe.git
2) Gere um vídeo e crie um arquivo Zip do plug-in: cd screensaver.kodi.universe chmod u+x create.sh ./create.sh
3) Tempo de geração de vídeo e uso de espaço livre em disco: . - 20 Gource (PPM) MKV FFmpeg. ( h.264) , Git XBMC (Kodi) 700 . PPM 10 ( FullHD, 30 ).
4) Instale o protetor de tela no Kodi "" Kodi ( ) Kodi - "" => " " => " Zip " , Kodi Universe Screensaver(), . Settings ( ) => " " => ""