深入解析go2rtc项目的API接口设计
go2rtc是一个功能强大的摄像头流媒体处理应用,支持RTSP、RTMP、HTTP-FLV、WebRTC、MSE、HLS、MP4、MJPEG等多种流媒体协议和格式。本文将从技术角度深入分析其API接口设计,帮助开发者更好地理解和使用这一工具。
核心API架构概述
go2rtc的API采用RESTful风格设计,基于OpenAPI 3.1规范构建。整个API系统分为多个功能模块,每个模块对应特定的流媒体处理能力。API默认运行在1984端口,采用HTTP协议进行通信。
应用管理接口
应用信息获取
通过/api
GET请求可以获取应用的基本信息,包括:
- 配置文件路径
- 主机地址和端口
- RTSP服务配置
- 当前版本号
应用生命周期控制
go2rtc提供了两个特殊接口用于应用管理:
/api/exit
POST - 用于优雅关闭应用,支持指定退出代码/api/restart
POST - 用于重启守护进程
配置管理接口
go2rtc提供了完整的配置管理API:
GET /api/config
- 获取当前配置文件内容(YAML格式)POST /api/config
- 完全重写配置文件PATCH /api/config
- 增量更新配置文件
这种设计使得配置管理可以轻松集成到自动化部署流程中。
流管理核心接口
流列表操作
/api/streams
端点提供了完整的流管理能力:
GET
- 获取所有流的信息,包括生产者和消费者PUT
- 创建新流,需指定源URI和可选名称PATCH
- 更新现有流的源DELETE
- 删除指定流POST
- 将源流转发到目标流
单个流操作
通过/api/streams?src={src}
可以获取特定流的详细信息,包括:
- 生产者信息(源URI)
- 消费者列表
流消费接口
go2rtc支持多种流消费格式,每种格式对应特定的API端点:
WebRTC格式
/api/webrtc?src={src}
POST端点支持三种请求格式:
- JSON格式(Content-Type: application/json)
- WHEP标准格式(Content-Type: application/sdp)
- 原始SDP格式
响应会根据请求类型返回JSON或原始SDP数据。
MP4格式
/api/stream.mp4?src={src}
GET端点支持:
- 限制流时长(duration参数)
- 指定下载文件名(filename参数)
- 多种过滤参数(mp4, video, audio)
HLS格式
/api/stream.m3u8?src={src}
GET端点生成HLS流,同样支持多种过滤参数。
MJPEG格式
/api/stream.mjpeg?src={src}
GET端点提供MJPEG格式的流。
快照接口
go2rtc提供了两种快照格式:
- JPEG格式 -
/api/frame.jpeg?src={src}
- MP4格式 -
/api/frame.mp4?src={src}
流生产接口
除了消费流,go2rtc也支持接收流:
- WebRTC格式 -
/api/webrtc?dst={dst}
- FLV格式 -
/api/stream.flv?dst={dst}
- MPEG-TS格式 -
/api/stream.ts?dst={dst}
- MJPEG格式 -
/api/stream.mjpeg?dst={dst}
设备发现接口
go2rtc集成了多种设备的自动发现能力:
- DVRIP摄像头 -
/api/dvrip
- FFmpeg设备 -
/api/ffmpeg/devices
- Home Assistant摄像头 -
/api/hass
- HomeKit设备 -
/api/homekit
- ONVIF设备 -
/api/onvif
- Roborock扫地机器人 -
/api/roborock
特殊协议支持
ONVIF协议
/onvif/
端点实现了ONVIF协议的服务端功能,可以接受任意子路径请求。
RTSPtoWebRTC
/stream/
端点提供了对Home Assistant RTSPtoWebRTC集成的支持。
WebTorrent模块
go2rtc集成了WebTorrent功能:
GET /api/webrtorrent?src={src}
- 获取指定流的分享信息POST /api/webrtorrent?src={src}
- 创建新的分享DELETE /api/webrtorrent?src={src}
- 删除分享GET /api/webrtorrent
- 获取所有活跃分享
调试接口
/api/stack
GET端点可以显示未知goroutine的堆栈信息,用于调试目的。
总结
go2rtc的API设计体现了几个关键特点:
- 模块化 - 每个功能模块有清晰的API边界
- 标准化 - 遵循RESTful和OpenAPI规范
- 灵活性 - 支持多种流媒体格式和协议
- 扩展性 - 易于添加新的功能模块
通过这套API,开发者可以轻松地将go2rtc集成到各种智能家居和流媒体处理系统中,实现强大的摄像头流媒体处理功能。