在 MediaMTX 中实现已确认的原生轻量 RTSP 管理页面,由 MediaMTX 自身托管,用于在受控局域网内增加、编辑、删除静态 RTSP 源,查看运行状态,并通过 WebRTC/HLS 预览。
6a90f1d7191a826306a7f403
PASS
embed
/admin/
/admin
prefers-reduced-motion
使用当前已存在的 Control API:
GET /v3/config/paths/list
GET /v3/config/paths/get/{name}
POST /v3/config/paths/add/{name}
PATCH /v3/config/paths/patch/{name}
DELETE /v3/config/paths/delete/{name}
GET /v3/paths/list
首期只管理静态 RTSP source 所需字段:
要求:
action: api
innerHTML
:8889
:8888
.github
实现前先以代码图或源码确认最终边界,优先考虑:
internal/api/
internal/api/*_test.go
以上是建议而非预先锁死的文件列表;如架构发现更合适的现有扩展点,应在工单中说明。
至少执行并记录:
go test ./internal/api ./internal/core
go test ./...
python dev_scripts/harness.py check --strict
python dev_scripts/harness.py sync --check
git diff --check
docs/maintainer/
69f6a337a250440c7c5043c8d75122d8e5bfd0a6
a3ca54ca
origin/main
当前阶段:待实施。本次只建立并登记生产工单,尚未修改 MediaMTX 产品代码。
rg
ip_camera.env
app.css
app.js
/v3/config/paths/list
/v3/paths/list
available
source
/v3/config/global/get
nosniff
internal/api/api.go
internal/api/api_admin.go
internal/api/api_admin_test.go
internal/api/admin/index.html
internal/api/admin/app.css
internal/api/admin/app.js
提交:
6465a11074673b027251e0b81a11dbe46bb2ed39 feat: add embedded RTSP admin console (#3)
node --check internal/api/admin/app.js
go test ./internal/api -run '^TestAdmin' -count=1
go test ./... -run '^$'
go test -tags enable_linters ./internal/linters/docsorder
python -m unittest discover -s tests -v
v1.7.1
863cc31280d388e6feb9e08d0b246b98b88dd6a16fd81d9ee15dd3e3b2ecc9eb
未运行完整 go test ./...:本机已有用户服务占用 127.0.0.1:9997,上游 API 集成测试固定使用该端口并发生 bind 冲突;没有停止或修改该进程。以管理页专项测试和全部包编译作为本次替代证据。
127.0.0.1:9997
使用仅含 192.0.2.x 保留地址和虚构凭据的隔离配置验证:
192.0.2.x
scrollWidth <= innerWidth
building/west
rtsp://viewer:••••@192.0.2.30:554/live
66aa5cb6e1b5d1558fd5fe6dafd6f38fe3a6f5ae
a978bca7f5f9a686b33387bb8477c0adddf7a40c
5515588b36721b79890d6a12b89f3d3d6e7cc426
713c7047d63271c8b345c163c3582d2caa20a2e2
四页均通过 Harness 同步到 docs/maintainer/ 并包含在实现提交中。
当前状态:实现完成,待用户验收。工单保持开启。
No dependencies set.
The note is not visible to the blocked user.
基本信息
目标
在 MediaMTX 中实现已确认的原生轻量 RTSP 管理页面,由 MediaMTX 自身托管,用于在受控局域网内增加、编辑、删除静态 RTSP 源,查看运行状态,并通过 WebRTC/HLS 预览。
已确认设计证据
6a90f1d7191a826306a7f403PASS。实现范围
1. MediaMTX 内嵌与路由
embed将管理页静态资源编入 MediaMTX 二进制。/admin/入口和所需静态资源。/admin规范化跳转到/admin/;入口、静态资源和 SPA 回退行为有测试。2. 原生前端
prefers-reduced-motion,不依赖动画完成关键反馈。3. 路径配置与运行状态
使用当前已存在的 Control API:
GET /v3/config/paths/listGET /v3/config/paths/get/{name}POST /v3/config/paths/add/{name}PATCH /v3/config/paths/patch/{name}DELETE /v3/config/paths/delete/{name}GET /v3/paths/list首期只管理静态 RTSP source 所需字段:
要求:
4. 权限和安全
action: api权限边界。innerHTML。5. 预览与输出地址
:8889/:8888),不通过管理页面转发视频。非目标
.github删除项。建议代码边界
实现前先以代码图或源码确认最终边界,优先考虑:
internal/api/:API HTTP 路由、鉴权和管理页入口。internal/api/*_test.go:路由、鉴权、CRUD 与静态资源测试。以上是建议而非预先锁死的文件列表;如架构发现更合适的现有扩展点,应在工单中说明。
验证
至少执行并记录:
/admin跳转、/admin/响应与鉴权测试。go test ./internal/api ./internal/core或实际受影响包。go test ./...;如环境原因无法完成,记录具体失败与替代验证。python dev_scripts/harness.py check --strictpython dev_scripts/harness.py sync --checkgit diff --check验收标准
/admin/提供自包含管理页面。action: api,没有匿名修改路径。风险与回退
action: api和集成测试控制。/admin/路由和内嵌静态资源,恢复相关文档;不迁移数据、不删除现有路径配置。文档影响
docs/maintainer/,不直接编辑生成镜像。建单与前置门禁记录
69f6a337a250440c7c5043c8d75122d8e5bfd0a6a3ca54ca,已推送至origin/mainpython dev_scripts/harness.py check --strict:通过git diff --check:通过.github未提交删除项保持不动。当前阶段:待实施。本次只建立并登记生产工单,尚未修改 MediaMTX 产品代码。
实施开始
a3ca54carg和定点源码读取。.github未提交删除项,不读取或提交ip_camera.env。最终实施证据(待用户验收)
实现结果
/admin→/admin/规范化入口。/admin/、app.css、app.js使用 Goembed编入 MediaMTX 二进制。action: api。/v3/config/paths/list与/v3/paths/list;按available和按需配置区分在线、离线、待请求。source字段,可保留既有地址和凭据。/v3/config/global/get,部署主机来自当前浏览器地址。nosniff、no-referrer、SAMEORIGIN、缓存策略与未知资源 404。代码
internal/api/api.gointernal/api/api_admin.gointernal/api/api_admin_test.gointernal/api/admin/index.htmlinternal/api/admin/app.cssinternal/api/admin/app.js提交:
6465a11074673b027251e0b81a11dbe46bb2ed39 feat: add embedded RTSP admin console (#3)origin/main,远端与本地提交一致。自动验证
node --check internal/api/admin/app.js:通过。go test ./internal/api -run '^TestAdmin' -count=1:通过。go test ./... -run '^$':全部 Go 包编译通过。go test -tags enable_linters ./internal/linters/docsorder:通过。python dev_scripts/harness.py check --strict:通过。python -m unittest discover -s tests -v:4/4 通过。git diff --check:通过。v1.7.1release archive,SHA-256863cc31280d388e6feb9e08d0b246b98b88dd6a16fd81d9ee15dd3e3b2ecc9eb校验通过;生成物受忽略并已从工作树清理。未运行完整
go test ./...:本机已有用户服务占用127.0.0.1:9997,上游 API 集成测试固定使用该端口并发生 bind 冲突;没有停止或修改该进程。以管理页专项测试和全部包编译作为本次替代证据。浏览器验证
使用仅含
192.0.2.x保留地址和虚构凭据的隔离配置验证:scrollWidth <= innerWidth,无横向溢出。building/west:成功,列表只显示rtsp://viewer:••••@192.0.2.30:554/live。Wiki 与镜像
66aa5cb6e1b5d1558fd5fe6dafd6f38fe3a6f5aea978bca7f5f9a686b33387bb8477c0adddf7a40c5515588b36721b79890d6a12b89f3d3d6e7cc426713c7047d63271c8b345c163c3582d2caa20a2e2四页均通过 Harness 同步到
docs/maintainer/并包含在实现提交中。工作区边界
.github未提交删除项保持不动,未进入提交。ip_camera.env未读取、未提交。当前状态:实现完成,待用户验收。工单保持开启。