首页
/ 深入解析go2rtc项目的API接口设计

深入解析go2rtc项目的API接口设计

2025-07-06 07:34:44作者:韦蓉瑛

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提供了两个特殊接口用于应用管理:

  1. /api/exit POST - 用于优雅关闭应用,支持指定退出代码
  2. /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端点支持三种请求格式:

  1. JSON格式(Content-Type: application/json)
  2. WHEP标准格式(Content-Type: application/sdp)
  3. 原始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提供了两种快照格式:

  1. JPEG格式 - /api/frame.jpeg?src={src}
  2. 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设计体现了几个关键特点:

  1. 模块化 - 每个功能模块有清晰的API边界
  2. 标准化 - 遵循RESTful和OpenAPI规范
  3. 灵活性 - 支持多种流媒体格式和协议
  4. 扩展性 - 易于添加新的功能模块

通过这套API,开发者可以轻松地将go2rtc集成到各种智能家居和流媒体处理系统中,实现强大的摄像头流媒体处理功能。