AI Studio 数字标牌/播控系统 (基础版 V10) 说明文档 的研究 的研究
1. 项目简介
这是一个轻量级的本地媒体播放与管理系统。它允许用户通过浏览器(手机或电脑)远程控制连接到主机的显示器,进行视频播放、素材管理、播放列表编排以及待机画面设置。系统支持多显示器识别与切换。
2. 核心功能
Web 远程控制:通过局域网 IP 访问网页控制台(默认端口 8080)。
多屏支持:自动识别连接的显示器,可指定视频在特定屏幕全屏播放。
素材管理:支持视频上传、文件夹管理、重命名、删除。
智能缩略图:自动生成视频缩略图,支持手动截取视频帧作为封面,支持自定义文件夹封面。
播放列表:支持拖拽排序、单曲/列表循环模式、断电记忆(通过 config.json json)。
待机背景:无播放任务时自动显示指定的待机图片。
格式支持:
视频:mp4, avi, mkv, mov, wmv, flv, ts
图片:jpg, jpeg, png, bmp, webp
图纹:jpg、jpeg、png、bmp、w
图纹:jpg、jpeg、png、bmp、w
3. 环境依赖与安装
3.1 系统要求
Windows / Linux / macOS
必须安装 VLC Media Player 播放器软件(代码依赖 libvlc)。
3.2 Python 依赖库 Python 3.2 Python 3.2
请确保安装 Python 3.x,并通过 pip 安装以下库:
code
Bash
pip install flask python-vlc opencv-python pillow screeninfo
注意:tkinter 通常随 Python 标准库自带,无需单独安装。
4. 文件结构
代码运行后会自动生成以下目录结构:
code
Text 文本
/项目根目录
├── ai_studio_code.-9py.py # 主程序
├── config.json # 自动生成的配置文件(保存音量、播放列表等状态)
├── videos/ # 存放视频素材的目录
├── thumbs/ # 存放自动生成的缩略图
└── idle_imgs/ # 存放待机背景图片
5. 启动与运行
在终端或命令行运行脚本:
code
Bash
python ai_studio_code.-9py.py
程序启动后:
会弹出一个全屏的黑色窗口(播放窗口),默认在主屏幕。
控制台会显示 Flask 服务器启动信息。
访问控制台:
在同一局域网的设备上,浏览器访问:http://<本机IP>:8080
本机访问:http://127.0.0.1:8080
6. Web 控制台功能指南
Web 界面分为底部的四个导航标签:
6.1 播控 (ctl)
当前播放:显示正在播放的视频名称。
控制按钮:上一曲、播放/暂停、下一曲、停止。
音量控制:静音开关及音量滑块。
屏幕选择:列出所有检测到的显示器。点击对应屏幕图标,播放窗口会瞬间移动到该屏幕并全屏。
6.2 列表 (lst)
队列管理:显示当前待播放的视频列表。
排序:点击“排序”进入编辑模式,使用 ⬆⬇ 箭头调整播放顺序。
清空:一键清空播放列表(停止播放)。
删除:点击列表项右侧的 ✕ 移除单个视频。
6.3 素材 (lib)
此页面是文件管理器,路径对应本地的 videos/ 视频/ 目录。
上传视频:点击“上传视频”按钮选择本地文件上传。
文件夹管理:支持新建文件夹、进入/返回文件夹。
文件操作:
封面截取:点击图片图标,弹出“封面工坊”,可播放视频并截取当前帧作为缩略图。
重命名:点击编辑图标修改文件名。
删除:点击垃圾桶图标删除文件。
添加:点击 + 号或点击缩略图,将视频加入播放列表。
文件夹封面:支持上传图片作为文件夹的自定义封面。
6.4 背景 (set)
待机图管理:上传图片到 idle_imgs/。
设置背景:点击图片即可将其设定为播放停止时显示的画面(Logo 或 广告图)。
循环模式:切换“列表循环”或“单曲循环”。
7. 代码逻辑简述 (开发参考)
后端 (Flask):
负责处理所有 API 请求(如 /api/control/play / api /控制/玩)。
维护 PlayerState 类,确保多线程环境下状态的一致性。
使用 opencv 读取视频帧生成 JPG 缩略图。
播放器 (VLC + Tkinter) 播放器 (VLC Tkinter) 播放器 (VLC Tkinter):
创建一个 Tkinter Frame 框架 作为视频容器。
使用 vlc.py 绑定 Tkinter 的窗口句柄 (winfo_id),从而将 VLC 的视频输出嵌入到 Python GUI 窗口中。
idle_label 层位于视频层之上,用于在停止播放时遮挡黑屏,显示图片。
状态持久化:
关键设置(音量、列表、目标屏幕)会在变动时写入 config.json json,程序重启后自动加载。
8. 常见问题与注意事项
VLC 报错:如果提示找不到模块,请确认已安装 VLC 播放器软件,且位数(32位/64位)与安装的 Python 版本一致。
中文路径:代码中包含 safe_filename 处理,建议文件名尽量避免特殊字符,但在现代 OS 上中文通常支持良好。
缩略图不显示:首次加载素材库时,OpenCV 需要逐个生成缩略图,如果视频较多可能会有短暂延迟。
退出程序:建议在控制台按 Ctrl+C Ctrl C 停止 Flask 服务,并关闭 Tkinter 窗口。
AI Studio 数字标牌/播控系统 (基础版 V10) 说明文档 的研究 的研究
1. 项目简介
这是一个轻量级的本地媒体播放与管理系统。它允许用户通过浏览器(手机或电脑)远程控制连接到主机的显示器,进行视频播放、素材管理、播放列表编排以及待机画面设置。系统支持多显示器识别与切换。
2. 核心功能
Web 远程控制:通过局域网 IP 访问网页控制台(默认端口 8080)。
多屏支持:自动识别连接的显示器,可指定视频在特定屏幕全屏播放。
素材管理:支持视频上传、文件夹管理、重命名、删除。
智能缩略图:自动生成视频缩略图,支持手动截取视频帧作为封面,支持自定义文件夹封面。
播放列表:支持拖拽排序、单曲/列表循环模式、断电记忆(通过 config.json json)。
待机背景:无播放任务时自动显示指定的待机图片。
格式支持:
视频:mp4, avi, mkv, mov, wmv, flv, ts
图片:jpg, jpeg, png, bmp, webp
图纹:jpg、jpeg、png、bmp、w
图纹:jpg、jpeg、png、bmp、w
3. 环境依赖与安装
3.1 系统要求
Windows / Linux / macOS
必须安装 VLC Media Player 播放器软件(代码依赖 libvlc)。
3.2 Python 依赖库 Python 3.2 Python 3.2
请确保安装 Python 3.x,并通过 pip 安装以下库:
code
Bash
pip install flask python-vlc opencv-python pillow screeninfo
注意:tkinter 通常随 Python 标准库自带,无需单独安装。
4. 文件结构
代码运行后会自动生成以下目录结构:
code
Text 文本
/项目根目录
├── ai_studio_code.-9py.py # 主程序
├── config.json # 自动生成的配置文件(保存音量、播放列表等状态)
├── videos/ # 存放视频素材的目录
├── thumbs/ # 存放自动生成的缩略图
└── idle_imgs/ # 存放待机背景图片
5. 启动与运行
在终端或命令行运行脚本:
code
Bash
python ai_studio_code.-9py.py
程序启动后:
会弹出一个全屏的黑色窗口(播放窗口),默认在主屏幕。
控制台会显示 Flask 服务器启动信息。
访问控制台:
在同一局域网的设备上,浏览器访问:http://<本机IP>:8080
本机访问:http://127.0.0.1:8080
6. Web 控制台功能指南
Web 界面分为底部的四个导航标签:
6.1 播控 (ctl)
当前播放:显示正在播放的视频名称。
控制按钮:上一曲、播放/暂停、下一曲、停止。
音量控制:静音开关及音量滑块。
屏幕选择:列出所有检测到的显示器。点击对应屏幕图标,播放窗口会瞬间移动到该屏幕并全屏。
6.2 列表 (lst)
队列管理:显示当前待播放的视频列表。
排序:点击“排序”进入编辑模式,使用 ⬆⬇ 箭头调整播放顺序。
清空:一键清空播放列表(停止播放)。
删除:点击列表项右侧的 ✕ 移除单个视频。
6.3 素材 (lib)
此页面是文件管理器,路径对应本地的 videos/ 视频/ 目录。
上传视频:点击“上传视频”按钮选择本地文件上传。
文件夹管理:支持新建文件夹、进入/返回文件夹。
文件操作:
封面截取:点击图片图标,弹出“封面工坊”,可播放视频并截取当前帧作为缩略图。
重命名:点击编辑图标修改文件名。
删除:点击垃圾桶图标删除文件。
添加:点击 + 号或点击缩略图,将视频加入播放列表。
文件夹封面:支持上传图片作为文件夹的自定义封面。
6.4 背景 (set)
待机图管理:上传图片到 idle_imgs/。
设置背景:点击图片即可将其设定为播放停止时显示的画面(Logo 或 广告图)。
循环模式:切换“列表循环”或“单曲循环”。
7. 代码逻辑简述 (开发参考)
后端 (Flask):
负责处理所有 API 请求(如 /api/control/play / api /控制/玩)。
维护 PlayerState 类,确保多线程环境下状态的一致性。
使用 opencv 读取视频帧生成 JPG 缩略图。
播放器 (VLC + Tkinter) 播放器 (VLC Tkinter) 播放器 (VLC Tkinter):
创建一个 Tkinter Frame 框架 作为视频容器。
使用 vlc.py 绑定 Tkinter 的窗口句柄 (winfo_id),从而将 VLC 的视频输出嵌入到 Python GUI 窗口中。
idle_label 层位于视频层之上,用于在停止播放时遮挡黑屏,显示图片。
状态持久化:
关键设置(音量、列表、目标屏幕)会在变动时写入 config.json json,程序重启后自动加载。
8. 常见问题与注意事项
VLC 报错:如果提示找不到模块,请确认已安装 VLC 播放器软件,且位数(32位/64位)与安装的 Python 版本一致。
中文路径:代码中包含 safe_filename 处理,建议文件名尽量避免特殊字符,但在现代 OS 上中文通常支持良好。
缩略图不显示:首次加载素材库时,OpenCV 需要逐个生成缩略图,如果视频较多可能会有短暂延迟。
退出程序:建议在控制台按 Ctrl+C Ctrl C 停止 Flask 服务,并关闭 Tkinter 窗口。