# cpp-videoplayer **Repository Path**: ly121381/cpp-videoplayer ## Basic Information - **Project Name**: cpp-videoplayer - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-21 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LimePlayer 视频点播平台 **LimePlayer** 是一个基于 **C++/Qt 桌面客户端** 与 **微服务后端**(包括用户、视频、文件、转码等)构建的视频点播系统。该系统支持视频播放、弹幕、点赞、收藏、关注等功能,并且能够管理视频、用户等数据。 > **项目背景** 本项目起源于个人学习微服务架构和视频点播系统的实践,目的是通过构建一个完整的视频播放平台,全面提升对后端微服务、C++ 客户端开发和多线程、异步编程的理解与实践能力。 --- ## ✨ 功能概览 ### 🖥 **客户端(LimePlayer)** 客户端是使用 **Qt** 和 **libmpv** 播放器实现的桌面应用,支持以下功能: - **用户管理** - 支持临时登录与持久登录。 - 可以查看用户信息、更新头像等。 - **视频浏览与播放** - 支持 **m3u8** 流式播放,视频分片下载。 - 视频播放控制:播放、暂停、音量调节、进度拖动。 - 视频信息展示:视频标题、时长、上传者等。 - **弹幕系统** - 支持实时发送弹幕并在播放器上方滚动展示。 - 弹幕与视频播放同步,暂停视频时暂停弹幕显示。 - **视频互动** - 点赞:用户可对视频进行点赞。 - 收藏:视频收藏到用户的个人收藏列表。 - 关注:用户可以关注其他用户,查看其上传的视频。 - **管理功能** - 只有管理员角色才能对上传的视频进行审核(通过/拒绝)。 - **UI 设计** - 无边框窗口设计,自定义拖拽。 - 自动隐藏播放控制条,提升用户观看体验。 - 使用 Qt 自定义控件设计播放界面。 --- ### 🧩 **后端微服务(C++)** 后端使用 **C++** 构建多微服务架构,服务间通过 RPC 进行通信,主要功能包括: - **网关服务(`svc_gateway`)** - 对外暴露 HTTP API,接收客户端请求,转发至实际业务服务。 - 通过 Etcd 注册中心动态获取服务信息。 - **视频服务(`svc_video`)** - 管理视频数据:视频元数据、播放地址、封面、时长等。 - 提供视频分类、标签功能,支持视频搜索。 - **用户服务(`svc_user`)** - 管理用户信息:注册、登录、个人资料、关注关系。 - 提供用户认证和权限控制。 - **文件服务(`svc_file`)** - 负责视频文件、封面、弹幕的上传、删除和存储管理。 - **转码服务(`svc_transcode`)** - 异步处理视频转码任务,将上传的视频转码为不同的格式。 - **消息队列与服务发现** - 使用 RabbitMQ 作为消息队列,处理视频上传完成后触发的异步任务(如转码、文件删除等)。 - 服务间通信通过 **brpc**(基于 Protobuf)实现,使用 **Etcd** 做服务注册与发现。 --- ## 🛠 **技术栈** ### 客户端 - **语言**:C++17 - **框架**:Qt Widgets(跨平台桌面应用开发框架) - **播放器内核**:libmpv(基于 mpv) - **网络通信**:QNetworkAccessManager + HTTP/JSON - **UI**:自定义控件与布局,使用 Qt 信号槽机制处理事件 - **数据模型**:自定义 `DataCenter` 管理全局数据,分离网络请求与 UI 逻辑 ### 后端 - **语言**:C++ - **RPC 框架**:brpc(高性能的 RPC 框架) - **配置管理**:gflags(命令行参数解析库) - **服务发现**:Etcd(分布式服务注册与发现) - **日志管理**:limelog(自定义日志库) - **ORM**:ODB(C++ ORM,用于与 MySQL 交互) - **消息队列**:RabbitMQ(用于异步任务) - **序列化**:Protocol Buffers(用于服务间消息传递) --- ## 🤝 **贡献与开发** 欢迎贡献代码!你可以: 1. Fork 该仓库 2. 提交 Pull Request 3. 提交 bug 和功能请求 ### 贡献者 -ly --- ## 🎯 **项目亮点和难点** ### 亮点 1. **跨平台桌面客户端**:通过 Qt 和 libmpv,实现跨平台视频播放功能,支持流式播放、倍速播放、进度条拖动。 2. **微服务架构**:后端通过多微服务实现模块化设计,使用 brpc 作为 RPC 框架,Etcd 作为服务发现,RabbitMQ 进行异步任务处理。 3. **弹幕与视频交互**:自定义弹幕系统,支持实时发送与动态渲染,弹幕与视频播放进度同步。 4. **Docker 部署支持**:使用 Docker 容器化部署后端服务,简化开发环境配置。 ### 难点 1. **C++ 播放器封装**:libmpv 播放器与 Qt 的事件循环和信号槽机制结合较为复杂,涉及多线程和进程间通信。 2. **微服务间的通信**:使用 brpc 进行 RPC 调用时,需要考虑服务间的接口兼容性与网络延迟问题。 3. **数据库设计与性能优化**:如何设计合理的表结构、索引优化,并处理高并发请求。 --- ## 🧑‍💻 **致谢** 感谢所有开源项目、库和教程: - [libmpv](https://github.com/mpv-player/mpv) - [Qt](https://www.qt.io/) - [brpc](https://github.com/apache/brpc) - [etcd](https://github.com/etcd-io/etcd) - [RabbitMQ](https://www.rabbitmq.com/) --- ## **联系方式** - 邮箱:[ib30583239@126.com]