MediaMTX Control API 的列表接口默认每页返回 100 条:
GET /v3/config/paths/list
GET /v3/paths/list
当前管理页面未传递 itemsPerPage / page,也未读取后续 pageCount,因此超过 100 个静态 RTSP 设备后:
itemsPerPage
page
pageCount
该问题是数据完整性边界,不是 MediaMTX 核心设备数量限制。
itemsPerPage=100
itemCount
disabled
aria-live
预计主要涉及:
internal/api/admin/app.js
internal/api/admin/index.html
internal/api/admin/app.css
internal/api
如实现中发现需要修改 Go Control API,应停止并重新确认范围;本工单默认不改后端。
innerHTML
node --check internal/api/admin/app.js
go test ./internal/api -run '^TestAdmin' -count=1
go build ./...
python dev_scripts/harness.py check --strict
python dev_scripts/harness.py sync --check
git diff --check
用户已确认采用以下轻量方向:
这是现有设备列表底部的局部扩展,不改变主要页面结构、权限模型或 CRUD 流程。采用原生分页控件、稳定位置、明确总数和 44px 操作目标,无需另做完整交互原型;实施时以桌面与 375px 浏览器截图作为审阅证据。
分页属于管理页面长期能力。实现稳定后评估是否需要更新 Product-Requirements-Overview、Architecture-and-Code-Map 与 Common-Changes;如长期事实变化,必须先更新 Gitea Wiki,再通过 Harness 单向同步 docs/maintainer/,不得直接编辑镜像。
docs/maintainer/
list-tools.js
node --check internal/api/admin/list-tools.js
node --test tests/admin_list_tools_test.js
使用隔离配置和 235 条虚构 RTSP 按需路径验证:
device-235
已先更新 Gitea Wiki并回读,再由 Harness 同步:
2c63353ad6789d3155b136d7f96b8064cc66c36e
2b5014fc8d752f58255ebc4318acd8d798bc29be
dad147556fe40e39f0d73131830f8b38ce8e9d55
9068712bb13599c9e2dc8899f07ecf53c00cdc96
origin/main
build_mediamtx.bat
mediamtx.exe
http://127.0.0.1:19997/admin/
/admin/list-tools.js
mediamtx.yml
.github
工单保持开启,等待用户明确验收。
No dependencies set.
The note is not visible to the blocked user.
基本信息
问题背景
MediaMTX Control API 的列表接口默认每页返回 100 条:
GET /v3/config/paths/listGET /v3/paths/list当前管理页面未传递
itemsPerPage/page,也未读取后续pageCount,因此超过 100 个静态 RTSP 设备后:该问题是数据完整性边界,不是 MediaMTX 核心设备数量限制。
目标
非目标
已确认方案
1. 分批读取全部数据
itemsPerPage=100请求。pageCount与itemCount。itemsPerPage绕过分页,避免把限制延后到另一个隐藏阈值。2. 完整统计和筛选
3. 客户端分页
disabled状态。4. 桌面与移动端
aria-live区域通知。5. 分页失败处理
影响范围
预计主要涉及:
internal/api/admin/app.js:分批请求、合并、完整统计、筛选后分页、CRUD 后页码处理。internal/api/admin/index.html:轻量分页栏与可访问状态文本。internal/api/admin/app.css:桌面和 375px 分页布局。internal/api静态资源/路由相关测试。如实现中发现需要修改 Go Control API,应停止并重新确认范围;本工单默认不改后端。
风险与控制
innerHTML拼接动态数据。验收标准
验证方法
node --check internal/api/admin/app.jsgo test ./internal/api -run '^TestAdmin' -count=1go build ./...python dev_scripts/harness.py check --strictpython dev_scripts/harness.py sync --checkgit diff --check设计证据
用户已确认采用以下轻量方向:
这是现有设备列表底部的局部扩展,不改变主要页面结构、权限模型或 CRUD 流程。采用原生分页控件、稳定位置、明确总数和 44px 操作目标,无需另做完整交互原型;实施时以桌面与 375px 浏览器截图作为审阅证据。
文档影响
分页属于管理页面长期能力。实现稳定后评估是否需要更新 Product-Requirements-Overview、Architecture-and-Code-Map 与 Common-Changes;如长期事实变化,必须先更新 Gitea Wiki,再通过 Harness 单向同步
docs/maintainer/,不得直接编辑镜像。实施完成,待用户验收
最终差异
itemsPerPage=100完整读取,两个资源共用最大 4 个并发请求槽。aria-live,无前端运行时依赖。list-tools.js,浏览器直接加载,Node 内建测试可直接复用。自动验证
node --check internal/api/admin/list-tools.js:通过node --check internal/api/admin/app.js:通过node --test tests/admin_list_tools_test.js:8/8 通过go test ./internal/api -run '^TestAdmin' -count=1:通过go build ./...:通过python dev_scripts/harness.py check --strict:通过python dev_scripts/harness.py sync --check:通过git diff --check:通过浏览器验收
使用隔离配置和 235 条虚构 RTSP 按需路径验证:
device-235:顶部总数仍为 235,列表为 1 条且 1 / 1 页。长期文档
已先更新 Gitea Wiki并回读,再由 Harness 同步:
2c63353ad6789d3155b136d7f96b8064cc66c36e2b5014fc8d752f58255ebc4318acd8d798bc29bedad147556fe40e39f0d73131830f8b38ce8e9d55提交与本地运行
9068712bb13599c9e2dc8899f07ecf53c00cdc96origin/mainbuild_mediamtx.bat重建本地mediamtx.exe,并重新启动当前本地实例。http://127.0.0.1:19997/admin/回读确认新分页 HTML 与/admin/list-tools.js已生效。mediamtx.yml、真实摄像头信息、二进制、启动/构建脚本、用户已有的.github删除或其他无关改动。工单保持开启,等待用户明确验收。