logo
0
0
WeChat Login
feat: 增强流管理和认证功能

视频转码管理系统

一个基于 Go + Vue 3 的现代化视频转码管理系统,提供流式转码、实时监控、预设管理等功能。

✨ 功能特性

  • 🎥 流管理 - 创建、编辑、启动、停止视频转码流
  • 📊 实时监控 - Dashboard 实时展示流状态和系统指标
  • 📝 日志管理 - 操作日志、流日志查看与筛选
  • ⚙️ 预设管理 - 转码配置模板的 CRUD 操作
  • 🔐 认证授权 - JWT 认证 + RBAC 角色控制
  • 🌓 深色模式 - 自动检测系统主题,支持手动切换
  • 🔍 输入预检测 - 添加流前检测输入源可用性

🚀 快速开始

环境要求

  • Go: 1.21 或更高
  • Node.js: 18.0 或更高
  • FFmpeg: 6.0 或更高 (系统已安装)

开发模式

# 1. 克隆项目 git clone <repository-url> cd transcoder # 2. 启动前端开发服务器 cd web npm install npm run dev # 前端运行在 http://localhost:5173 # 3. 启动后端服务 (新终端) cd .. go run -tags dev ./cmd/transcoder -config config.yaml # 后端运行在 http://localhost:8080

生产部署

# 1. 构建前端 cd web npm run build # 输出到 web/dist/ # 2. 构建后端 (嵌入前端资源) cd .. go build -o transcoder ./cmd/transcoder # 3. 运行服务 ./transcoder -config config.yaml

📚 项目结构

transcoder/ ├── cmd/transcoder/ # 主程序入口 │ ├── main.go # 程序入口,负责初始化和优雅关闭 │ ├── embed.go # 生产环境资源嵌入 │ └── embed_dev.go # 开发环境配置 ├── internal/ # 内部包(应用私有代码) │ ├── api/ # HTTP API 层 │ │ ├── server.go # 路由配置和服务器管理 │ │ ├── handlers_*.go # 各模块处理器 │ │ ├── middleware.go # 中间件(CORS、日志、限流) │ │ ├── ratelimit.go # 限流中间件实现 │ │ ├── access_logger.go # 访问日志中间件 │ │ └── operate_logger.go# 操作日志记录 │ ├── auth/ # 认证授权模块 │ │ ├── auth.go # JWT 认证管理器 │ │ ├── handlers.go # 认证相关 API 处理器 │ │ └── middleware.go # 认证中间件和 RBAC │ ├── config/ # 配置管理 │ │ ├── config.go # 配置结构和验证 │ │ ├── watcher.go # 配置文件热重载 │ │ └── bootstrap_auth.go# 默认管理员初始化 │ ├── engine/ # 转码引擎抽象层 │ │ ├── process.go # 进程调用实现 │ │ ├── builder.go # FFmpeg 命令构建器 │ │ └── probe.go # 输入源预检测 │ ├── ffsdk/ # FFmpeg SDK 封装 │ │ ├── ffmpeg.go # FFmpeg 能力检测 │ │ ├── builder.go # 转码请求构建器 │ │ └── pusher/ # 流推送管理 │ ├── logger/ # 日志系统 │ ├── metrics/ # Prometheus 指标 │ ├── persistence/ # 持久化存储 │ │ └── persistence.go # 流状态和配置持久化 │ ├── remote/ # 远程控制接口 │ ├── snapshot/ # 截图功能 │ ├── storage/ # 存储抽象(本地/OSS) │ └── stream/ # 流管理核心 │ ├── manager.go # 流生命周期管理 │ └── health.go # 健康检查队列 ├── pkg/ # 公共包(可被外部导入) │ ├── errors/ # 错误码定义 │ └── validator/ # 输入验证工具 ├── web/ # 前端应用 (Vue 3) │ ├── src/ │ │ ├── api/ # API 客户端 │ │ ├── stores/ # Pinia 状态管理 │ │ ├── views/ # 页面组件 │ │ ├── components/ # 公共组件 │ │ ├── composables/ # 组合函数 │ │ └── utils/ # 工具函数 │ ├── vite.config.js # Vite 配置 │ └── package.json ├── docs/ # 文档 ├── configs/ # 配置示例 └── README.md

🔧 配置说明

复制 config.example.yamlconfig.yaml 并修改配置:

server: host: "0.0.0.0" # 监听地址 port: 8080 # 监听端口 cors_origins: # CORS 允许的域名,生产环境禁止配置 "*" - "http://localhost:5173" auth: enabled: true # 是否启用认证 secret: "your-secret-key" # JWT 密钥,生产环境应至少 16 字符 expire: 24 # Token 过期时间(小时) users: # 用户列表 - username: "admin" password: "$2a$10$..." # bcrypt 哈希密码 role: "admin" # 角色: admin/user ffmpeg: binary: "ffmpeg" # FFmpeg 可执行文件路径 ffprobe: "ffprobe" # FFprobe 可执行文件路径 log_level: "warning" # FFmpeg 日志级别 engine: "process" # 引擎类型: process/ffsdk hardware: enabled: true # 是否启用硬件加速 decoder: "rkmpp_h264" # 硬件解码器 encoder: "rkmpp_h265" # 硬件编码器 fallback_to_software: true # 硬件失败时回退软编码 log: level: "info" # 日志级别: debug/info/warn/error file: "/var/log/transcoder/transcoder.log" access_log: "/var/log/transcoder/access.log" operate_log: "/var/log/transcoder/operate.log" stream_log_dir: "/var/log/transcoder/streams" data_dir: "./data" # 持久化数据存储目录 streams: # 流配置列表... - name: "camera_01" # 流名称(唯一标识) enabled: true # 是否启用 input: "rtsp://..." # 输入源地址 output_key: "cam1" # 输出标识

📖 使用指南

1. 登录系统

访问 http://localhost:5173/#/login

  • 若首次启动且未配置用户,会自动生成管理员账号并写回配置文件
  • 默认用户名: admin
  • 默认密码: 启动日志中输出一次,请立即修改

2. 添加转码流

  1. 进入 流管理 页面
  2. 点击 添加流 按钮
  3. 填写流配置:
    • 流名称 (字母、数字、下划线)
    • 输入地址 (rtsp/rtmp/http)
    • 点击 预检测 验证输入源
    • 配置视频/音频编码参数
  4. 提交创建

3. 查看流详情

  • 点击流卡片进入详情页
  • 查看实时统计 (FPS, 码率)
  • 切换到 Logs 选项卡查看流日志

4. 管理预设

  1. 进入 预设管理
  2. 创建新预设或编辑现有预设
  3. 在添加流时可选择应用预设

5. 查看操作日志

  1. 进入 操作日志 (仅管理员)
  2. 使用筛选器按操作类型/日期查询
  3. 查看用户操作记录

🔌 API 文档

详见 docs/API.md

主要端点:

  • POST /api/v1/auth/login - 登录
  • GET /api/v1/streams - 获取流列表
  • POST /api/v1/streams - 创建流
  • POST /api/v1/streams/:name/start - 启动流
  • GET /api/v1/system/status - 系统状态

🛠️ 开发指南

技术栈

后端:

  • Go 1.21+
  • Gin (Web 框架)
  • JWT (认证)
  • FFmpeg (转码)

前端:

  • Vue 3 (组合式 API)
  • Vite (构建工具)
  • Pinia (状态管理)
  • Vue Router (路由)
  • ECharts (图表)
  • TailwindCSS (样式)

添加新功能

  1. 后端 API: 在 internal/api/handlers_*.go 添加处理器
  2. 前端 API 客户端: 在 web/src/api/*.js 添加方法
  3. 状态管理: 在 web/src/stores/*.js 添加 actions
  4. 页面组件: 在 web/src/views/ 创建页面

调试

# 后端调试 go run -tags dev ./cmd/transcoder -config config.yaml # 前端调试 cd web && npm run dev # 查看日志 tail -f /var/log/transcoder/*.log

📊 性能优化

  • ✅ 路由懒加载
  • ✅ 代码分割 (vendor, echarts, icons)
  • ✅ 搜索防抖 (300ms)
  • ✅ 图片懒加载
  • ✅ 生产环境压缩
  • ✅ CSS 代码分割

🧪 测试

# 后端测试 go test ./... # 前端测试 cd web && npm run test

📝 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📧 联系方式

  • 项目地址:
  • 文档: docs/
  • Issue: /issues

Made with ❤️ by Transcoder Team