1、立项背景和目标
为满足日常本地视频播放与快速迭代界面需求,开发一款 Windows 平台的轻量级播放器原型。目标是实现播放流畅、交互顺手、界面可快速定制,并在发布时减少外部资源依赖,提升部署稳定性。
2、软件功能、核心功能模块介绍
• 基础功能:打开本地视频文件、播放/暂停、进度跳转、音量调节、全屏切换、快捷键控制。
• 核心模块:媒体处理模块负责读取与解码;渲染模块负责将视频和界面绘制到窗口;UI 模块提供声明式界面描述与样式控制,并支持按钮、进度条等交互事件;辅助模块用于状态刷新、定时更新与调试信息展示。
3、业务流程、功能路径描述
用户启动程序后进入主界面 → 点击“打开”选择视频文件 → 系统开始播放并实时更新进度与时间 → 用户可通过按钮/进度条/快捷键进行播放控制(播放暂停、拖动进度、调音量、全屏)→ 退出时释放播放与渲染资源并关闭程序。
1、整体架构和设计思路(含模块与技术栈)
项目采用“媒体播放管线 + 渲染层 + UI 层”的分层架构:底层以 FFmpeg 完成文件解析与音视频解码;播放与渲染通过多线程方式解耦,保证解码与显示互不阻塞;视频输出走 Direct3D11/SwapChain,界面绘制使用 Direct2D;UI 采用类似 HTML/CSS 的声明式描述,支持布局计算、样式渲染与事件分发,开发期可热重载界面资源,发布期可将界面资源内嵌到可执行文件以简化部署。
2、“我”的负责模块和结果(量化)
我负责播放器主流程打通、UI 交互与事件体系接入、以及开发/发布两套资源加载方案。实现了打开文件、播放/暂停、进度点击/拖动、音量滚轮、全屏切换等核心交互;增加调试面板展示播放关键状态(如 FPS、队列长度、当前帧时间戳);实现开发期 UI 文件热重载,修改界面后可即时生效,显著缩短迭代时间;发布期将 UI/样式内嵌后,可做到单文件运行,减少因资源缺失导致的部署问题。
3、“我”遇到的难点、坑与解决方案
• 难点一:音视频同步与拖动进度的稳定性。坑在于 seek/step 过程中容易出现旧数据残留导致画面跳动或不同步。解决方案是对 seek/step 流程做“队列清空 + 解码器刷新 + 状态切换”的原子化处理,并在关键节点暂停/恢复 UI 的定时更新,确保显示与实际播放一致。
• 难点二:UI 交互命中与渲染一致性。坑在于元素存在变换(平移/缩放/旋转)时,鼠标命中与实际渲染区域不一致。解决方案是在命中检测中复用渲染时的同一套变换矩阵逻辑,对鼠标坐标做逆变换后再进行碰撞判断,从而保证交互准确。