一个基于 Go + Vue 3 的现代化视频转码管理系统,提供流式转码、实时监控、预设管理等功能。
# 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.yaml 为 config.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" # 输出标识
访问 http://localhost:5173/#/login
admin详见 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 - 系统状态后端:
前端:
internal/api/handlers_*.go 添加处理器web/src/api/*.js 添加方法web/src/stores/*.js 添加 actionsweb/src/views/ 创建页面# 后端调试
go run -tags dev ./cmd/transcoder -config config.yaml
# 前端调试
cd web && npm run dev
# 查看日志
tail -f /var/log/transcoder/*.log
# 后端测试
go test ./...
# 前端测试
cd web && npm run test
MIT License
欢迎提交 Issue 和 Pull Request!
Made with ❤️ by Transcoder Team