一个基于 Node.js + Express + Vue2 的直播录制系统,支持定时录制、后台录制和实时状态监控。
- ✅ 即时录制:立即开始录制直播流
- ⏰ 定时录制:支持设置开始时间和结束时间
- 🔄 重复录制:每周同一时间自动录制
- 📊 实时监控:WebSocket 实时推送录制进度
- 💾 后台录制:关闭页面后继续录制
- 🐳 Docker 部署:一键部署到容器
- 🎨 友好界面:Vue2 + Element UI 前端界面
- ✅ FLV (
https://example.com/stream.flv) - ✅ HLS (
https://example.com/stream.m3u8) - ✅ RTMP (
rtmp://example.com/stream)
- Node.js 18+
- Express 4.x
- FFmpeg(视频录制)
- WebSocket(实时通信)
- Cron(定时任务)
- Vue 2.7+
- Element UI
- Moment.js(时间处理)
# 克隆项目
cd LiveStreamRecorder
# 构建并启动容器
docker-compose up -d
# 查看日志
docker-compose logs -f
# 访问应用
# 前端页面: http://localhost:8088
# 后端 API: http://localhost:3009- Node.js 18+
- FFmpeg(需要安装在系统中)
# 1. 克隆项目
cd LiveStreamRecorder
# 2. 安装并启动后端
cd backend
yarn install
yarn start
# 3. 新开终端,安装并启动前端开发服务
cd frontend
yarn install
yarn dev
# 4. 浏览器打开
# http://localhost:8080- 在"即时录制"区域输入直播地址
- 可选:输入录制名称(用于标识文件)
- 点击"开始录制"
- 可以实时看到录制时长和文件大小
- 点击"停止录制"结束录制
- 在"定时录制"区域输入直播地址
- 输入录制名称
- 设置开始时间
- 可选:设置结束时间(不设置则需手动停止)
- 可选:开启"重复录制"(每周同一时间自动录制)
- 点击"添加定时任务"
Docker Compose 部署时,录制文件存储在本地 recordings/ 目录并挂载到容器 /app/recordings。
手动运行后端时,录制文件默认存储在 backend/recordings/ 目录。
要访问录制的文件:
# Docker Compose 方式
ls recordings
# 手动运行方式
ls backend/recordingsLiveStreamRecorder/
├── backend/ # 后端代码
│ ├── app.js # Express 主入口
│ ├── routes/ # API / WebSocket 路由
│ └── utils/ # 录制与定时任务管理
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── main.js # Vue 主入口
│ │ └── App.vue # 主组件
│ ├── public/
│ └── package.json
├── recordings/ # 录制文件存储(Docker 卷)
├── docker-compose.yml
└── README.md
// 心跳
'ping'// 录制开始
{ type: 'RECORDING_STARTED', payload: recording }
// 录制进度
{ type: 'RECORDING_PROGRESS', payload: { id, duration, size } }
// 录制完成
{ type: 'RECORDING_COMPLETED', payload: recording }
// 录制错误
{ type: 'RECORDING_ERROR', payload: { id, error } }
// 定时任务添加
{ type: 'SCHEDULE_ADDED', payload: schedule }# 开始录制
POST /api/start-recording
# 停止录制
POST /api/stop-recording
# 获取录制列表
GET /api/recordings
# 获取录制状态
GET /api/recording-status
# 获取已完成录制
GET /api/completed-recordings
# 删除已完成录制
POST /api/remove-completed-recordings
# 添加定时任务
POST /api/add-schedule
# 删除定时任务
POST /api/remove-schedule
# 获取定时任务列表
GET /api/schedules| 变量名 | 说明 | 默认值 |
|---|---|---|
| PORT | 服务端口 | 3000 |
| NODE_ENV | 运行环境 | production |
| VUE_APP_BASE_API | 前端构建时使用的后端 API 地址,same-origin 表示走前端 Nginx 反向代理 |
same-origin |
| VUE_APP_WS_API | 前端构建时使用的 WebSocket 地址,same-origin 表示走前端 Nginx 反向代理 |
same-origin |
项目已内置飞牛 fnOS Docker 应用包目录 fnos/,包含:
manifest:应用元信息和入口端口config/resource:Docker 项目和录制目录共享config/privilege:应用用户权限cmd/main:应用中心运行状态检查app/docker/docker-compose.yaml:fnOS 上运行的 Docker Compose 配置app/ui/config:桌面入口配置
先确保已经安装 fnpack,然后执行:
VERSION=1.0.0 \
IMAGE_NAMESPACE=sarmay \
IMAGE_PREFIX=livestreamrecorder \
scripts/build-fnos-package.sh生成的 .fpk 文件可在飞牛应用中心手动安装。
GitHub Actions 已配置在推送 tag 时自动构建:
git tag v1.0.0
git push origin v1.0.0流程会自动:
- 构建并推送后端镜像到 Docker Hub
- 构建并推送前端镜像到 Docker Hub
- 将 tag 版本写入
fnos/manifest - 将对应镜像 tag 写入
fnos/app/docker/docker-compose.yaml - 使用
fnpack构建.fpk - 将
.fpk上传到 GitHub Release
发布前需要在 GitHub 仓库 Secrets 中配置:
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
A: Docker Compose 部署时,文件在项目根目录的 recordings/。手动运行后端时,文件在 backend/recordings/。
A: 不会。录制进程在服务端运行,关闭页面不影响录制,除非手动停止或到达结束时间。
A: 只要提供 FLV、HLS 或 RTMP 格式的直播地址,都可以录制。
docker-compose logs -fdocker-compose build
docker-compose up -dMIT