Kodi

来自 ArchWiki

Kodi (以前称为 XBMC) 是一款屡获殊荣的自由开源 (GPL) 软件媒体播放器和娱乐中心,可以安装在 Linux、OSX、Windows、iOS 和 Android 上,具有 10 英尺用户界面,可与电视和遥控器配合使用。这些都可以直接从 CD/DVD 或硬盘驱动器播放。Kodi 还可以通过本地网络 (LAN) 从计算机播放多媒体,或直接从互联网播放媒体流。它还可以用于使用调谐器、后端服务器和 PVR 插件播放和录制直播电视;有关此方面的更多信息,请参见 Kodi wiki

安装

安装 kodi 软件包。想要 HDR 支持的用户应安装 kodi-gles 软件包。请务必查看/安装 pacman 列出的可选依赖项,以启用其他功能。

设置

这两个软件包都支持多种合成器,功能级别各不相同

GBM
目前功能最丰富。它是三个选项中唯一能够显示 HDR 内容的选项,可能是独立操作的理想选择,因为它直接在 GPU 上运行,而无需添加 X11 层。与其他后端相比,缺少功能的完整列表可以在 Kodi issue 14876 中找到。
Xorg
应被认为与 GBM 相当。
Wayland
一个已知的限制是在合成器而不是 Kodi 的 GUI 中设置分辨率和帧率;目前也不支持 VT 切换。

默认情况下,kodi-addons 组中的所有官方插件都处于禁用状态,需要在安装后在 Kodi 的插件菜单中启用。

硬件视频加速

启用和配置 硬件视频加速 以加快播放性能。安装完成后,硬件后端将显示在设置 > 播放器 > 视频下。

注意: 需要将级别设置为“高级”或“专家”才能显示所有选项。

运行

有两种常见的用例

  1. /usr/bin/kodi 旨在由任何用户按需运行。像系统上的任何其他程序一样使用它。
  2. /usr/bin/kodi-standalone 旨在作为唯一的图形应用程序运行,例如在 HTPC 上。有关更多信息,请参见 #独立运行

独立运行

使用独立模式有几个优点

  1. 可以定义一个非特权用户来运行 kodi,并且无法访问 shell。
  2. 当与 systemd 单元(或等效项,见下文)配对使用时,此设置使运行 kodi 的盒子更像一个设备。
警告: 从下面列出的方法中仅选择一种

kodi-standalone 服务

kodi-standalone-serviceAUR 提供三项服务,并自动创建和配置非特权用户以在独立模式下运行 Kodi。

  • kodi-x11.service
  • kodi-gbm.service
  • kodi-wayland.service
注意
  • 假定正确的视频驱动程序和可选的 硬件视频加速 是依赖项。
  • 创建的 kodi 用户的 home/userdata 目录是 /var/lib/kodi/
  • 某些用例可能需要将环境变量传递给服务。在 /etc/conf.d/kodi-standalone 中定义这些变量,它们将被传递给服务。
  • 如果 kodi-x11.service 启动失败,请参见 Xorg#无根 Xorg 以获取可能的解决方法(这种情况并不常见)。
  • kodi-gbm.servicekodi-wayland.service 不允许退出到另一个虚拟控制台。

使用 kodi-standalone 服务重启/关机的推荐方法

警告: 请注意,这些服务在 systemd 的 system.slice 而不是 user.slice 中运行 Kodi。为了使 Kodi 正常退出,请使用相应的 Kodi 操作而不是使用 systemctl 发起系统重启/关机。否则将导致 Kodi 非正常退出,并可能丢失 GUI 设置、Kodi 正常运行时间等。

原则上,这与用户在系统管理员发出重启命令而没有事先警告时工作导致的数据丢失没有什么不同。虽然可以在 systemd 的 user.slice 中运行 Kodi,但这使得在 Kodi 中使用 USB 挂载和为 Kodi 会话使用 pulseaudio 变得困难。

  • Kodi GUI:在 Kodi GUI 的电源菜单下选择相应的选项。
  • 移动设备:官方 Android/iOS 应用也可以执行这些操作(假设在 Kodi 中启用了相应的选项)。
  • CLI:使用 kodi-eventclients 提供的 kodi-send 发送 ShutDown()Reboot 命令。语法是
$ kodi-send -a Reboot
$ kodi-send -a ShutDown()

使用 LightDM 的 Xsession

注意: 这假定系统上有一个名为 kodi 的 kodi 用户,并且存在以下描述的文件。

要将 LightDM 与自动登录一起使用,请参见 LightDM#启用自动登录LightDM#启用交互式无密码登录Kodi 包括 kodi.desktop 作为 xsession

/etc/lightdm/lightdm.conf
[Seat:seat0]
pam-service=lightdm-autologin
autologin-user=kodi
autologin-user-timeout=0
user-session=kodi

使用 NoDM 的 Xsession

Nodm 是一个自动显示管理器,它在系统启动时自动启动 X 会话。

通过为 kodi 创建一个 用户(例如 useradd -mU kodi)并 安装 nodm,我们只需在内部指定 kodi 用户即可

/etc/nodm.conf
NODM_USER=kodi
NODM_XSESSION=/home/kodi/.xinitrc

确保在 xinitrc 文件中执行 kodi

注意: .xinitrc 文件必须是可执行文件,因此不得使用 noexec 选项挂载 kodi 用户的 home。

Socket 激活

当用户从 Kore 等遥控器应用发出唤醒命令,或连接到 Kodi 的 html 控制端口时,可以使用 Socket 激活来启动 Kodi。通过 启动 kodi@user.socket 开始监听(将 user 替换为要启动的 Kodi 运行用户)。

没有打包的 kodi@.servicekodi@.socket 文件,必须手动创建它们。根据设置,可以选择更改 kodi@.socket 中的端口。

/etc/systemd/system/kodi@.service
# This fails if the user does not have an X session.
[Unit]
Description=Launch Kodi on main display
Conflicts=kodi.socket

[Service]
Type=simple
Environment=DISPLAY=:0.0
Nice=-1
ExecStart=/usr/bin/su %i /usr/bin/kodi
ExecStopPost=/usr/bin/systemctl --no-block start kodi@%i.socket

[Install]
WantedBy=multi-user.target
/etc/systemd/system/kodi@.socket
[Unit]
Conflicts=kodi@%i.service

[Socket]
# Unset 
ListenStream=
# Start when receiving a TCP request on the http control port
ListenStream=8080
# start when receiving an UDP datagram (Wakeup/WOL)
ListenDatagram=9

[Install]
WantedBy=sockets.target

使用 LIRC / irexec 从遥控器启动

可以将 Kodi 配置为通过按键启动。用户将需要 kodi-standalone-serviceAURlirc。这在 24/7 运行且按需启动 kodi 的设置中非常有用。

参见相应的 LIRC 文章,并创建一个具有遥控器的功能设置。此外,必须安装 kodi-standalone-serviceAUR 软件包。

使用以下内容生成文件 /var/lib/kodi/.lircrc

/var/lib/kodi/.lircrc
begin
prog = irexec
remote = devinput
button = KEY_MEDIA
config = pgrep kodi-standalone || /usr/bin/kodi-standalone -l /run/lirc/lircd
repeat = 0
end

button 调整为遥控器上启动 Kodi 的任何按钮。可以使用 irw(参见 LIRC#测试)找出 remotebutton 的正确值。

kodi-xxx.service 创建一个 drop-in

/etc/systemd/system/kodi-xxx.service.d/lirc.conf
[Service]
ExecStart =
ExecStart = /usr/bin/irexec

启动 kodi-xxx.service启用 它以在启动时运行。

使用遥控器

由于 Kodi 旨在成为通过官方应用、物理遥控器或 USB/蓝牙键盘/鼠标进行遥控的媒体中心。

使用 Android 或 iOS 应用

Android 和 iOS 用户都可以使用官方应用(目前免费)来控制 kodi,前提是已正确设置 kodi 以执行此操作。有关配置 Kodi 和应用的步骤,请参见 Official Kodi RemoteKore Manual 页面。

提示: Kore 提供 电源管理 操作以远程执行 挂起/休眠网络唤醒 (WoL)。

使用物理遥控器

任何带有受支持的红外接收器/遥控器的 PC 都可以使用 LIRC 甚至内核支持的模块来驱动它。有关使用 lirc 配置特定遥控器的信息,请参见 LIRC 文章。

为了与 Kodi 正常工作,需要一个将 lirc 事件映射到 Kodi 按键的文件。在 ~/.kodi/userdata/Lircmap.xml(注意大写 'L')创建一个 XML 文件。

注意: 使用 kodi-standalone-serviceAUR 启动 Kodi 的用户将在 /var/lib/kodi/ 下找到 kodi 用户的 home (~),应将其替换为上面的快捷方式。另请确保如果以 root 用户身份创建此文件,则在完成后,它将获得 kodi:kodi 的正确 所有权

Lircmap.xml 格式如下

<lircmap>
  <remote device="devicename">
      <XBMC_button>LIRC_button</XBMC_button>
      ...
  </remote>
</lircmap>
  • 设备名称 是 LIRC 调用遥控器的名称。这是使用 lircd.conf 中的 Name 指令设置的,可以通过运行 irw 并按下遥控器上的几个按钮来查看。IRW 将报告按下的按钮名称,遥控器的名称将出现在行的末尾。
  • XBMC_button 是在 keymap.xml 中定义的按钮名称。
  • LIRC_button 是在 lircd.conf 中定义的名称。如果 lircd.conf 是使用 irrecord 自动生成的,则这些是为按钮选择的名称。有关更多信息,请参阅 LIRC
  • 应查阅 Kodi Wiki 上托管的非常详尽的 LIRC 页面,以获取有关此主题的更多帮助和信息,因为这超出了本文的范围。

HDMI-CEC

使用受支持的 USB-CEC 适配器,Kodi 可以用于自动打开和关闭电视以及其他家庭影院设备。来自 Kodi 的音量控制可以发送到受支持的放大器,可以在 Kodi 内部管理 DVD 或 Blu-Ray 播放器,并将电视上的活动源重定向到任何需要的设备,所有这些都通过一个遥控器完成。有关更多信息,请参见 官方 Kodi wiki 页面上的 CEClibCEC FAQ

安装 libcec

本文或章节需要扩充。

原因: 添加有关需要将用户添加到这些组的参考。(在 Talk:Kodi 中讨论)

连接后,USB-CEC 的 /dev 条目(通常为 /dev/ttyACM*)将默认为由 uucp 组拥有,因此为了使用该设备,运行 Kodi 的用户需要属于该组。参见 用户和组#组管理,了解有关如何将用户添加到组的说明。

  • 将所有将使用 Kodi 的用户添加到 uucp 用户组
注意: 尝试在不属于上述组的情况下使用 USB-CEC 可能会导致问题,包括 Kodi 崩溃,因此请确保正确的用户属于这两个组。

使用游戏手柄

安装 kodi-addon-peripheral-joystick

首先,确认操作系统检测到 游戏手柄,导航到 Kodi 设置 > 输入 > 外围设备 并确认您的设备已列出。然后,进入配置连接的控制器子菜单。Kodi 将提示一次按控制器上的一个按钮。映射完成后,游戏手柄应该能够控制 UI。

在多个节点之间共享媒体和集中式数据库

如果同一网络上的多台 PC 正在运行 Kodi,则可以将它们配置为共享单个媒体库(视频和音乐)。这样做的好处是媒体和关键元数据存储在一个位置,并由网络上的所有节点共享/更新。例如,此设置的用户可以

  • 在一个房间停止观看电影或节目,然后在另一个房间自动完成观看。
  • 在所有节点上共享媒体的已观看和未观看状态。
  • 简化设置,只需维护一个库。

同样,媒体本身可以位于一个空间中,从而减少客户端系统的占用空间(即,无需大的 HDD 空间)。

要使此功能正常工作,需要做几件事

  • 网络暴露的媒体(通过 Kodi 可以读取的协议,例如 NFS 或 Samba)。
  • MariaDB 服务器。
警告: 共享数据库时,由于数据库架构的版本要求,所有客户端都需要使用相同的主要 Kodi 版本。有关数据库版本列表,请参阅 数据库版本表
注意: 以下指南仅是一个配置示例,并非旨在限制,而是具有说明性。显示了关键步骤,但未提供详细讨论。

这些假设用于本指南,请根据需要进行替换

  • 媒体位于以下挂载点下: /mnt/shows /mnt/movies /mnt/music
  • 所有节点的网络地址都在 192.168.0.* 子网范围内。
  • 运行 NFS 导出和 MariaDB 数据库的计算机的 IP 地址为 192.168.0.105。
  • 每个 Kodi 盒子都称为一个节点。
  • 在所有节点上,运行 Kodi 的 Linux 用户都是“kodi”。

有关其他信息,请参阅 官方 Kodi wiki

NFS 服务器导出示例

本节提供了一个使用导出的示例,有关安装和使用,请参见 NFS。Kodi 的 Nexus v20.0 包含对 NFSv4 导出的初始支持。一个限制是 NFSv4 导出的用户将必须手动添加导出/当前不支持浏览 NFS 网络。用户还需要在添加源后重启 Kodi。使用 NFSv3 导出没有这些注意事项。

想要纯 NFSv4 设置的用户应参见 NFS#启动服务器,以保持整洁。当然,这仅适用于运行 NFSv4 导出的盒子。

注意: 用户只需要 LAN 上的一台盒子来提供内容,因此,不要为每个节点重复此操作。以下示例假定用户正在运行 Arch Linux,但任何 NFS 服务器都可以工作,无论是 Linux 还是 BSD 等。

在 NFS 根目录中为每个要共享的媒体目录创建一个空目录。例如

# mkdir -p /srv/nfs/{shows,movies,music}

绑定挂载 媒体目录到 /srv/nfs/ 中的空目录。

以下示例是针对 NFSv3 导出

/etc/exports.d/kodi.exports
/srv/nfs          192.168.0.0/24(ro,fsid=0,no_subtree_check)
/srv/nfs/shows    192.168.0.0/24(ro,no_subtree_check,insecure)
/srv/nfs/movies   192.168.0.0/24(ro,no_subtree_check,insecure)
/srv/nfs/music    192.168.0.0/24(ro,no_subtree_check,insecure)

以下示例是针对 NFSv4 导出

/etc/exports.d/kodi.exports
/srv/nfs          192.168.0.0/24(ro,fsid=0,no_subtree_check,insecure,async,all_squash,pnfs,anonuid=99,anongid=99)
/srv/nfs/shows    192.168.0.0/24(ro,no_subtree_check,insecure,async,all_squash,pnfs,anonuid=99,anongid=99)
/srv/nfs/movies   192.168.0.0/24(ro,no_subtree_check,insecure,async,all_squash,pnfs,anonuid=99,anongid=99)
/srv/nfs/music    192.168.0.0/24(ro,no_subtree_check,insecure,async,all_squash,pnfs,anonuid=99,anongid=99)

安装和设置 MariaDB 服务器

有关安装和配置说明,请参见 MariaDB

要为 Kodi 创建数据库,请使用以下命令

$ mysql -u root -p
   <<enter the mariadb root password assigned in the first step>>
MariaDB [(none)]> CREATE USER 'kodi' IDENTIFIED BY 'kodi';
MariaDB [(none)]> GRANT ALL ON *.* TO 'kodi';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> \q

设置 Kodi 以使用 MariaDB 库和 NFS 导出

设置 Kodi 以使用通用 SQL 数据库

要告诉 Kodi 使用通用数据库,请确保 Kodi 未运行,然后创建以下文件

~/.kodi/userdata/advancedsettings.xml
<advancedsettings>
  <videodatabase>
    <type>mysql</type>
    <host>192.168.0.105</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>kodi</pass>
  </videodatabase>

  <musicdatabase>
    <type>mysql</type>
    <host>192.168.0.105</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>kodi</pass>
  </musicdatabase>

  <videolibrary>
    <importwatchedstate>true</importwatchedstate>
    <importresumepoint>true</importresumepoint>
  </videolibrary>
</advancedsettings>
提示: 如果使用 kodi-standalone-serviceAUR,则配置文件的默认值为 /var/lib/kodi/.kodi,并确保将新创建的文件 chown 给 kodi 用户和组,即 chown kodi:kodi /var/lib/kodi/.kodi/userdata/advancedsettings.xml

设置网络共享

对于 NFSv3 共享,加载 Kodi 并通过在界面中浏览到 视频 > 文件 > 添加视频 > 浏览 > 网络文件系统(NFS) 来定义与导出对应的网络共享。

几秒钟后,应显示与 NFS 服务器对应的 IP 地址。

从共享列表中选择 /srv/nfs/shows,然后从右侧菜单中选择确定。为此共享分配电视节目类别,以设置适当的刮削器并使用正确的元数据填充 SQL 数据库。

对“电影”和“音乐”重复此浏览过程,然后在正确配置后退出 Kodi。此时,应已创建 SQL 表。

对于 NFSv4 共享,用户无法浏览网络,但必须在视频 > 文件 > 添加视频 > 浏览 > 添加网络位置... 下手动定义它们。在那里,将协议更改为“网络文件系统 (NFS)”,然后定义服务器地址(数字 IP 或主机名),然后在远程路径部分下定义共享。为每个导出重复此操作。

注意: 即使 Kodi 运行在与运行 NFS 导出和 SQL 服务器的盒子相同的盒子上,也必须仅使用 nfs 共享设置媒体。

将配置克隆到网络上的其他节点

要在网络上设置另一个 Kodi 节点以使用此库,只需将 ~/.kodi/userdata/advancedsettings.xml 复制到该盒子并重启 Kodi 即可。无需复制任何其他文件或在新 kodi 节点上执行任何其他设置步骤。nfs 导出、节目元数据、任何停止/开始时间、观看状态等都存储在 SQL 表中。

注意: 可以选择定义其他不由 kodi 数据库管理的媒体源,但它们将特定于该特定节点。

提示和技巧

记录观看内容日志

使用 kodi-loggerAUR 跟踪在 kodi 上观看的每个视频。

加速视频播放(同步音频和视频)高达 1.5 倍

要启用具有音频/视频同步(0.8x - 1.5x)的加速和减速,请执行以下操作

  • 创建以下文件,该文件将 [] 键分别映射到 tempo downtempo up 操作
~/.kodi/userdata/keymaps/custom.xml
<keymap>
  <FullscreenVideo>
    <keyboard>
      <opensquarebracket>PlayerControl(tempodown)</opensquarebracket>
      <closesquarebracket>PlayerControl(tempoup)</closesquarebracket>
    </keyboard>
  </FullscreenVideo>
  <VideoMenu>
    <keyboard>
      <opensquarebracket>PlayerControl(tempodown)</opensquarebracket>
      <closesquarebracket>PlayerControl(tempoup)</closesquarebracket>
    </keyboard>
  </VideoMenu>
</keymap>
  • 重启 kodi,它将读取这些更改。
  • 导航到 系统 > 播放器 > 视频 > 播放 并启用“同步播放到显示器”选项。
注意: 以下影响 GBM(但不影响 X11)的错误是由启用此选项触发的。该错误表现为零星的 A/V 同步错误,并伴有 kodi.log 中的条目,例如:WARNING <general>: ActiveAE - large audio sync error: -89449.339487,请参见 上游错误 #22625

修改观看和恢复点的默认值

某些用户可能希望使 Kodi 用于创建恢复点/将视频视为“已观看”的阈值。通过编辑 ~/.kodi/userdata/advancedsettings.xml 插入以下三个 xml 字段来实现

ignoresecondsatstart
在跟踪起点之前要等待的秒数。如果用户观看的值低于定义的秒数,则不会记录起点。默认为 180。
playcountminimumpercent
将某事物视为已观看的总播放时间的百分比。如果用户观看的视频时长超过此数字,但未观看完整视频,则视为已观看,并且在停止时删除任何先前记录的恢复点,最后,该视频被标记为已观看。默认为 90。
ignorepercentatend
视频结尾处要忽略的创建恢复点的总播放时间的百分比。这与之前的设置相关,只是它考虑了视频的最后 x%。如果用户观看了足够的内容以进入文件的此空间,则不会保存恢复点,并且该视频被标记为已观看。默认为 8。
~/.kodi/userdata/advancedsettings.xml
<advancedsettings>
  <video>
    <!-- see https://kodi.wiki/view/HOW-TO:Modify_automatic_watch_and_resume_points -->
    <ignoresecondsatstart>10</ignoresecondsatstart>
    <playcountminimumpercent>90</playcountminimumpercent>
    <ignorepercentatend>8</ignorepercentatend>
  </video>
</advancedsettings>

Kodi 的 CLI

  • texturecacheAUR 可以处理库管理的许多方面,从清理未使用的图像到搜索,再到查询当前正在播放的内容。

使用 Kodi 查看安全摄像头流 (rtsp 或 rtmp)

由于 Kodi 使用 ffmpeg 进行视频播放,因此它能够播放 rtsp 和 rtmp 等流。为此,只需在暴露给 kodi 用户的 文件系统中创建一个 txt 文件,其中包含流。例如

$ cat front-door.strm
rtsp://username:password@10.1.10.101

可选地,元数据(例如封面艺术和摘要)也可以与 .strm 文件关联,就像库中的普通条目一样,方法是使用 NFO 文件。

UPnP 和 DLNA

转到 设置 > 服务 > UPnP/DLNA 并切换启用 UPnP 支持

调整 CD/DVD 驱动器速度

来自 util-linux 软件包的 eject 程序在这方面做得很好,但是它的设置在媒体更改后立即清除。

此 udev 规则永久降低速度

/etc/udev/rules.d/dvd-speed.rules
KERNEL=="sr0", ACTION=="change", ENV{DISK_MEDIA_CHANGE}=="1", RUN+="/usr/bin/eject -x 2 /dev/sr0"

sr0 替换为光驱的设备名称。如果首选 4 倍速而不是 2 倍速,请将 -x 2 替换为 -x 4

创建文件后,使用以下命令重新加载 udev 规则

# udevadm control --reload

为 Web 服务器使用端口 80

Kodi 有一个 Web 服务,允许通过 Web 界面进行交互。默认情况下,它使用端口 8080,因为 80 需要 root 权限。使用以下命令允许它使用低端口号

# setcap 'cap_net_bind_service=+ep' /usr/lib/kodi/kodi.bin

重启 Kodi 并在配置菜单中设置端口 80 (服务 > Web 服务器 > 端口)。

使用 ALSA

如果 PulseAudioPipeWire 无法正常工作,请尝试使用 --audio-backend=alsa 标志启动 Kodi 来强制 ALSA

永久设置音频后端的一种方法是创建一个自定义 systemd 单元文件,或者,也可以编辑来自 kodi-standalone-serviceAUR 的一个。

Kodi 21+ 中的音频直通输出设备列表

可以启用直通,以允许外部接收器或条形音箱解码音频。这对于以 TrueHD 或 Atmos 编码的文件非常有用。如果使用 PulseAudio,请按照 https://kodi.wiki/view/PulseAudio 的说明首先在 PulseAudio 中启用直通。完成后,相应的直通选项应会出现在 Kodi 中。当使用 --audio-backend=alsa 启动 Kodi 强制使用 ALSA 时,直通选项将自动出现在 Kodi 中。

注意
  • PulseAudio 要求 Kodi 中的输出设置为 2 声道。未直通的格式编码的音频将仅作为立体声音频发送。使用 ALSA 以支持直通并传递解码后的环绕声音频信号
  • PulseAudio 不支持 TrueHD、DTS-MA 或 Atmos 直通。使用 ALSA 将这些信号直通到接收器。

另一种在不禁用 Pulseaudio 或 Pipewire-Pulse 的情况下获得 TrueHD 和 DTS-MA 直通的方法是使用像 MPV 这样的外部播放器,首先创建文件 ~/.kodi/userdata/playercorefactory.xml,然后将以下内容粘贴到其中

<playercorefactory>
  <players>
    <player name="MPV" type="ExternalPlayer" audio="false" video="true">
      <filename>/usr/bin/mpv</filename>
      <args>--fs=yes "{1}"</args>
      <hidexbmc>true</hidexbmc>
    </player>
  </players>
  <rules action="prepend">
    <rule video="true" player="MPV"/>
  </rules>
</playercorefactory>

本文或本节是与 mpv 合并的候选对象。

注意: 似乎部分重复了 mpv#指定音频输出mpv#HD 音频直通。(在 Talk:Kodi 中讨论)

MPV 现在应该是 Kodi 的默认媒体播放器。要为 MPV 设置正确的音频输出设备,请使用以下命令显示可用音频设备列表

$ mpv --audio-device=help

例如

alsa/hdmi:CARD=NVidia,DEV=1

现在编辑 ~/.config/mpv/mpv.conf 并添加以下行

audio-spdif=ac3,eac3,dts-hd,truehd
audio-device=alsa/hdmi:CARD=NVidia,DEV=1

要自动切换刷新率,请创建以下文件夹 ~/.config/mpv/scripts,然后下载并将 mpv-plugin-xrandr/xrandr.lua 放入该文件夹。

Kodi JSON-RPC API 用于从外部工具更改设置

用户可以通过使用 JSON-RPC API,直接在 CLI 上或从 python 脚本等与 Kodi 交互。

例如,使用 curl

$ curl -v -H "Content-type: application/json" -d \
  '{"jsonrpc":"2.0","id":1,"method":"Settings.GetSettingValue","params":{"setting":"audiooutput.audiodevice"}}' \
  https://127.0.0.1:8080/jsonrpc -u xbmc:xbmc

另一个例子是 这个 python 脚本,它只是在两组设置之间切换,在本例中,是在 HDMI 和光纤输出之间来回切换音频源。

修复 Wi-Fi 上启动延迟的问题

本文或本节正在考虑删除。

原因:systemd-networkd#systemd-networkd-wait-online 重复。(在 Talk:Kodi 中讨论)

如果在仅使用 Wi-Fi(有线网络已拔下)的情况下运行,同时 #跨多个节点共享媒体和集中式数据库,kodi 很可能在无线网络启动之前启动,这将导致无法连接到共享和 SQL 服务器。假设网络由 systemd-networkd 管理,这可以通过使用 drop-in 文件 来修复

/etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --ignore eth0

在窗口管理器中运行 kodi

窗口管理器中运行 kodi 的用户可能会在退出时看到黑屏。要修复此问题,请尝试切换到另一个 tty。一个可能的解决方案是使用此脚本运行 kodi(以 root 用户身份运行)

kodi.sh
#!/bin/sh
kodi-standalone
sudo chvt 2 
sleep 1
sudo chvt 1

为了确保 sudo 不会为 chvt 询问密码,请将此行添加到 sudoers 文件

/etc/sudoers
UserNameHere ALL=NOPASSWD: /usr/bin/chvt

USB DAC 无法工作

USB DAC/声卡的用户在从音频设置中选择它时,可能会遇到声音失真/咔嗒声/爆音或根本没有声音的情况。可能的修复方法

打开 guisettings.xml(如果使用提供的 kodi-xxx.service,它应该在 /var/lib/kodi/.kodi/userdata/ 下),并更改

<processquality default="true">101</processquality>

<processquality default="false">100</processquality>

虚拟文件系统支持

Kodi 提供了用于从 Kodi 内部访问各种虚拟文件系统的插件。可以使用 kodi-addon-vfs-rarAUR 访问 RAR 压缩文件。可以使用 kodi-addon-vfs-sftpAUR 访问 SFTP 共享。可以使用 kodi-addon-vfs-sacdAUR 访问 Super Audio CD ISO 文件。必须在 Kodi 的插件管理器中启用这些插件中的每一个才能使用。

在播放期间禁止 KDE 自动睡眠

结合使用插件 ossscreensavermanager 和使用 kwriteconfig6 的命令,可以在播放期间禁止 KDE 的省电功能。安装插件后,在其高级设置下的“暂停屏幕保护程序的命令”中写入

kwriteconfig6 --file powermanagementprofilesrc --group AC --group SuspendSession --key idleTime 1800000

在“恢复屏幕保护程序的命令”下,写入

kwriteconfig6 --file powermanagementprofilesrc --group AC --group SuspendSession --key idleTime 86400000

在此示例中,系统在播放期间 360 分钟后暂停,在没有播放的情况下 30 分钟后暂停。

故障排除

访问 Kodi 日志

如果发生错误,第一个开始调查的点可以是 ~/.kodi/temp/kodi.log

全屏模式将 Kodi 拉伸到多个显示器上

对于多显示器设置,Kodi 可能会默认拉伸到所有屏幕。可以通过将环境变量 SDL_VIDEO_FULLSCREEN_HEAD 设置为所需目标显示器的编号,将全屏模式限制为一个显示器。例如,要让 Kodi 显示在显示器 0 上,请将以下行添加到 Kodi 用户的 ~/.bashrc 配置中

SDL_VIDEO_FULLSCREEN_HEAD=0
注意: 鼠标光标将保持在 Kodi 的屏幕内。

H.264 播放仅使用单核

提示: 默认情况下,在播放期间按 O 可显示编解码器信息和 CPU 使用率。有关此叠加层的更多信息,请访问 https://kodi.wiki/view/Player_process_info

如果硬件不支持或无法使用加速,请禁用它并显式将视频解码设置为软件解码。这是因为 仅当视频解码设置为软件解码时,H.264 解码才是多线程的

要实现这一点,请转到系统设置 > 视频。将 设置级别 设置为 高级专家。然后转到加速并将 解码方法 设置为 软件解码

Kodi 退出时卡住,完全占用一个 CPU 核心,UI 无响应

这个问题可能是由安装的第三方插件引起的,它们的终止存在一些问题[1],[2]

解决方法:找到正确的 UI 描述文件 (DialogButtonMenu.xml) 并调整退出按钮类型,从内部 Kodi 的 Quit() 函数调用更改为从外部系统向 Kodi 发送信号。这是一个单行命令,可以对默认 Kodi 包中的任何皮肤进行修改

# find /usr/share/kodi/addons/skin.* -name DialogButtonMenu.xml -exec sed -i 's%<onclick>Quit()</onclick>%<onclick>System.Exec ("killall --signal SIGHUP kodi.bin")</onclick>%' {} \;

kodi-standalone 无法播放 DVD

如果 kodi-standalone 无法播放 DVD,安装 udisks 可能会有所帮助。

参见