README.md 8.1 KB

Kodi 多媒体控制系统

这是一个基于 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/                     # 日志文件目录

架构特点

  • 模块化设计: 核心功能分离,便于维护和扩展
  • 任务注册系统: 支持动态任务注册和管理
  • 多线程架构: 异步处理串口通信和播放控制
  • 配置驱动: 通过 YAML 配置文件管理系统参数
  • 状态监控: 实时监控 Kodi 客户端状态
  • 日志系统: 完整的日志记录和错误追踪

🚀 功能特性

1. 单客户端控制 (KodiClient)

  • 视频播放控制(播放、暂停、停止、循环)
  • 图片幻灯片播放(支持过渡效果和时间设置)
  • 音量控制和静音功能
  • 播放进度控制和查询
  • 播放状态实时监控

2. 多客户端同步控制 (KodiServer)

  • 多设备同步视频播放
  • 同步图片幻灯片播放
  • 指定音频输出设备
  • 播放列表管理
  • 客户端状态统一监控

3. 串口通信任务

  • 监听串口任务: 接收十六进制信号控制播放
  • 按钮监听任务: 处理按钮信号触发特定视频
  • 支持多种播放模式(单独播放/全部播放)
  • 自动播放默认视频
  • 播放完成后的自动处理

4. 联动播放任务

  • 视频片段分段播放
  • 多客户端协调播放
  • 自动切换和循环
  • 时间精确控制

5. 图形化用户界面

  • 播放模块: 任务控制面板,支持启动/停止任务
  • 调试模块: 系统调试和状态监控
  • 实时状态更新
  • 任务运行状态显示

📦 安装和配置

环境要求

Python 3.8+
PyQt6
PySerial
Requests
PyYAML

安装依赖

pip install -r requirements.txt

配置文件设置

1. 主配置文件 (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

2. 串口配置 (config/default_serial.yaml)

serial:
  port: COM3
  baudrate: 9600
  play_mode: 1  # 0=单独播放, 1=全部播放

3. 默认视频配置 (config/default_video.yaml)

effects:
  - name: "默认效果"
    video: "/path/to/default.mp4"
    loop: true

🎮 使用方法

启动应用程序

python application.py

编程接口使用

单个 Kodi 客户端控制

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

调试模式

启动应用程序后,使用调试模块窗口可以:

  • 查看客户端连接状态
  • 监控播放状态
  • 查看日志输出
  • 测试串口通信

📋 注意事项

Kodi 设置要求

  1. 启用 HTTP 控制:

    • 设置 → 服务 → 控制
    • 启用"允许通过HTTP控制Kodi"
    • 设置端口和用户名/密码
  2. 网络配置:

    • 确保所有 Kodi 设备在同一网络
    • 防火墙允许相应端口通信
  3. 文件路径:

    • 使用网络共享路径时需要适当前缀 (smb://, nfs://)
    • 确保所有客户端都能访问媒体文件

性能优化

  • 合理设置监控线程间隔
  • 避免频繁的状态查询
  • 使用适当的超时设置
  • 定期清理日志文件

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进这个项目。

📄 许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。