mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2026-04-22 23:57:20 +08:00
1198 lines
33 KiB
YAML
1198 lines
33 KiB
YAML
openapi: 3.1.0
|
|
|
|
info:
|
|
title: go2rtc
|
|
version: 1.9.13
|
|
license: { name: MIT,url: https://opensource.org/licenses/MIT }
|
|
contact: { url: https://github.com/AlexxIT/go2rtc }
|
|
description: |
|
|
Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc.
|
|
|
|
servers:
|
|
- url: http://localhost:1984
|
|
|
|
tags:
|
|
- name: Application
|
|
description: "[Module: API](https://github.com/AlexxIT/go2rtc#module-api)"
|
|
- name: Config
|
|
description: "[Configuration](https://github.com/AlexxIT/go2rtc#configuration)"
|
|
- name: Streams list
|
|
description: "[Module: Streams](https://github.com/AlexxIT/go2rtc#module-streams)"
|
|
- name: Consume stream
|
|
- name: HLS
|
|
- name: Snapshot
|
|
- name: Produce stream
|
|
- name: WebSocket
|
|
description: "WebSocket API endpoint: `/api/ws` (see `api/README.md`)"
|
|
- name: Discovery
|
|
- name: HomeKit
|
|
- name: ONVIF
|
|
- name: RTSPtoWebRTC
|
|
- name: WebTorrent
|
|
description: "[Module: WebTorrent](https://github.com/AlexxIT/go2rtc#module-webtorrent)"
|
|
- name: FFmpeg
|
|
- name: Debug
|
|
|
|
components:
|
|
parameters:
|
|
stream_src_path:
|
|
name: src
|
|
in: path
|
|
description: Source stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
|
|
stream_dst_path:
|
|
name: dst
|
|
in: path
|
|
description: Destination stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
|
|
stream_src_query:
|
|
name: src
|
|
in: query
|
|
description: Source stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
|
|
hls_session_id_path:
|
|
name: id
|
|
in: path
|
|
description: HLS session ID (passed as query param `id`)
|
|
required: true
|
|
schema: { type: string }
|
|
example: DvmHdd9w
|
|
|
|
mp4_filter:
|
|
name: mp4
|
|
in: query
|
|
description: MP4 codecs filter
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum: [ "", flac, all ]
|
|
example: flac
|
|
|
|
video_filter:
|
|
name: video
|
|
in: query
|
|
description: Video codecs filter
|
|
schema:
|
|
type: string
|
|
enum: [ "", all, h264, h265, mjpeg ]
|
|
example: h264,h265
|
|
|
|
audio_filter:
|
|
name: audio
|
|
in: query
|
|
description: Audio codecs filter
|
|
schema:
|
|
type: string
|
|
enum: [ "", all, aac, opus, pcm, pcmu, pcma ]
|
|
example: aac
|
|
|
|
responses:
|
|
discovery:
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
example: { streams: [ { "name": "Camera 1","url": "..." } ] }
|
|
|
|
webtorrent:
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
example: { share: AKDypPy4zz, pwd: H0Km1HLTTP }
|
|
|
|
paths:
|
|
/api:
|
|
get:
|
|
summary: Get application info
|
|
tags: [ Application ]
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
config_path: { type: string, example: "/config/go2rtc.yaml" }
|
|
host: { type: string, example: "192.168.1.123:1984" }
|
|
rtsp:
|
|
type: object
|
|
properties:
|
|
listen: { type: string, example: ":8554" }
|
|
default_query: { type: string, example: "video&audio" }
|
|
version: { type: string, example: "1.9.12" }
|
|
|
|
/api/exit:
|
|
post:
|
|
summary: Close application
|
|
tags: [ Application ]
|
|
parameters:
|
|
- name: code
|
|
in: query
|
|
description: Application exit code
|
|
required: false
|
|
schema: { type: integer }
|
|
example: 100
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/restart:
|
|
post:
|
|
summary: Restart daemon
|
|
description: Restarts the daemon.
|
|
tags: [ Application ]
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/log:
|
|
get:
|
|
summary: Get in-memory logs buffer
|
|
description: |
|
|
Returns current log output from the in-memory circular buffer.
|
|
tags: [ Application ]
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/jsonlines:
|
|
example: |
|
|
{"level":"info","version":"1.9.13","platform":"linux/amd64","revision":"dfe4755","time":1766841087331,"message":"go2rtc"}
|
|
delete:
|
|
summary: Clear in-memory logs buffer
|
|
tags: [ Application ]
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
text/plain: { example: "" }
|
|
|
|
/api/config:
|
|
get:
|
|
summary: Get main config file content
|
|
tags: [ Config ]
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
application/yaml: { example: "streams:..." }
|
|
"404":
|
|
description: Config file not found
|
|
post:
|
|
summary: Rewrite main config file
|
|
tags: [ Config ]
|
|
requestBody:
|
|
content:
|
|
"*/*": { example: "streams:..." }
|
|
responses:
|
|
default:
|
|
description: ""
|
|
patch:
|
|
summary: Merge changes to main config file
|
|
tags: [ Config ]
|
|
requestBody:
|
|
content:
|
|
"*/*": { example: "streams:..." }
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
|
|
|
|
/api/streams:
|
|
get:
|
|
summary: Get all streams info
|
|
tags: [ Streams list ]
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
additionalProperties:
|
|
type: object
|
|
properties:
|
|
producers:
|
|
type: array
|
|
consumers:
|
|
type: array
|
|
put:
|
|
summary: Create new stream
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream source (URI)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0"
|
|
- name: name
|
|
in: query
|
|
description: Stream name
|
|
required: false
|
|
schema: { type: string }
|
|
example: camera1
|
|
responses:
|
|
default:
|
|
description: ""
|
|
patch:
|
|
summary: Update stream source
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream source (URI)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0"
|
|
- name: name
|
|
in: query
|
|
description: Stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
responses:
|
|
default:
|
|
description: ""
|
|
delete:
|
|
summary: Delete stream
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
responses:
|
|
default:
|
|
description: ""
|
|
post:
|
|
summary: Send stream from source to destination
|
|
description: "[Stream to camera](https://github.com/AlexxIT/go2rtc#stream-to-camera)"
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream source (URI)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "ffmpeg:http://example.com/song.mp3#audio=pcma#input=file"
|
|
- name: dst
|
|
in: query
|
|
description: Destination stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/streams.dot:
|
|
get:
|
|
summary: Get streams graph in Graphviz DOT format
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream name filter. Repeat `src` to include multiple streams.
|
|
required: false
|
|
schema: { type: string }
|
|
example: camera1
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
text/vnd.graphviz:
|
|
example: "digraph { ... }"
|
|
|
|
/api/preload:
|
|
get:
|
|
summary: Get all preloaded streams
|
|
tags: [ Streams list ]
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
additionalProperties:
|
|
type: object
|
|
properties:
|
|
consumer:
|
|
type: object
|
|
query:
|
|
type: string
|
|
example: "video&audio"
|
|
put:
|
|
summary: Preload new stream
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream source (name)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "camera1"
|
|
- name: video
|
|
in: query
|
|
description: Video codecs filter
|
|
required: false
|
|
schema: { type: string }
|
|
example: all,h264,h265,...
|
|
- name: audio
|
|
in: query
|
|
description: Audio codecs filter
|
|
required: false
|
|
schema: { type: string }
|
|
example: all,aac,opus,...
|
|
- name: microphone
|
|
in: query
|
|
description: Microphone codecs filter
|
|
required: false
|
|
schema: { type: string }
|
|
example: all,aac,opus,...
|
|
responses:
|
|
default:
|
|
description: ""
|
|
delete:
|
|
summary: Delete preloaded stream
|
|
tags: [ Streams list ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream source (name)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "camera1"
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/schemes:
|
|
get:
|
|
summary: Get supported source URL schemes
|
|
tags: [ Streams list ]
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items: { type: string }
|
|
example: [ rtsp, rtmp, webrtc, ffmpeg, hass ]
|
|
|
|
|
|
/api/streams?src={src}:
|
|
get:
|
|
summary: Get stream info in JSON format
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
additionalProperties:
|
|
type: object
|
|
properties:
|
|
producers:
|
|
type: array
|
|
items: { type: object }
|
|
consumers:
|
|
type: array
|
|
items: { type: object }
|
|
|
|
/api/webrtc?src={src}:
|
|
post:
|
|
summary: Get stream in WebRTC format (WHEP)
|
|
description: "[Module: WebRTC](https://github.com/AlexxIT/go2rtc#module-webrtc)"
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
requestBody:
|
|
description: |
|
|
Support:
|
|
- JSON format (`Content-Type: application/json`)
|
|
- WHEP standard (`Content-Type: application/sdp`)
|
|
- raw SDP (`Content-Type: anything`)
|
|
required: true
|
|
content:
|
|
application/json: { example: { type: offer, sdp: "v=0..." } }
|
|
"application/sdp": { example: "v=0..." }
|
|
"*/*": { example: "v=0..." }
|
|
responses:
|
|
"200":
|
|
description: "Response on JSON or raw SDP"
|
|
content:
|
|
application/json: { example: { type: answer, sdp: "v=0..." } }
|
|
application/sdp: { example: "v=0..." }
|
|
"201":
|
|
description: "Response on `Content-Type: application/sdp`"
|
|
content:
|
|
application/sdp: { example: "v=0..." }
|
|
|
|
/api/stream.mp4?src={src}:
|
|
get:
|
|
summary: Get stream in MP4 format (HTTP progressive)
|
|
description: "[Module: MP4](https://github.com/AlexxIT/go2rtc#module-mp4)"
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
- name: duration
|
|
in: query
|
|
description: Limit the length of the stream in seconds
|
|
required: false
|
|
schema: { type: string }
|
|
example: 15
|
|
- name: filename
|
|
in: query
|
|
description: Download as a file with this name
|
|
required: false
|
|
schema: { type: string }
|
|
example: camera1.mp4
|
|
- name: rotate
|
|
in: query
|
|
description: "Rotate video (degrees). Supported values: 90, 180, 270."
|
|
required: false
|
|
schema: { type: integer, enum: [ 90, 180, 270 ] }
|
|
- name: scale
|
|
in: query
|
|
description: Scale video in format `width:height`
|
|
required: false
|
|
schema: { type: string, example: "1280:720" }
|
|
- $ref: "#/components/parameters/mp4_filter"
|
|
- $ref: "#/components/parameters/video_filter"
|
|
- $ref: "#/components/parameters/audio_filter"
|
|
responses:
|
|
200:
|
|
description: ""
|
|
content: { video/mp4: { example: "" } }
|
|
|
|
/api/stream.m3u8?src={src}:
|
|
get:
|
|
summary: Get stream in HLS format
|
|
description: "[Module: HLS](https://github.com/AlexxIT/go2rtc#module-hls)"
|
|
tags: [ Consume stream, HLS ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
- $ref: "#/components/parameters/mp4_filter"
|
|
- $ref: "#/components/parameters/video_filter"
|
|
- $ref: "#/components/parameters/audio_filter"
|
|
responses:
|
|
200:
|
|
description: ""
|
|
content: { application/vnd.apple.mpegurl: { example: "" } }
|
|
|
|
/api/hls/playlist.m3u8?id={id}:
|
|
get:
|
|
summary: Get HLS media playlist for an active session
|
|
tags: [ HLS ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/hls_session_id_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/vnd.apple.mpegurl: { example: "" }
|
|
"404":
|
|
description: Session not found
|
|
|
|
/api/hls/segment.ts?id={id}:
|
|
get:
|
|
summary: Get HLS MPEG-TS segment for an active session
|
|
tags: [ HLS ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/hls_session_id_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
video/mp2t: { example: "" }
|
|
"404":
|
|
description: Segment or session not found
|
|
|
|
/api/hls/init.mp4?id={id}:
|
|
get:
|
|
summary: Get HLS fMP4 init segment for an active session
|
|
tags: [ HLS ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/hls_session_id_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
video/mp4: { example: "" }
|
|
"404":
|
|
description: Segment or session not found
|
|
|
|
/api/hls/segment.m4s?id={id}:
|
|
get:
|
|
summary: Get HLS fMP4 media segment for an active session
|
|
tags: [ HLS ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/hls_session_id_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
video/iso.segment: { example: "" }
|
|
"404":
|
|
description: Segment or session not found
|
|
|
|
/api/stream.mjpeg?src={src}:
|
|
get:
|
|
summary: Get stream in MJPEG format
|
|
description: "[Module: MJPEG](https://github.com/AlexxIT/go2rtc#module-mjpeg)"
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
200:
|
|
description: ""
|
|
content: { multipart/x-mixed-replace: { example: "" } }
|
|
|
|
/api/stream.ascii?src={src}:
|
|
get:
|
|
summary: Get stream in ASCII-art format (ANSI escape codes)
|
|
description: "[Module: MJPEG](https://github.com/AlexxIT/go2rtc#module-mjpeg)"
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
- name: color
|
|
in: query
|
|
description: Foreground mode (`8`, `256`, `rgb` or ANSI SGR code)
|
|
required: false
|
|
schema: { type: string }
|
|
- name: back
|
|
in: query
|
|
description: Background mode (`8`, `256`, `rgb` or ANSI SGR code)
|
|
required: false
|
|
schema: { type: string }
|
|
- name: text
|
|
in: query
|
|
description: Charset preset (empty/default, `block`) or custom characters
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
text/plain: { example: "" }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/stream.y4m?src={src}:
|
|
get:
|
|
summary: Get stream in YUV4MPEG2 format (y4m)
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/octet-stream: { example: "" }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/stream.ts?src={src}:
|
|
get:
|
|
summary: Get stream in MPEG-TS format
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
video/mp2t: { example: "" }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/stream.aac?src={src}:
|
|
get:
|
|
summary: Get stream audio in AAC (ADTS) format
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
audio/aac: { example: "" }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/stream.flv?src={src}:
|
|
get:
|
|
summary: Get stream in FLV format
|
|
tags: [ Consume stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
video/x-flv: { example: "" }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/frame.jpeg?src={src}:
|
|
get:
|
|
summary: Get snapshot in JPEG format
|
|
description: "[Module: MJPEG](https://github.com/AlexxIT/go2rtc#module-mjpeg)"
|
|
tags: [ Snapshot ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
- name: name
|
|
in: query
|
|
description: Optional stream name to create/update if `src` is a URL
|
|
required: false
|
|
schema: { type: string }
|
|
- name: width
|
|
in: query
|
|
description: "Scale output width (alias: `w`)"
|
|
required: false
|
|
schema: { type: integer, minimum: 1 }
|
|
- name: height
|
|
in: query
|
|
description: "Scale output height (alias: `h`)"
|
|
required: false
|
|
schema: { type: integer, minimum: 1 }
|
|
- name: rotate
|
|
in: query
|
|
description: "Rotate output (degrees). Supported values: 90, 180, 270."
|
|
required: false
|
|
schema: { type: integer, enum: [ 90, 180, 270 ] }
|
|
- name: hardware
|
|
in: query
|
|
description: "Hardware acceleration engine for FFmpeg snapshot transcoding (alias: `hw`)"
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: ""
|
|
content:
|
|
image/jpeg: { example: "" }
|
|
|
|
/api/frame.mp4?src={src}:
|
|
get:
|
|
summary: Get snapshot in MP4 format
|
|
description: "[Module: MP4](https://github.com/AlexxIT/go2rtc#module-mp4)"
|
|
tags: [ Snapshot ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
- name: filename
|
|
in: query
|
|
description: Download as a file with this name
|
|
required: false
|
|
schema: { type: string }
|
|
example: camera1.mp4
|
|
responses:
|
|
200:
|
|
description: ""
|
|
content:
|
|
video/mp4: { example: "" }
|
|
|
|
|
|
|
|
/api/webrtc?dst={dst}:
|
|
post:
|
|
summary: Post stream in WebRTC format (WHIP)
|
|
description: "[Incoming: WebRTC/WHIP](https://github.com/AlexxIT/go2rtc#incoming-webrtcwhip)"
|
|
tags: [ Produce stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_dst_path"
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
headers:
|
|
Location:
|
|
description: Resource URL for session
|
|
schema: { type: string }
|
|
content:
|
|
application/sdp: { example: "v=0..." }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/stream?dst={dst}:
|
|
post:
|
|
summary: Post stream in auto-detected format
|
|
description: |
|
|
Incoming source with automatic format detection. Use for pushing a stream into an existing `dst` stream.
|
|
tags: [ Produce stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_dst_path"
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/stream.flv?dst={dst}:
|
|
post:
|
|
summary: Post stream in FLV format
|
|
description: "[Incoming sources](https://github.com/AlexxIT/go2rtc#incoming-sources)"
|
|
tags: [ Produce stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_dst_path"
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/stream.ts?dst={dst}:
|
|
post:
|
|
summary: Post stream in MPEG-TS format
|
|
description: "[Incoming sources](https://github.com/AlexxIT/go2rtc#incoming-sources)"
|
|
tags: [ Produce stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_dst_path"
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
/api/stream.mjpeg?dst={dst}:
|
|
post:
|
|
summary: Post stream in MJPEG format
|
|
description: "[Incoming sources](https://github.com/AlexxIT/go2rtc#incoming-sources)"
|
|
tags: [ Produce stream ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_dst_path"
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
|
|
/api/ffmpeg:
|
|
post:
|
|
summary: Play file/live/TTS into a stream via FFmpeg
|
|
description: |
|
|
Helper endpoint for "stream to camera" scenarios.
|
|
Exactly one of `file`, `live`, `text` should be provided.
|
|
tags: [ FFmpeg ]
|
|
parameters:
|
|
- name: dst
|
|
in: query
|
|
description: Destination stream name
|
|
required: true
|
|
schema: { type: string }
|
|
example: camera1
|
|
- name: file
|
|
in: query
|
|
description: Input URL to treat as file (`#input=file`)
|
|
required: false
|
|
schema: { type: string }
|
|
example: "http://example.com/song.mp3"
|
|
- name: live
|
|
in: query
|
|
description: Live input URL
|
|
required: false
|
|
schema: { type: string }
|
|
example: "http://example.com/live.mp3"
|
|
- name: text
|
|
in: query
|
|
description: Text-to-speech phrase
|
|
required: false
|
|
schema: { type: string }
|
|
example: "Hello"
|
|
- name: voice
|
|
in: query
|
|
description: Optional TTS voice (engine-dependent)
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
"400":
|
|
description: Invalid parameters
|
|
"404":
|
|
description: Stream not found
|
|
|
|
|
|
/api/dvrip:
|
|
get:
|
|
summary: DVRIP cameras discovery
|
|
description: "[Source: DVRIP](https://github.com/AlexxIT/go2rtc#source-dvrip)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/ffmpeg/devices:
|
|
get:
|
|
summary: FFmpeg USB devices discovery
|
|
description: "[Source: FFmpeg Device](https://github.com/AlexxIT/go2rtc#source-ffmpeg-device)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/ffmpeg/hardware:
|
|
get:
|
|
summary: FFmpeg hardware transcoding discovery
|
|
description: "[Hardware acceleration](https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/v4l2:
|
|
get:
|
|
summary: V4L2 video devices discovery (Linux)
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/alsa:
|
|
get:
|
|
summary: ALSA audio devices discovery (Linux)
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/gopro:
|
|
get:
|
|
summary: GoPro cameras discovery
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/ring:
|
|
get:
|
|
summary: Ring cameras discovery
|
|
description: |
|
|
Provide either `email`/`password` (and optional `code` for 2FA) or `refresh_token`.
|
|
If 2FA is required, returns a JSON prompt instead of sources.
|
|
tags: [ Discovery ]
|
|
parameters:
|
|
- name: email
|
|
in: query
|
|
required: false
|
|
schema: { type: string }
|
|
- name: password
|
|
in: query
|
|
required: false
|
|
schema: { type: string }
|
|
- name: code
|
|
in: query
|
|
required: false
|
|
schema: { type: string }
|
|
- name: refresh_token
|
|
in: query
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/json: { example: "" }
|
|
|
|
/api/tuya:
|
|
get:
|
|
summary: Tuya cameras discovery
|
|
tags: [ Discovery ]
|
|
parameters:
|
|
- name: region
|
|
in: query
|
|
description: Tuya API host (region)
|
|
required: true
|
|
schema: { type: string }
|
|
example: "openapi.tuyaus.com"
|
|
- name: email
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
- name: password
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
"400":
|
|
description: Invalid parameters
|
|
"404":
|
|
description: No cameras found
|
|
|
|
/api/hass:
|
|
get:
|
|
summary: Home Assistant cameras discovery
|
|
description: "[Source: Hass](https://github.com/AlexxIT/go2rtc#source-hass)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
"404": { description: No Hass config }
|
|
|
|
/api/discovery/homekit:
|
|
get:
|
|
summary: HomeKit cameras discovery
|
|
description: "[Source: HomeKit](https://github.com/AlexxIT/go2rtc#source-homekit)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/nest:
|
|
get:
|
|
summary: Nest cameras discovery
|
|
tags: [ Discovery ]
|
|
parameters:
|
|
- name: client_id
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
- name: client_secret
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
- name: refresh_token
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
- name: project_id
|
|
in: query
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/onvif:
|
|
get:
|
|
summary: ONVIF cameras discovery
|
|
description: "[Source: ONVIF](https://github.com/AlexxIT/go2rtc#source-onvif)"
|
|
tags: [ Discovery ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Optional ONVIF device URL to enumerate profiles
|
|
required: false
|
|
schema: { type: string }
|
|
example: "onvif://user:pass@192.168.1.50:80"
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/roborock:
|
|
get:
|
|
summary: Roborock vacuums discovery (requires prior auth)
|
|
description: "[Source: Roborock](https://github.com/AlexxIT/go2rtc#source-roborock)"
|
|
tags: [ Discovery ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
"404":
|
|
description: No auth
|
|
post:
|
|
summary: Roborock login and discovery
|
|
tags: [ Discovery ]
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
username: { type: string }
|
|
password: { type: string }
|
|
required: [ username, password ]
|
|
responses:
|
|
"200": { $ref: "#/components/responses/discovery" }
|
|
|
|
/api/homekit:
|
|
get:
|
|
summary: Get HomeKit servers state
|
|
tags: [ HomeKit ]
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
description: Optional stream name (server ID)
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/json: { example: "" }
|
|
"404":
|
|
description: Server not found
|
|
post:
|
|
summary: Pair HomeKit camera and create/update stream
|
|
tags: [ HomeKit ]
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
description: Stream name to create/update
|
|
required: true
|
|
schema: { type: string }
|
|
- name: src
|
|
in: query
|
|
description: HomeKit URL (without pin)
|
|
required: true
|
|
schema: { type: string }
|
|
- name: pin
|
|
in: query
|
|
description: HomeKit PIN
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
delete:
|
|
summary: Unpair HomeKit camera and delete stream
|
|
tags: [ HomeKit ]
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
description: Stream name / server ID
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/api/homekit/accessories:
|
|
get:
|
|
summary: Get HomeKit accessories JSON for a stream
|
|
tags: [ HomeKit ]
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
description: Stream name
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/json: { example: { } }
|
|
"404":
|
|
description: Stream not found
|
|
|
|
/pair-setup:
|
|
post:
|
|
summary: HomeKit Pair Setup (HAP)
|
|
description: HomeKit Accessory Protocol endpoint (TLV8).
|
|
tags: [ HomeKit ]
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/pairing+tlv8: { example: "" }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/pairing+tlv8: { example: "" }
|
|
|
|
/pair-verify:
|
|
post:
|
|
summary: HomeKit Pair Verify (HAP)
|
|
description: HomeKit Accessory Protocol endpoint (TLV8).
|
|
tags: [ HomeKit ]
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/pairing+tlv8: { example: "" }
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
content:
|
|
application/pairing+tlv8: { example: "" }
|
|
|
|
|
|
/onvif/:
|
|
get:
|
|
summary: ONVIF server implementation
|
|
description: Simple realisation of the ONVIF protocol. Accepts any suburl requests
|
|
tags: [ ONVIF ]
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
|
|
|
|
/stream/:
|
|
get:
|
|
summary: RTSPtoWebRTC server implementation
|
|
description: Simple API for support [RTSPtoWebRTC](https://www.home-assistant.io/integrations/rtsp_to_webrtc/) integration
|
|
tags: [ RTSPtoWebRTC ]
|
|
responses:
|
|
default:
|
|
description: ""
|
|
|
|
|
|
/api/ws:
|
|
get:
|
|
summary: WebSocket endpoint
|
|
description: |
|
|
Upgrade to WebSocket and exchange JSON messages:
|
|
- Request: `{ "type": "...", "value": ... }`
|
|
- Response: `{ "type": "...", "value": ... }`
|
|
|
|
Supported message types depend on enabled modules (see `api/README.md`).
|
|
tags: [ WebSocket ]
|
|
parameters:
|
|
- name: src
|
|
in: query
|
|
description: Stream name (consumer)
|
|
required: false
|
|
schema: { type: string }
|
|
- name: dst
|
|
in: query
|
|
description: Stream name (producer)
|
|
required: false
|
|
schema: { type: string }
|
|
responses:
|
|
"101": { description: Switching Protocols }
|
|
|
|
|
|
|
|
/api/webtorrent?src={src}:
|
|
get:
|
|
summary: Get WebTorrent share info
|
|
tags: [ WebTorrent ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
200: { $ref: "#/components/responses/webtorrent" }
|
|
post:
|
|
summary: Add WebTorrent share
|
|
tags: [ WebTorrent ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
200: { $ref: "#/components/responses/webtorrent" }
|
|
delete:
|
|
summary: Delete WebTorrent share
|
|
tags: [ WebTorrent ]
|
|
parameters:
|
|
- $ref: "#/components/parameters/stream_src_path"
|
|
responses:
|
|
default: { description: "" }
|
|
|
|
/api/webtorrent:
|
|
get:
|
|
summary: Get all WebTorrent shares info
|
|
tags: [ WebTorrent ]
|
|
responses:
|
|
200: { $ref: "#/components/responses/discovery" }
|
|
|
|
|
|
|
|
/api/stack:
|
|
get:
|
|
summary: Show list unknown goroutines
|
|
tags: [ Debug ]
|
|
responses:
|
|
200:
|
|
description: ""
|
|
content: { text/plain: { example: "" } }
|