# GMediaPlayer **Repository Path**: gaobooo/GMediaPlayer ## Basic Information - **Project Name**: GMediaPlayer - **Description**: 一个自己写的小小小小、简简简简单的播放器 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-03-15 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GMediaPlayer 一个基于 FFmpeg 的现代化多媒体播放器,采用 Qt6/QML 前端和 C++ 后端架构。 ## 项目概述 GMediaPlayer 是一个功能完整的多媒体播放器项目,支持多种视频格式和渲染方式。项目采用多线程架构设计,提供硬件加速支持和现代化的用户界面。 ### 主要特性 - 🎬 **多格式支持**: 基于 FFmpeg 支持主流视频/音频格式 - 🖥️ **多重渲染**: 支持 D3D9、D3D11、OpenGL 渲染方式 - ⚡ **硬件加速**: 支持 DXVA2 硬件解码和软件解码 - 🎨 **现代UI**: 基于 Qt6/QML 的现代化界面,包含动画控制栏 - 📋 **播放列表**: 完整的播放列表管理功能 - 🧵 **多线程**: 视频、音频、解复用器分离的多线程架构 - 🔧 **模块化**: 插件式解码模块设计(规划中) ### 技术栈 - **前端框架**: Qt6 + QML - **后端语言**: C++20 - **多媒体处理**: FFmpeg - **音频输出**: SDL2 - **渲染引擎**: D3D9, D3D11, OpenGL - **构建系统**: CMake 3.19+ - **日志系统**: spdlog - **目标平台**: Windows(当前),跨平台支持(规划中) ## 项目架构 ### 高层结构 ``` GMediaPlayer/ ├── GMediaPlayer/ # 主应用程序(QML界面 + C++后端) ├── MediaCore/ # 媒体核心库(FFmpeg集成) ├── third/ # 第三方依赖库 ├── build/ # 构建输出目录 └── bin/ # 可执行文件输出目录 ``` ### 核心组件 #### MediaCore 库 (`MediaCore/`) - **IPlayer**: 播放器功能接口 - **MediaPlayer**: 核心 FFmpeg 播放器实现,支持硬件加速 - **Demuxer**: 媒体容器解析和流提取 - **FrameObserver**: 观察者模式,用于帧传递到渲染器 - **AudioThread**: 音频解码线程 - **VideoThread**: 视频解码线程 - **PackageQueue**: 音视频数据包队列 #### GMediaPlayer 应用程序 (`GMediaPlayer/`) - **QML 组件**: 现代化UI,包含动画控件和进度条 - **渲染组件**: 多重渲染后端(D3D9、D3D11、OpenGL) - **播放列表**: PlaylistModel 和 PlaylistManager - **视频管理器**: VideoManager 统一管理视频播放 ### 设计模式 - **观察者模式**: `IFrameObserver` 用于 MediaCore 到渲染器的帧传递 - **工厂模式**: `CreatePlayer()` 和 `ReleasePlayer()` 管理播放器生命周期 - **模块模式**: QML 模块通过 `qt6_add_qml_module()` 注册 ## 构建说明 ### 前置要求 - Visual Studio 2022(C++20 支持) - Qt6.9.1 或更高版本 - CMake 3.19 或更高版本 - FFmpeg 库(包含在 `third/ffmpeg/`) - SDL2 库(包含在 `third/SDL2/`) ### 构建步骤 ```bash # 1. 创建构建目录 mkdir build cd build # 2. 使用 CMake 配置项目 cmake .. -G "Visual Studio 17 2022" -A x64 # 3. 构建项目 cmake --build . --config Debug # 4. 运行应用程序 ./bin/GMediaPlayer.exe ``` ### 构建输出 - 所有可执行文件输出到 `bin/` 目录 - MediaCore.dll 作为共享库构建 - GMediaPlayer.exe 为主应用程序可执行文件 ## 开发指南 ### QML 开发 - QML 文件位于 `GMediaPlayer/qml/` - 主 QML 模块 URI: `FFmpegDemo.qml` - 关键 QML 组件: - `Main.qml`: 应用程序主窗口,智能控制栏显示 - `MediaControlBar.qml`: 半透明控制栏,支持动画 - `CustomProgressBar.qml`: 交互式进度条,平滑跳转 - `VideoDisplay.qml`: 视频显示组件 - `Utils.js`: 时间格式化等实用工具 ### C++ 开发 - MediaCore 接口头文件在 `MediaCore/interface/` - 实现文件在 `MediaCore/src/` - 应用程序特定代码在 `GMediaPlayer/src/` - 使用观察者模式实现 MediaCore 到渲染器的松耦合 ### 重要约定 - 使用 RAII 管理资源(FFmpeg 上下文、Qt 对象) - 实现适当的错误处理和回调 - 遵循观察者模式实现组件间松耦合 - 在适当的地方使用现代 C++20 特性 ## 依赖库 ### 外部依赖 - **FFmpeg**: 视频/音频解码和格式处理 - **SDL2**: 音频输出和平台抽象 - **spdlog**: 日志框架(仅头文件) - **Qt6**: UI 框架和多媒体支持 ### 链接库 #### FFmpeg 库 - avcodec, avformat, avutil, swscale, swresample 等 #### DirectX 库 - d3d9, d3d11, dxva2 用于硬件加速 #### Qt6 模块 - Core, Widgets, Gui, OpenGL, Multimedia, Quick ## 项目状态 当前项目处于积极开发阶段: ### ✅ 已完成功能 - [x] 视频播放(多种格式支持) - [x] 多重渲染后端(D3D9、D3D11、OpenGL) - [x] 硬件加速(DXVA2) - [x] 现代化 QML 用户界面 - [x] 播放列表管理 - [x] 多线程架构 ### 🚧 开发中功能 - [ ] 音频播放完善 - [ ] 更多编解码器支持 - [ ] 性能优化 ### 📋 计划功能 - [ ] 音视频同步优化 - [ ] 视频播放列表 - [ ] 视频播放控制 ## 许可证 本项目采用 MulanPSL-2.0 许可证 - 详见 [LICENSE](LICENSE) 文件 ## 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 联系方式 如有问题或建议,请通过 Issue 联系我们。