# 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. 图形化用户界面 - **播放模块**: 任务控制面板,支持启动/停止任务 - **调试模块**: 系统调试和状态监控 - 实时状态更新 - 任务运行状态显示 ## 📦 安装和配置 ### 环境要求 ```bash Python 3.8+ PyQt6 PySerial Requests PyYAML ``` ### 安装依赖 ```bash pip install -r requirements.txt ``` ### 配置文件设置 #### 1. 主配置文件 (`config/config.yaml`) ```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`) ```yaml serial: port: COM3 baudrate: 9600 play_mode: 1 # 0=单独播放, 1=全部播放 ``` #### 3. 默认视频配置 (`config/default_video.yaml`) ```yaml effects: - name: "默认效果" video: "/path/to/default.mp4" loop: true ``` ## 🎮 使用方法 ### 启动应用程序 ```bash python application.py ``` ### 编程接口使用 #### 单个 Kodi 客户端控制 ```python 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) ``` #### 多客户端同步控制 ```python 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() ``` #### 任务系统使用 ```python 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() ``` ## 🔧 高级功能 ### 任务注册系统 系统使用装饰器模式注册任务: ```python 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`: 视频同步控制 ### 日志系统 ```python 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 为客户端索引) ### 按钮信号处理 系统支持多种按钮信号: - 播放指定视频 - 停止播放 - 音量控制 - 播放模式切换 ## 🎯 应用场景 - **展览展示**: 多屏同步播放展示内容 - **数字标牌**: 分布式数字标牌管理 - **教育培训**: 多教室同步教学内容 - **会议系统**: 多会议室音视频同步 - **工业控制**: 基于串口的设备联动控制 ## 🛠️ 开发和调试 ### 构建可执行文件 ```bash # 使用提供的批处理文件 build_exe.bat # 或手动使用 PyInstaller pyinstaller show_demo.spec ``` ### 调试模式 启动应用程序后,使用调试模块窗口可以: - 查看客户端连接状态 - 监控播放状态 - 查看日志输出 - 测试串口通信 ## 📋 注意事项 ### Kodi 设置要求 1. 启用 HTTP 控制: - 设置 → 服务 → 控制 - 启用"允许通过HTTP控制Kodi" - 设置端口和用户名/密码 2. 网络配置: - 确保所有 Kodi 设备在同一网络 - 防火墙允许相应端口通信 3. 文件路径: - 使用网络共享路径时需要适当前缀 (`smb://`, `nfs://`) - 确保所有客户端都能访问媒体文件 ### 性能优化 - 合理设置监控线程间隔 - 避免频繁的状态查询 - 使用适当的超时设置 - 定期清理日志文件 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。 ## 📄 许可证 本项目采用 MIT 许可证。详见 LICENSE 文件。