编程 StreamUI:Layui + FastAPI 写的 ZLMediaKit 管理台,默认密码是 streamui

2026-10-09 00:04:30

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。

推荐文章

程序员茄子在线接单