StreamUI:Layui + FastAPI 写的 ZLMediaKit 管理台,默认密码是 streamui
项目信息
- 项目:StreamUI(
lmk123568/StreamUI),MIT 许可 - 仓库:
- 依赖与致谢:ZLMediaKit、Layui、FastAPI
- 默认访问端口:
10800;默认密码:streamui - 项目被 ZLMediaKit 官方推荐
名字里的 Stream 取自 ZLMediaKit 的「流」概念,UI 取自 Layui,界面主色 #16baaa。
它管的是流,不是自己跑流
StreamUI 是一个极简轻量的视频流媒体管理平台,开箱即用、易于扩展。
部署前先把定位分清:它不是流媒体服务器本身。真正做拉流、推流、协议转换、转封装的是底层的 ZLMediaKit,StreamUI 做的是把这些能力包一层 Web 管理台——配置在哪里改、拉流/推流入口在哪里加、播放和录制在哪里看,这些操作都在 StreamUI 里点。你装的是管理台,跑流的还是 ZLMediaKit。
能力清单
- 拉流接入与拉流保存:RTSP、RTMP、HLS、WebRTC、RTP、GB28181 等
- 推流接入:RTSP、RTMP、RTP
- 接入流分发:RTSP、WebRTC、RTMP、FLV、HLS、HLS-fMP4、HTTP-TS、HTTP-fMP4
- 多屏播放:1x1、2x2、3x3
- 本地录制、回放、下载、自动清理
项目重在流管理。ONVIF、GB28181 设备的识别、流接入、云台控制暂不支持——也就是说,有现成流地址可以接进来,但设备侧那套发现与控制不在它的范围内。
部署:Docker Compose
推荐用 Docker Compose 部署:
cd ./docker
docker compose up -d
起来之后访问 http://{服务器IP}:10800 登录,默认密码 streamui,改密码的位置在 frontend/login.html。
基础配置里的几个取舍
- 开启按需转发:省带宽,代价是第一个观众要等转发流启动。
- 关掉不需要的协议转发:比如不需要分发 RTMP,就把 RTMP 关掉。
- 开启 faststart:播放可以快速 seek,但录制时会多占存储。
- 增大 GOP 缓存:播放更平滑,事件回溯的时间窗口变长,代价是内存占用上升。
更多选项参考 ZLMediaKit 的 conf 配置:
架构与代码结构
技术选型很直接:前端不用 Vue/React,后端不用 Java Spring,选的是 Layui + FastAPI。
backend/
db
main.py # 接口
scheduler.py # 定时任务
utils.py # 工具
frontend/
assets
index.html
login.html
pages/
home.html
playback.html
pull-stream.html
settings.html
push-stream.html
wall.html
后端接口、定时任务、工具函数分开放;前端按页面切分,wall.html 对应多屏墙,playback.html 对应回放,pull-stream.html / push-stream.html 分别管拉流和推流入口。
适合与不适合
适合:已经有可用的流地址,想快速做接入、分发、录制、多屏监看的自托管场景;想要一个轻量管理台、不想在前端框架和 Java 后端上再堆一套技术栈的场景。
不适合:要靠它做 ONVIF/GB28181 设备发现、云台控制的场景;以及希望它自己承担媒体转发内核的场景——那部分是 ZLMediaKit 的活。
安全注意点
默认密码 streamui 是开箱即用设计的一部分,也意味着任何拿到 10800 端口访问权的人,用默认密码就能进管理台。部署完第一件事是改 frontend/login.html 里的密码,别把 10800 直接裸暴露在公网,放在内网或反向代理后面再对外。
License:MIT。