5.4 KiB
5.4 KiB
Hightube - 开源直播平台项目文档与实现方针
1. 项目概述
Hightube 是一个针对网络应用开发课程大作业的跨平台开源个人直播平台。旨在提供用户注册、登录、开启个人直播室以及实时评论(后续迭代弹幕)等互动功能。
2. 技术栈架构与评估
2.1 客户端 (Flutter)
- 目标平台: Windows, Linux, Android, Web
- 优势: 一套代码编译多端运行,UI 表现力强且一致性好。
- 挑战: 桌面端和 Web 端的音视频采集(推流)和硬件加速播放(拉流)生态可能略逊于移动端,需仔细调研第三方插件的跨平台支持度(例如
video_player,fvp等拉流插件;推流端前期可借用 OBS,后期再实现原生/插件推流)。
2.2 服务端 (Go 或 Rust)
- 推荐选型: Go (Golang)。
- 理由: 直播服务本质是一个处理大量高并发连接和音视频协议的网络应用。Go 的 Goroutine 并发模型非常适合处理长连接(如 WebSocket 和 RTMP 推拉流)。且 Go 拥有完善的流媒体和网络编程库,可以让你专注于业务逻辑而非底层内存管理,开发周期更贴合大作业的进度。
- 备选: Rust。性能卓越且内存安全,是极佳的加分项,但处理复杂协议的学习曲线和开发成本较高。
2.3 数据库与存储
- 关系型数据库: SQLite
- 理由: 作为课程大作业初期/MVP版本,SQLite 轻量且无需额外配置服务端即可运行。
- 扩展性设计: 直播和评论的并发写入特性,如果后续升级或实际部署,SQLite 的并发写性能可能是瓶颈。建议在后端使用 ORM 框架(如 Gorm/SeaORM),这样可以利用同一套代码在未来无缝迁移至 PostgreSQL 或 MySQL。
3. 核心架构设计
系统将分为三个主要逻辑模块:
- API 服务 (业务后端): 处理用户认证(注册/登录/JWT)、直播间创建/配置管理、获取推流凭证(Stream Key)、以及持久化历史评论。
- Media 服务 (流媒体中心): 核心服务。负责接收主播的音视频流(推荐使用 RTMP 协议接入),并将其分发(转封装/转码)给观众端(例如 HTTP-FLV, HLS 或 WebRTC)。初期可以将该服务与 API 服务跑在同一个进程内。
- 互动服务 (WebSocket): 为当前活跃的直播间提供低延迟的实时评论广播和弹幕分发通道。
4. 阶段性迭代计划 (Roadmap)
本项目采用敏捷开发、逐步迭代的策略,从核心底层做起,直至完善前端交互。
Phase 1: 核心流媒体服务构建 (推拉流基石)
目标:跑通纯流媒体的“推、拉”数据通路,这是整个项目的核心难点。
- 技术确认: 确定后端的开发语言与流媒体协议(首选 RTMP 接收,HTTP-FLV / HLS 分发)。
- 服务端搭建: 实现 TCP 监听,能够解析基础的推流握手和音视频数据包包头(可手写核心逻辑或引入开源基础库辅助)。
- 推流测试: 不写前端推流代码,直接使用第三方工具(如 OBS Studio)配置推流地址向我们的本地服务器推流。
- 拉流测试: 不写前端播放器,直接使用本地播放器(如 VLC)或基于网页的测试工具(flv.js)测试拉取直播流。
Phase 2: 基础业务 API 与数据库搭建
目标:建立平台的基本业务逻辑和数据存储,实现账号与权限控制。
- 数据库设计: 引入 ORM,设计基本的
users(用户表) 和rooms(直播间表)。 - API 开发:
- 用户注册与登录,颁发 JWT Token。
- 获取/重置个人专属推流密钥(Stream Key)。
- 获取当前活跃状态的直播间列表。
- 安全鉴权: 改造 Phase 1 的流媒体服务,在接收推流时校验推流地址中的 Stream Key 是否合法并对应正确的用户房间。
Phase 3: 客户端 MVP 版本构建 (观看端)
目标:用户可以使用我们自己的 Flutter 客户端进行注册并观看直播。
- Flutter 框架初始化: 搭建跨端项目架构,配置网络请求拦截器(携带 Token)。
- 基础 UI 开发:
- 登录与注册页面。
- 平台首页(大厅),展示通过 API 获取的直播列表卡片。
- 直播间详情页。
- 播放器集成: 引入并在四个平台上跑通 Flutter 视频播放插件,实现在直播间页面动态加载 HTTP-FLV 或 HLS 流媒体链接。
Phase 4: 实时互动服务 (评论系统)
目标:增加平台的社交互动性。
- 后端 WebSocket 服务: 建立基于
room_id的 WebSocket 广播群组(Hub 模式)。 - 前后端联调: 客户端进入直播间后自动连接 WebSocket 服务,实现收发消息。
- 弹幕预演: 客户端除了在底部展示聊天列表外,开始尝试利用 Flutter 的
Stack布局机制,实现简单的文字横向漂移弹幕层。
Phase 5: 客户端开播体验 (完全体)
目标:摆脱 OBS,使用我们的应用自行调用软硬件资源进行推流开播。
- 开播 UI: 客户端新增“主播控制台”界面。
- 多端推流探究: 调研 Flutter 中的音视频采集和推流插件(如
flutter_webrtc或相机结合底层编码推流库)。 - 整体整合与测试: 对四大平台进行兼容性测试、性能调优和 UI 美化,准备课程答辩演示。
本文档将作为整个大作业项目的开发基准与进度追踪参考。