go2rtc 官网源码剖析VitePress 文档、OpenAPI 接口规范与站点资源【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtcgo2rtc 是一个同时支持 RTSP、RTMP、HTTP-FLV、WebRTC、MSE、HLS、MP4、MJPEG、HomeKit、FFmpeg 等数十种格式与协议的摄像头流媒体应用其官方文档站点go2rtc.org的全部源码就存放在本仓库的 website 目录中。本文以 website/README.md 为核心系统讲解该站点由哪几部分构成、文档如何被编译生成、OpenAPI 接口规范如何组织与浏览并给出仓库内的源码佐证帮助你快速定位文档、接口与资源文件。一、站点概览一份 README 说清整站结构website/README.md 全文虽短却精确划定了站点的三大组成部分是整个官网的目录索引项目文档通过 vitepressVue 生态的静态文档站点生成器编译生成内容来源于仓库根目录下的README.md以及internal目录中的各模块README.md项目 API 接口文档采用 OpenAPI 格式描述并提供 Redoc 查看器进行可视化浏览项目资源即 logo 等静态图片资产。同时它交代了发布方式站点内容发布在 GitHub Pages 上是 alexxit.github.io/go2rtc/ 的镜像。这意味着——只要阅读仓库里的源码与文档就等于阅读了官网内容。文档从哪来README 即文档官网的文档并非独立维护的 Markdown而是直接复用仓库内的 README 体系这一点在仓库结构中清晰可见根目录 README.md项目的总览文档包含安装二进制、Docker、Home Assistant 插件/集成、配置、功能特性、流协议支持、源码目录结构说明等全部核心内容internal目录下每个功能模块都自带 README例如 internal/ffmpeg/README.md、internal/rtsp/README.md、internal/api/README.md、internal/webrtc/README.md 等pkg目录下同样分布着协议与编解码层的 README例如 pkg/h264/README.md、pkg/rtsp/README.md、pkg/mp4/README.md。这种文档与代码同源的约定是理解 go2rtc 官网的关键任何一处 README 的更新都会在重新构建时同步反映到 go2rtc.org 上保证了文档与源码版本的一致性。二、OpenAPI 接口规范整站的技术核心website/api目录承载了官网最有价值的技术资产——完整的 HTTP API 接口规范包含两个文件website/api/openapi.yamlOpenAPI 3.1.0 规范的接口描述文件共约 1200 行是整站 API 的事实来源website/api/index.htmlRedoc 查看器页面通过redoc spec-urlopenapi.yaml/redoc加载本地 spec 文件配合 CDN 引入的 Redoc 脚本实现交互式 API 文档浏览。规范元信息与服务器地址openapi.yaml 开头的元信息定义了这份规范的基本属性openapi: 3.1.0 info: title: go2rtc version: 1.9.13 license: { name: MIT, url: https://opensource.org/licenses/MIT } servers: - url: http://localhost:1984其中servers字段非常关键它声明了所有接口的默认基地址为http://localhost:1984。1984 这个默认端口并非随意设定在 internal/api/api.go 中可以找到对应实现var cfg struct { Mod struct { Listen string yaml:listen Username string yaml:username Password string yaml:password ... } yaml:api } // default config cfg.Mod.Listen :1984即在未显式配置api.listen时HTTP API 服务默认监听:1984。同文件后续的listen(tcp, cfg.Mod.Listen)才真正拉起监听。接口分类14 个 Tag 一览openapi.yaml 通过tags字段将全部接口划分为 14 个功能域这也是 Redoc 页面左侧的导航分组Tag说明涉及路径Application应用级信息与控制/api、/api/exit、/api/restart、/api/logConfig配置文件读写/api/configStreams list流管理与图查询/api/streams、/api/streams.dot、/api/preload、/api/schemesConsume stream流输出消费/api/webrtc?src、/api/stream.mp4、/api/stream.m3u8、/api/stream.mjpeg、/api/stream.ts、/api/stream.flv等Snapshot抓图/api/frame.jpeg、/api/frame.mp4Produce stream流输入推流/api/webrtc?dst、/api/stream.flv?dst、/api/stream.ts?dstHLSHLS 会话管理/api/hls/playlist.m3u8?id等WebSocketWebSocket 接口/api/wsDiscovery设备/资源发现/api/dvrip、/api/onvif、/api/v4l2、/api/alsa、/api/ffmpeg/devices等HomeKitHomeKit 配对与访问/api/homekit、/pair-setup、/pair-verifyONVIFONVIF 服务实现/onvif/RTSPtoWebRTC兼容 Home Assistant 集成/stream/WebTorrentP2P 分享/api/webtorrentFFmpegFFmpeg 辅助接口/api/ffmpegDebug调试接口/api/stack核心接口逐类解读1. 应用信息与生命周期ApplicationGET /api返回应用运行信息响应示例展示了接口的完整字段结构{ config_path: /config/go2rtc.yaml, host: 192.168.1.123:1984, rtsp: { listen: :8554, default_query: videoaudio }, version: 1.9.12 }POST /api/exit?code100关闭应用可通过code指定退出码POST /api/restart重启守护进程GET /api/log返回内存环形缓冲区中的日志JSON Lines 格式例如{level:info,version:1.9.13,platform:linux/amd64,revision:dfe4755,time:1766841087331,message:go2rtc}对应的DELETE /api/log则清空缓冲区。2. 配置文件读写ConfigGET /api/config读取主配置文件内容YAML 格式文件不存在时返回 404POST整体重写配置PATCH则增量合并配置段。这是 Web UI 中config页面保存配置时实际调用的后端接口对应前端页面 www/config.html。3. 流管理Streams listGET /api/streams获取全部流的信息返回结构为{ 流名称: { producers: [...], consumers: [...] } }PUT /api/streams?srcrtsp://...namecamera1用给定 URI 创建新流PATCH更新流的源DELETE ?srccamera1删除流POST /api/streams?src...dstcamera1把源流的音视频推到目标流即 README 中的 stream to camera 场景典型用途是把音频播送到支持双向语音的摄像头GET /api/streams.dot?srccamera1以 Graphviz DOT 格式导出流的拓扑图用于可视化展示 producer/consumer 连接关系GET /api/preload/PUT /api/preload?srccamera1videoall,h264,h265audioall,aac,opus管理预加载流可指定视频/音频编码过滤器GET /api/schemes列出当前支持的所有源 URL scheme示例为[rtsp, rtmp, webrtc, ffmpeg, hass]。4. 流输出Consume stream这是最常用的接口组统一约定?src指定流名WebRTCPOST /api/webrtc?srccamera1返回 WebRTC 格式流WHEP 标准请求体支持三种形式——JSON 格式Content-Type: application/json、WHEP 标准 SDPapplication/sdp、裸 SDP任意类型返回 200JSON/SDP或 201纯 SDPMP4GET /api/stream.mp4?srccamera1提供 HTTP 渐进式 MP4可选参数duration限长秒数、filename下载文件名、rotate90/180/270 旋转、scale如1280:720、mp4/video/audio编码过滤器HLSGET /api/stream.m3u8?srccamera1返回 HLS 播放列表随后通过GET /api/hls/playlist.m3u8?id{id}、/api/hls/segment.ts?id{id}MPEG-TS 分片、/api/hls/init.mp4?id{id}与/api/hls/segment.m4s?id{id}fMP4 分片拉取具体分片MJPEGGET /api/stream.mjpeg?srccamera1返回multipart/x-mixed-replace流可直接用于img标签ASCII 艺术GET /api/stream.ascii?srccamera1用 ANSI 转义码把画面渲染成字符画参数color/back控制前景/背景色模式8、256、rgb或 SGR 码text指定字符集默认/block/自定义字符适合纯终端场景调试此外还有y4mYUV4MPEG2、tsMPEG-TS、aacADTS 裸音频、flvFlash Video等格式输出。5. 抓图SnapshotGET /api/frame.jpeg?srccamera1抓取 JPEG 快照支持name当src为 URL 时按此名建流、width/height缩放别名w/h、rotate90/180/270、hardwareFFmpeg 硬件加速引擎别名hwGET /api/frame.mp4?srccamera1抓取一段 MP4 快照支持filename参数。6. 推流Produce streamPOST /api/webrtc?dstcamera1以 WebRTCWHIP方式向指定流推入媒体成功返回 201 并在Location响应头给出会话资源 URLPOST /api/stream?dst以自动探测格式推流另有flv、ts、mjpeg三种显式格式的推流入口对应 README 中的 Incoming sources 章节。7. WebSocket 接口GET /api/ws?srcdst升级为 WebSocket 连接之后以 JSON 消息交互请求{ type: ..., value: ... }响应同为该结构。具体支持的消息类型取决于启用的模块详见 internal/api/README.md。这也是 go2rtc Web UIwww/main.js与后端通信的主通道。8. 设备发现Discovery规范中内置了十余种设备发现接口返回统一结构{ streams: [ { name: Camera 1, url: ... } ] }/api/dvripDVRIP 协议摄像头发现/api/onvif?srconvif://user:pass192.168.1.50:80ONVIF 设备发现src可指定设备 URL 以枚举其 profile/api/v4l2、/api/alsaLinux 视频V4L2/音频ALSA设备发现/api/ffmpeg/devices、/api/ffmpeg/hardwareFFmpeg USB 设备与硬件转码能力发现/api/gopro、/api/ring支持 email/password 2FA code 或 refresh_token、/api/tuya需 region/email/password、/api/hass、/api/nest需 client_id/client_secret/refresh_token/project_id、/api/roborockGET 需先前已认证POST 提交 username/password 登录并发现、/api/discovery/homekit等云端与协议设备的发现入口。9. HomeKit 与兼容层/api/homekitGET 查询 HomeKit 服务器状态POST 配对摄像头id为流名、src为不含 PIN 的 HomeKit URL、pin为配对码DELETE 解除配对/api/homekit/accessories?id获取流的 HomeKit 配件 JSON/pair-setup、/pair-verifyHAP 协议TLV8 格式配对与验证端点/onvif/简易 ONVIF 服务端实现接受任意子路径请求/stream/为 Home Assistant 的 RTSPtoWebRTC 集成提供兼容 API。10. WebTorrent 与调试GET/POST/DELETE /api/webtorrent?srccamera1获取/创建/删除某个流的 WebTorrent 分享share 信息形如{ share: AKDypPy4zz, pwd: H0Km1HLTTP }GET /api/webtorrent返回全部分享信息POST /api/ffmpeg为推流到摄像头场景提供辅助接口dst必填file按文件输入、live直播输入、textTTS 播报文本可配voice音色三者恰好提供其一GET /api/stack输出未知 goroutine 列表用于排查泄漏等调试场景。三、WebTorrent 演示页官网中的可运行示例除文档与 API 规范外website目录还包含一个独立的 WebTorrent 演示页面 website/webtorrent/index.html。该页面展示了如何用纯浏览器 JavaScript 实现与 go2rtc WebTorrent 模块对接的完整 P2P 播放流程用户输入 share 码与密码后前端用 Web Crypto API 基于 SHA-256 派生密钥cipher(share, pwd)函数对 share 码做摘要生成info_hash并以 nonce 密码派生 AES-GCM 密钥对 SDP offer 加密通过 WebRTC 采集本地媒体支持camera/microphone/display/video/audio组合见PeerConnection(media)函数或建立 recvonly 接收轨道将加密后的 offer 通过 WebSocket 发送到 trackerwss://tracker.openwebtorrent.com/等收到 answer 后解密并setRemoteDescription完成连接支持通过 URL hash 参数#share...pwd...mediavideoaudiotr...免输入直接连接。该页面与 internal/webtorrent/README.md 及pkg/webtorrent模块互为印证是理解 go2rtc WebTorrent 端到端加密封装链路的最佳前端参考。四、站点资源与 PWA 配置website目录还包含了站点的静态资源website/images/logo.gif、website/images/logo.png、website/images/go2rtc.png项目 logo 与横幅图其中 logo.gif 被根 README.md 顶部引用作为项目徽标website/icons/android-chrome-192x192.png、website/icons/android-chrome-512x512.png、website/icons/apple-touch-icon-180x180.png 及 website/favicon.ico各类平台图标website/manifest.jsonPWA Web App Manifest声明应用名go2rtc、图标192/512 尺寸、display: standalone、主题色与背景色均为黑色——说明官网本身具备 PWA 特性可安装为桌面/移动端 Web 应用。五、仓库内的相关源码与延伸阅读如果你想继续深入可按以下路径在仓库中逐一对照internal/api/api.goHTTP API 模块初始化包含api配置段listen、username/password认证、local_auth、base_path、static_dir、origin*时启用 CORS 中间件、tls_listen/tls_cert/tls_key、unix_listen、allow_paths以及各/api/*路由的注册internal/api/README.mdAPI 模块的详细说明openapi.yaml 中 WebSocket 一节也直接引用它internal/api/static.go 与 www/static.goWeb UI 静态资源的嵌入方式www/ 目录Web UI 前端页面config.html、net.html、stream.html 等它们调用的正是 openapi.yaml 中定义的接口internal/streams/api.go/api/streams系列接口的服务端实现根 README.md安装、配置与各功能模块的总览也是官网文档的主体来源。结语go2rtc 的官网并非一个黑盒站点而是由README 即文档 OpenAPI 规范 Redoc 查看器 静态资源四部分组成的开源工程全部源码都沉淀在仓库的website目录中。对于开发者和集成方而言website/api/openapi.yaml 是最值得收藏的接口手册——它以机器可读的 OpenAPI 3.1 格式完整定义了从流管理、格式输出、抓图推流到设备发现、HomeKit 配对的全部 HTTP 能力配合http://localhost:1984基地址即可快速进行 curl 级验证与二次开发。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考