StreamHub:给 LiveKit SFU 套一层管理面,单域名自托管,一条 compose 起全套
项目信息
- 仓库:https://github.com/streamhubstudio/streamhub
- 官网:https://streamhub.studio
- 文档:http://docs.streamhub.studio
- Demo:https://streamhub.studio/demo
- License:AGPL-3.0
StreamHub 是自托管开源媒体服务器,基于 LiveKit,定位是 AntMedia 的 drop-in 替代。它把 LiveKit SFU 包一层管理层,提供多租户 apps、RTMP/WHIP/RTSP 接入、WebRTC+HLS 播放、录制到 per-app S3、可嵌入播放器、签名 webhook、REST API、React 仪表盘,全部在单域名 + 自动 HTTPS 后面。一个 docker compose up 起全套。
相比裸 LiveKit SFU 多出的能力
自己装 LiveKit 裸 SFU,拿到的是 signaling 和媒体转发。StreamHub 在其上加了管理台、多租户 app、录制到 S3、embed SDK、webhook 和 API。
- 多租户 apps:隔离命名空间,各有 token/配置/S3 bucket。
- 接入:WebRTC 推流、RTMP、WHIP、RTSP(经 ffmpeg relay)。
- 播放:WebRTC(亚秒)+ HLS(
/hls///index.m3u8);可嵌入播放器 + 浏览器 SDKstreamhub-adaptor(AntMedia WebRTCAdaptor 的 shim,基于 livekit-client),地址/sdk/streamhub-adaptor.global.js。 - 录制→S3:
POST /recording/start-> room-composite MP4 -> 上传到 app 的 S3 -> snapshot + VOD,本地文件清理(已验证 2×H.264 720p -> Wasabi)。 - 签名 webhook(HMAC)+ MP4 切分 + 截图。
- REST API(全局 + per-app),Swagger 在
/api/v1/docs,sk_bearer token 保护。 - React 仪表盘(Vite + Tailwind),break-glass 管理员 JWT 登录。
- RBAC + 配额,分阶段安全上线(off -> log -> on)。
- 网络安全:应用内 IP 允许/屏蔽(CIDR,IPv4+IPv6)+ fail2ban 式自动封禁(坏登录、重放 magic link、无效 token),loopback/私网地址永不被锁。
- 插件(自动发现):face-blur(deface) 实时人脸马赛克叠加、YOLO 目标检测;插件可拥有自己的 worker 进程。
- per-app MQTT 事件 + 高延迟告警。
- 会话管理、Meet 风格多方会议样例。
- GPU/NVENC-ready 镜像:core 镜像带 ffmpeg;取消注释
gpus: all(需 nvidia-container-toolkit)启用 NVENC 转码与 CUDA CV 推理。
架构与端口
https://streamhub.example.com (Caddy, auto-TLS, 1 cert)
/rtc -> LiveKit signaling (wss/WebRTC)
/* -> streamhub-core (NestJS): REST API + React SPA + HLS + browser SDK
WebRTC 媒体(UDP 7882)和 RTMP(1935) 直连服务器 IP
livekit-server SFU · signaling 7880 · tcp 7881 · media 7882/udp
livekit/ingress RTMP 1935 · WHIP 8080
livekit/egress room-composite 录制 -> -> S3
redis 协调 ingress/egress + BullMQ 任务队列
streamhub-core API + 提供 SPA + JWT 登录 + SQLite + S3 + jobs
真实域名需先加 DNS A 记录(DNS-only,不要 Cloudflare 代理)并开防火墙:80,443,7880/tcp,7881/tcp,7882/udp,1935/tcp。
安装:install.sh 或 docker compose
要求 Linux 主机 + 公网 IP + Docker + Compose 插件。LiveKit 媒体用 host 网络,所以只面向 Linux,不支持 macOS Docker Desktop。
方式 A:install.sh
curl -fsSL https://www.streamhub.studio/install.sh | sudo bash
面向 Ubuntu Server 24.04/26.04 LTS x64(其他环境会中止),幂等可重跑更新。脚本会装 Docker(+nginx/certbot 做 TLS),clone 到 /opt/streamhub,询问域名 + 管理员密码,写 .env 强随机密钥,构建启动全套,等健康,seed sk_ API token,打印仪表盘 URL/凭据/token 和加入边缘节点的 cluster token。--non-interactive --domain --email 全脚本化;--join --cluster-token --origin-ip 把新机器变成媒体边缘节点。
方式 B:手动 compose
git clone https://github.com/streamhubstudio/streamhub.git
cd streamhub
cp .env.example .env # 改 STREAMHUB_DOMAIN, ACME_EMAIL, secrets...
docker compose up -d --build
docker compose exec -T core node deploy/seed-token.js "$(grep '^STREAMHUB_API_TOKEN=' .env | cut -d= -f2)"
打开 https:///(仪表盘)、/api/v1/docs(Swagger)、curl http://127.0.0.1:3020/api/v1/health。
Day-2
docker compose logs -f core
docker compose down
git pull && docker compose up -d --build
.env、数据目录与 S3
所有配置在单个 .env(.env.example 全注释)。数据(SQLite DB、per-app 录制/截图/HLS、日志、SDK)在 DATA_DIR,从 STREAMHUB_HOST_DATA_DIR(默认 ./data)bind-mount 进 core 和 egress 两个容器。per-app S3 凭据放 data/secrets.json (chmod 600),从 app 的 config.yaml 引用。
目录与文档
docker-compose.yml(core+LiveKit+ingress+egress+redis+Caddy)install.shdeploy/(Dockerfile、Caddyfile、entrypoint、seeder + 裸机 systemd/nginx)streamhub-core/(Node 20 + NestJS)streamhub-web/(React+Vite+Tailwind)streamhub-adaptor/(TS 浏览器 SDK)streamhub-docs/
文档:streamhub-docs/(架构、运维、API、webhook),INSTALL.md 裸机 runbook,SPEC.md 产品规格。
许可与 EE 边界
open-core。本仓库自托管核心(streamhub-core/、streamhub-web/、yolo-worker/、deploy/ 及 Compose)为 AGPL-3.0-only;浏览器 SDK streamhub-adaptor/ 是 MIT,便于嵌入;商业 EE 模块单独授权,不在仓库内。