用于控制播放展厅视频

qysybsh14 418e6ad0f5 第一次提交 10 月之前
__pycache__ 418e6ad0f5 第一次提交 10 月之前
build 418e6ad0f5 第一次提交 10 月之前
config 418e6ad0f5 第一次提交 10 月之前
dist 418e6ad0f5 第一次提交 10 月之前
kodi_util 418e6ad0f5 第一次提交 10 月之前
logs 418e6ad0f5 第一次提交 10 月之前
ui 418e6ad0f5 第一次提交 10 月之前
README.md 418e6ad0f5 第一次提交 10 月之前
application.py 418e6ad0f5 第一次提交 10 月之前
application.spec 418e6ad0f5 第一次提交 10 月之前
build_exe.bat 418e6ad0f5 第一次提交 10 月之前
requirements.txt 418e6ad0f5 第一次提交 10 月之前
show_demo.spec 418e6ad0f5 第一次提交 10 月之前
sync_play_video测试使用说明.md 418e6ad0f5 第一次提交 10 月之前
test.py 418e6ad0f5 第一次提交 10 月之前
test_fix.py 418e6ad0f5 第一次提交 10 月之前
test_log_viewer.py 418e6ad0f5 第一次提交 10 月之前
test_logger.py 418e6ad0f5 第一次提交 10 月之前
test_singleton.py 418e6ad0f5 第一次提交 10 月之前
test_sync.py 418e6ad0f5 第一次提交 10 月之前
tv_alive.spec 418e6ad0f5 第一次提交 10 月之前
日志查看器使用说明.md 418e6ad0f5 第一次提交 10 月之前
日志模块使用说明.md 418e6ad0f5 第一次提交 10 月之前

README.md

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 文件。