将屏幕保护程序分配给Kodi
该项目旨在使用最少的Python源代码创建
“迷人的”屏幕保护程序。 该项目是多媒体中心Kodi的最简单插件。
该项目展示了如何完全基于“ OpenSource”社区的工作来创建非常漂亮的屏幕保护程序。 一个集成项目,这是编写两个独立组件的示例,每个组件需要大约80行代码。 第一个组件是内容生成器,shell脚本,第二个组件是Kodi多媒体中心插件,负责显示内容。
最后,如果您是程序员,并且使用Git版本控制系统,则可以可视化您的工作,将其写入视频文件,并在电视或计算机屏幕上欣赏结果,然后向后靠在椅子上喝咖啡。 在凉爽的秋天夜晚,您可以在屏保下舒适地入睡,而不必忘记在Kodi中将设备设置为关闭计时器。
前言
您可以无休止地看三件事:
火如何燃烧,水如何流动以及其他人如何工作。由于该插件是为“ Kodi多媒体中心”编写的,因此我将可视化“ Kodi Programmers”的超级团队的工作。
在Kodi中使用插件
Kodi多媒体中心是一个功能强大且灵活的程序,可与ffmpeg外部库配合使用,用于解码音频和视频文件。
为了创建第三方应用程序,Kodi使用“附加组件”扩展机制或简单地使用插件。 要创建自己的插件,我需要一些技巧和对Python编程语言的一点了解。
Kodi插件机制非常灵活和方便。 Python是一种解释型语言,这意味着我不需要编译任何东西,也不需要将其编译为单独的软件包,也无需使用诸如“ makefile”之类的生成文件。
对于Kodi插件的最终发行版,只需将其打包在Zip存档中,并遵守目录结构上的一些规则。 有了最终的Zip存档,就可以将其安装在Kodi工作的任何设备上:计算机,平板电脑,最后是电视(指一堆电视+单板),将存档指定为插件源。
Kodi插件结构
└──screensaver.kodi.universe
├──README.md
├──addon.xml
├──changelog.txt
├──create.sh
├──fanart.jpg
├──icon.png
├──资源
│├──语言
││├──英语
│││└──strings.po
││└──俄语
││└──strings.po
│├──settings.xml
│└──皮肤
│└──默认
│├──720p
││└──kodi-universe.xml
│├──1080i
││└──kodi-universe.xml
│└──媒体
│├──black.jpg
│├──buran.jpg
│└──kodi-universe.mkv
└──screensaver.py
- README.md-可选文件,包含对github.com的项目的描述
- addon.xml-带有插件描述的文件;它包含插件类型,编码,版本,依赖项,作者姓名等。
- changelog.txt-带有项目更改列表的可选文件
- create.sh是一个可选文件,bash脚本旨在创建一个Zip存档屏幕保护程序(a),并使用Gource工具从Git历史记录生成视频文件,该文件与Kodi插件本身没有关系,为方便分发该插件是必需的。 它是完全自主的,即 仅拥有此文件,您就可以始终创建该插件的完整Zip存档(如果您有Internet连接)。
- fanart.jpg-插件背景图片
- icon.png-主图标
- resources-带有插件资源的目录
- screensaver.py-插件的主文件,包含Python中插件的所有源代码,文件名可以是任何东西,主要是此名称写在addon.xml文件中
插件资源的描述
资源目录包含以下文件:
- 语言/英文/strings.po-英文原始插件界面字符串
- language /俄语/ strings.po-俄语翻译,该文件包含在Kodi标准机制中,用于将内容翻译成国家/地区的本国语言,文件的开头包含几行的标准文本标题(可在kodi.wiki网站的“插件”部分找到示例) ,然后有由三个字段组成的换行符:
- msgctxt-链接到唯一的行号
- msgid-英文原始字符串标识符
- msgstr-将msgid值转换为本国语言,在这种情况下,转换为俄语(俄语目录)
- settings.xml-插件设置的主文件,描述了插件属性的图形菜单,可以更改其字符串参数,其中:
- id-文本资源标识符
- label-文本字段的唯一数字标签(与翻译的strings.po文件中的msgctxt字段相对应)
- type-预定义的资源类型(所有可能的类型都在kodi.wiki网站的“插件”部分中进行了描述)
- default-参数的默认值(您可以使用相同名称的Kodi菜单将参数重置为该值)
- 资源/外观/默认/ 1080i / kodi-universe.xml-xml配置文件
- resources / skins / default / 720p / kodi-universe.xml-配置xml文件,用于描述插件控件(控件)的位置,其几何形状,整体大小,元素的位置,可见性的类型等。 配置名称取决于视频适配器的模式(例如1080i或720p)
俄语/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的内容 <?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>
插件的媒体资源:- 资源/皮肤/默认/媒体/ black.jpg-开始播放视频之前先在屏幕上填充黑色背景
- 资源/皮肤/默认/媒体/ buran.jpg-飞船“ Buran,在梦想的翅膀上”的未来派图像
- resources / skins / default / media / kodi-universe.mkv-插件周期性播放直到唤醒事件之前的主要视频文件
插件根配置文件-addon.xml
Addon.xml-是插件的主要配置文件,Kodi将从中获取所有必要的信息以启动插件并将其集成到多媒体中心。
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>
插件的主要参数是:
- 附加部分
- id-插件的唯一文本标识符
- 名称 -插件名称
- 版本 -插件版本
- provider- name-插件提供者的名称
- 需要部分 -依赖项
在本节中,此插件的操作所依赖的模块
- 扩展部分 -扩展
在本节中(可能有几个),指示了插件的类型,
插件的主要入口点:
点=“ xbmc.ui.screensaver”库=“ screensaver.py”
在我们的例子中,插件是“屏幕保护程序”,将其发送到
通过调用名为“ screensaver.py”的python脚本进行控制
point =“ xbmc.addon.metadata”也可以在扩展部分中指定
以及可以使用插件的平台类型,插件的名称和描述
特定语言/种以及LICENSE插件的类型
在此扩展部分中可以指定的元数据总量可以是
您可以在网站上找到足够大的更详细的信息
科迪电视
插件实现
由于该插件应该非常简单明了,因此在实现过程中,我将自己限制在屏幕保护程序根目录(a)中的一个主源文件screensaver.py
为了调用python脚本,我在addon.xml文件中注册了它,请参见上面的部分。
Python编程语言非常灵活,它允许您以几种方式执行相同的操作,为清楚起见,我将对类使用面向对象的方法。
屏幕保护程序类(xbmcgui.WindowXMLDialog)
屏幕保护程序的主要类别
Python Kodi API包含几个核心模块:
xbmc,xbmcgui,xbmcplugin,xbmcaddon和xbmcvfs 。 要使用Kodi GUI,我将使用xbmcgui模块。 该模块包含负责不同接口元素的类。
要使用XML配置文件中描述的界面创建一个插件对话框,请使用
xbmcgui类。
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>
配置XML文件描述了两个控制元素:
第一个带有标识符
-1的是背景图像-“暴风雪,在梦想的翅膀上”,具有一定尺寸,与屏幕的中心对齐。
标识符为
2的第二个元素是用于播放视频的窗口,带有可见性和某些几何尺寸的标志。
Screensaver类继承自WindowXMLDialog类,并具有三个方法:
- 创建对象时会自动调用构造函数__init__方法
- OnInit-图形初始化方法,在第一个窗口显示之前调用
- onAction方法是一种事件处理方法,在某些事件发生时(在这种情况下,当唤醒事件发生时)即在事件发生时调用。 单击鼠标按钮,键盘,移动鼠标指针或控制面板上任何事件的到来。
屏幕保护程序类使用两个帮助程序类:
- BsPlayer类-从标准XBMC视频播放器类xbmc.Player继承 ,该类包含三个方法:
- 创建对象时会自动调用构造函数__init__方法
- 覆盖onPlayBackStarted视频启动方法
- 覆盖onPlayBackStopped视频结束方法
注意:由于我重新定义了停止播放的方法,并且该方法为空,
那么规则就会起作用:不要停止让我们走
- BsPlaylist类-旨在返回xbmc.PlayList对象的列表类
该类包含两个方法:
- 创建对象时会自动调用构造函数__init__方法
- 使用标准XBMC列表-xbmc.PlayList定义播放列表的getPlaylist方法
屏幕保护程序(a)的一般算法如下:
- 当发生屏幕保护程序呼叫事件(a)-用户在指定的分钟数内没有活动并且没有有效的视频/音频播放时,Kodi会将控制权转移到screensaver.py脚本
- 基于xml配置文件,创建插件的主图形窗口。 初始化图形窗口后,将加载插件设置的字符串资源(菜单为“设置”)。
如果未指定视频文件
__addon __。getSetting(“视频文件”)它使用默认参数填充
video_url = def_video_url__addon __。setSetting(“视频文件”,video_url)如果没有标记-“禁用视频播放”
__addon __。getSetting(“非视频”)放映两秒钟的未来派图像“梦想中的暴风雪”
xbmc.sleep(2000)进一步通过控件1的标识符,设置黑色背景图像
self.getControl(1).setImage(“ black.jpg”)然后XBMC视频播放器以单文件播放列表开始
self.player.play(self.vpl,windowed = True)视频文件将循环播放,直到出现为止
唤醒事件即 任何活动的用户操作
在Ubuntu中为Kodi插件创建可视化
注意事项:
我将在Linux操作系统(即Ubuntu发行版)下运行以下描述的所有指令也可以在兼容Debian的操作系统中执行以下描述的步骤-启动的主要条件是系统中是否存在
Apt软件包管理器。 一个允许您在系统中安装
Deb软件的管理器。 当然,您可以在任何Linux系统上执行以下步骤,但这将需要您执行其他操作,并且可以更改某些命令的顺序(例如:安装RPM软件包而不是Deb等)。
Gource是一个非常有趣且引人入胜的项目。
Gource以来源命名,即 源代码+ G(图形)。 此应用程序使您可以可视化版本控制系统中的更改历史记录。 Gource本身了解Git,对于其他系统(例如SVN,Mercurial),有一些转换器可让您将存储库转换为Git格式。
Gource-使用OpenGL
渲染出令人难以置信的美丽,并且具有大量的工作参数。 我将使用此强大的工具来生成“迷人”的可视化效果。
要创建可视化,我需要一些
bash脚本中描述的命令序列
要生成视频,我需要两个主要程序:
Gource-为任何指定项目的Git历史记录创建源视频文件
FFmpeg-用于对视频和音频进行编码和解码的库
生成插件视频文件的脚本
该脚本应以普通用户身份运行,但是在启动过程中,该脚本需要安装以下
git zip ffmpeg gource程序如果不存在它们,脚本将尝试使用特权升级
命令-sudo安装它们。
简而言之,脚本执行以下操作:
采购选项
- 01 --camera-mode跟踪相机模式
(跟踪当前活跃用户)
- 02-停止位置1.0结束位置
(设置播放的结束位置,范围从0.0到1.0)
- 每天 03 秒-每秒1天的视频
(该参数决定了您在一秒钟的视频中将看到多少工作)
- 04 --git-branch起源/主项目工作分支
- 05 - git日志完成后停止在终点停止
- 06- 启用多采样平滑
- 07 --hide-filenames删除文件名
- 08 --highlight-users高亮显示用户名
- 09 --file-idle-time 13文件的停机时间
(从显示中删除文件名的时间)
- 10 --max-files 0最大文件数
(值0消除了对显示的文件名数量的限制)
- 11- 隐藏日期删除显示当前帧的日期
- 12- 标题Kodi出现在视频左下角的名称
- 13 --bloom-multiplier 1.0使用半径控制“ 光晕 ”的效果。
- 14- 绽放强度1.0使用强度控制“光晕”的效果。
- 15-每秒输出帧数30个输出帧
- 16 --output-ppm-stream名称以PPM格式输出的文件名
注意:某些参数可能是互斥的,
参数的完整列表可以在
此处找到。
屏幕保护程序的简短视频教程(a)
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)在Kodi中安装屏幕保护程序 "" Kodi ( ) Kodi - "" => " " => " Zip " , Kodi Universe Screensaver(), . Settings ( ) => " " => ""