这是一个基于 Python 和 PyQt6 的 Kodi 多媒体控制系统,提供了通过 HTTP JSON-RPC API 控制多个 Kodi 媒体中心的完整解决方案。系统支持串口通信、多客户端同步播放、任务管理和图形化用户界面。
show_demo/
├── application.py # 主应用程序入口
├── kodi_util/ # Kodi 控制核心模块
│ ├── kodi_module.py # 单个 Kodi 客户端控制
│ ├── kodi_server.py # 多客户端同步控制
│ ├── loadconfig.py # 配置文件加载器
│ ├── LoggerToolModule.py # 日志管理模块
│ ├── task_registry.py # 任务注册系统
│ └── kodi_play/ # 播放任务模块
│ ├── kodi_play_task.py # 核心播放任务实现
│ ├── thread.py # 多线程管理
│ └── kodi__play_interface.py # 播放接口定义
├── ui/ # 用户界面模块
│ ├── play_module_window.py # 播放控制界面
│ └── debug_module_window.py # 调试界面
├── config/ # 配置文件目录
│ ├── config.yaml # 主配置文件
│ ├── default_serial.yaml # 串口配置
│ ├── default_video.yaml # 默认视频配置
│ ├── relay.yaml # 联动播放配置
│ └── ButtonListenerTask.yaml # 按钮监听配置
└── logs/ # 日志文件目录
KodiClient)KodiServer)Python 3.8+
PyQt6
PySerial
Requests
PyYAML
pip install -r requirements.txt
config/config.yaml)kodi_clients:
- ip: 192.168.1.100
port: 8080
username: kodi
password: password
- ip: 192.168.1.101
port: 8080
username: kodi
password: password
video_paths:
- /path/to/video1.mp4
- /path/to/video2.mp4
com_port: COM3
config/default_serial.yaml)serial:
port: COM3
baudrate: 9600
play_mode: 1 # 0=单独播放, 1=全部播放
config/default_video.yaml)effects:
- name: "默认效果"
video: "/path/to/default.mp4"
loop: true
python application.py
from kodi_util.kodi_module import KodiClient
# 创建客户端
client = KodiClient(
host="192.168.1.100",
port=8080,
username="kodi",
password="password"
)
# 播放视频
client.play_video("/path/to/video.mp4", loop=True)
# 播放图片幻灯片
client.play_image_loop([
"/path/to/image1.jpg",
"/path/to/image2.jpg",
"/path/to/image3.jpg"
])
# 设置幻灯片效果
client.set_slideshow_settings(effect="fade", time=5)
# 控制播放
client.pause_playback() # 暂停/继续
client.stop_playback() # 停止播放
client.set_volume(50) # 设置音量(0-100)
from kodi_util.kodi_server import KodiServer
# 从配置文件创建服务器
server = KodiServer("config/config.yaml")
# 同步播放视频
server.sync_play_video(
video_path="/path/to/video.mp4",
start_time=0,
end_time=None,
sound_client_index=0, # 第一个客户端播放声音
default_volume=80
)
# 同步播放幻灯片
server.sync_play_images(
image_paths=[
"/path/to/image1.jpg",
"/path/to/image2.jpg"
],
effect="fade",
time=5
)
# 停止所有播放
server.stop_playback()
from kodi_util.task_registry import get_task_class
# 获取并启动监听串口任务
task_class = get_task_class("监听串口")
task = task_class()
task.start_monitoring()
# 获取并启动联动任务
linkage_class = get_task_class("联动")
linkage_task = linkage_class()
linkage_task.play()
系统使用装饰器模式注册任务:
from kodi_util.task_registry import register_task
from kodi_util.kodi_play.kodi__play_interface import KodiPlayInterface
@register_task("自定义任务")
class CustomTask(KodiPlayInterface):
def __init__(self):
# 初始化代码
pass
def play(self, video_path=None, client_index=None, loop=False):
# 播放逻辑
pass
def interrupt(self):
# 中断逻辑
pass
系统提供多种状态监控线程:
KodiStateMonitorThread: 监控 Kodi 客户端状态PlaybackMonitorThread: 监控播放进度SerialMonitorThread: 监控串口通信VideoSyncThread: 视频同步控制from kodi_util.LoggerToolModule import LoggerTool
# 创建日志实例
logger = LoggerTool(
name='my_logger',
log_file='my_app.log',
log_dir='logs'
)
logger.info("信息日志")
logger.error("错误日志")
logger.warning("警告日志")
0xNN (NN 为客户端索引)0xCC 0xNN (CC 为命令类型,NN 为客户端索引)系统支持多种按钮信号:
# 使用提供的批处理文件
build_exe.bat
# 或手动使用 PyInstaller
pyinstaller show_demo.spec
启动应用程序后,使用调试模块窗口可以:
启用 HTTP 控制:
网络配置:
文件路径:
smb://, nfs://)欢迎提交 Issue 和 Pull Request 来改进这个项目。
本项目采用 MIT 许可证。详见 LICENSE 文件。