lint / go (push) Canceled after 0s
lint / go_mod (push) Canceled after 0s
lint / conf (push) Canceled after 0s
lint / docslinks (push) Canceled after 0s
lint / docsorder (push) Canceled after 0s
lint / apidocs (push) Canceled after 0s
lint / other (push) Canceled after 0s
test / test_64 (push) Canceled after 0s
test / test_32 (push) Canceled after 0s
test / test_e2e (push) Canceled after 0s
2.8 KiB
2.8 KiB
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Architecture-and-Code-Map wiki_url: https://git.ilapage.cn/OPC/mediamtx/wiki/Architecture-and-Code-Map.- wiki_revision: a978bca7f5f9a686b33387bb8477c0adddf7a40c synchronized_at: 2026-08-28T03:22:44Z
架构与代码地图
上游入口
main.go:程序入口。internal/core/:服务装配、配置重载和生命周期。internal/api/:Control API,当前版本使用/v3路由。internal/conf/:配置结构、默认值与校验。internal/servers/webrtc/:WebRTC/WHEP 服务及内置原生播放页面。internal/servers/hls/:HLS 服务。mediamtx.yml:完整配置参考。api/openapi.yaml:Control API 契约。internal/**/*_test.go:单元和集成测试。
内嵌管理页面
MediaMTX API HTTP 服务 :9997
├─ /admin 301 规范化到 /admin/
├─ /admin/ 内嵌 index.html
├─ /admin/app.css 内嵌原生样式
├─ /admin/app.js 内嵌原生交互
└─ /v3/... 现有 Control API
MediaMTX WebRTC :8889/{path} 内置页面负责低延迟预览
MediaMTX HLS :8888/{path}/ 内置页面负责兼容预览
管理页面只调用既有 Control API、展示状态并在 iframe 中打开 MediaMTX 内置播放器,不代理 RTSP 或 HTTP 媒体数据,不引入 Node、数据库或前端框架。
代码边界
internal/api/api.go:注册/admin与/admin/*path,路由位于现有 API 认证中间件之后。internal/api/api_admin.go:Goembed、资源响应、缓存策略和安全响应头。internal/api/admin/index.html:语义化页面、表单、对话框与无障碍 live regions。internal/api/admin/app.css:蓝灰设计 token、桌面表格、375px 卡片布局、焦点与 reduced-motion。internal/api/admin/app.js:配置/状态合并、CRUD、脱敏、筛选、预览地址和错误恢复。internal/api/api_admin_test.go:入口、重定向、资源、CSP、鉴权和静态安全约束测试。
主要 API
GET /v3/config/global/getGET /v3/config/paths/listPOST /v3/config/paths/add/{name}PATCH /v3/config/paths/patch/{name}DELETE /v3/config/paths/delete/{name}GET /v3/paths/list
API 契约以当前仓库 api/openapi.yaml 为唯一代码级事实来源。
修改边界
- 不改变 RTSP 拉流、转封装、协议协商等媒体核心行为。
- 管理路由复用现有
action: api认证边界。 - 预览复用上游内置 WebRTC/HLS 页面,避免维护第二套媒体播放实现。
- 前端只保留管理静态 RTSP 源需要的最小配置字段;新增字段必须按工单和 API 契约扩展。