{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "go2rtc", "type": "object", "additionalProperties": false, "definitions": { "listen": { "type": "string", "anyOf": [ { "type": "string", "pattern": ":[0-9]{1,5}$" }, { "type": "string", "const": "" } ] }, "log_level": { "type": "string", "enum": [ "trace", "debug", "info", "warn", "error" ] } }, "properties": { "api": { "type": "object", "properties": { "listen": { "default": ":1984", "examples": [ "127.0.0.1:8080" ], "$ref": "#/definitions/listen" }, "username": { "type": "string", "examples": [ "admin" ] }, "password": { "type": "string" }, "base_path": { "type": "string", "examples": [ "/go2rtc" ] }, "static_dir": { "type": "string", "examples": [ "/var/www" ] }, "origin": { "type": "string", "const": "*" }, "tls_listen": { "$ref": "#/definitions/listen" }, "tls_cert": { "type": "string", "examples": [ "-----BEGIN CERTIFICATE-----", "/ssl/fullchain.pem" ] }, "tls_key": { "type": "string", "examples": [ "-----BEGIN PRIVATE KEY-----", "/ssl/privkey.pem" ] }, "unix_listen": { "type": "string", "examples": [ "/tmp/go2rtc.sock" ] } } }, "ffmpeg": { "type": "object", "properties": { "bin": { "type": "string", "default": "ffmpeg" } }, "additionalProperties": { "description": "FFmpeg template", "type": "string" } }, "hass": { "type": "object", "properties": { "config": { "description": "Home Assistant config directory path", "type": "string", "examples": [ "/config" ] } } }, "homekit": { "type": "object", "additionalProperties": { "type": "object", "properties": { "pin": { "type": "string", "default": "19550224", "pattern": "^[0-9]{8}$" }, "name": { "type": "string" }, "device_id": { "type": "string" }, "device_private": { "type": "string" }, "pairings": { "type": "array", "items": { "type": "string" } } } } }, "log": { "type": "object", "properties": { "format": { "type": "string", "default": "color", "enum": [ "color", "json", "text" ] }, "level": { "description": "Defaul log level", "default": "info", "$ref": "#/definitions/log_level" }, "output": { "type": "string", "default": "stdout", "enum": [ "", "stdout", "stderr" ] }, "time": { "type": "string", "default": "UNIXMS", "anyOf": [ { "type": "string", "enum": [ "", "UNIXMS", "UNIXMICRO", "UNIXNANO", "2006-01-02T15:04:05Z07:00", "2006-01-02T15:04:05.999999999Z07:00" ] }, { "type": "string" } ] }, "api": { "$ref": "#/definitions/log_level" }, "echo": { "$ref": "#/definitions/log_level" }, "exec": { "description": "Value `exec: debug` will print stderr", "$ref": "#/definitions/log_level" }, "expr": { "$ref": "#/definitions/log_level" }, "ffmpeg": { "description": "Will only be displayed with `exec: debug` setting", "default": "error", "$ref": "#/definitions/log_level" }, "hass": { "$ref": "#/definitions/log_level" }, "hls": { "$ref": "#/definitions/log_level" }, "homekit": { "$ref": "#/definitions/log_level" }, "mp4": { "$ref": "#/definitions/log_level" }, "ngrok": { "$ref": "#/definitions/log_level" }, "onvif": { "$ref": "#/definitions/log_level" }, "rtmp": { "$ref": "#/definitions/log_level" }, "rtsp": { "$ref": "#/definitions/log_level" }, "streams": { "$ref": "#/definitions/log_level" }, "webrtc": { "$ref": "#/definitions/log_level" }, "webtorrent": { "$ref": "#/definitions/log_level" } } }, "ngrok": { "type": "object", "properties": { "command": { "type": "string", "examples": [ "ngrok tcp 8555 --authtoken xxx", "ngrok start --all --config ngrok.yaml" ] } } }, "publish": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "string", "examples": [ "rtmp://xxx.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx-xxxx", "rtmps://xxx-x.rtmp.t.me/s/xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxx" ] }, { "type": "array", "items": { "type": "string" } } ] } }, "rtmp": { "type": "object", "properties": { "listen": { "examples": [ ":1935" ], "$ref": "#/definitions/listen" } } }, "rtsp": { "type": "object", "properties": { "listen": { "default": ":8554", "$ref": "#/definitions/listen" }, "username": { "type": "string", "examples": [ "admin" ] }, "password": { "type": "string" }, "default_query": { "type": "string", "default": "video&audio" }, "pkt_size": { "type": "integer" } } }, "srtp": { "description": "SRTP server for HomeKit", "type": "object", "properties": { "listen": { "default": ":8443", "$ref": "#/definitions/listen" } } }, "streams": { "type": "object", "additionalProperties": { "title": "Stream", "anyOf": [ { "description": "Source", "type": "string", "examples": [ "rtsp://username:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif", "rtsp://username:password@192.168.1.123/stream1", "rtsp://username:password@192.168.1.123/h264Preview_01_main", "rtmp://192.168.1.123/bcs/channel0_main.bcs?channel=0&stream=0&user=username&password=password", "http://192.168.1.123/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password", "http://username:password@192.168.1.123/cgi-bin/snapshot.cgi?channel=1", "ffmpeg:media.mp4#video=h264#hadware#width=1920#height=1080#rotate=180#audio=copy", "ffmpeg:virtual?video=testsrc&size=4K#video=h264#hardware#bitrate=50M", "bubble://username:password@192.168.1.123:34567/bubble/live?ch=0&stream=0", "dvrip://username:password@192.168.1.123:34567?channel=0&subtype=0", "exec:ffmpeg -re -i media.mp4 -c copy -rtsp_transport tcp -f rtsp {output}", "isapi://username:password@192.168.1.123:80/", "kasa://username:password@192.168.1.123:19443/https/stream/mixed", "onvif://username:password@192.168.1.123:80?subtype=0", "tapo://password@192.168.1.123:8800?channel=0&subtype=0", "webtorrent:?share=xxx&pwd=xxx" ] }, { "type": "array", "items": { "description": "Source", "type": "string" } } ] } }, "webrtc": { "type": "object", "properties": { "listen": { "default": ":8555/tcp", "type": "string", "anyOf": [ { "type": "string", "pattern": ":[0-9]{1,5}(/tcp|/udp)?$" }, { "type": "string", "const": "" } ] }, "candidates": { "type": "array", "items": { "$ref": "#/definitions/listen/anyOf/0" }, "examples": [ "216.58.210.174:8555", "stun:8555", "home.duckdns.org:8555" ] }, "ice_servers": { "type": "array", "items": { "type": "object", "properties": { "urls": { "type": "array", "items": { "type": "string", "examples": [ "stun:stun.l.google.com:19302", "turn:123.123.123.123:3478" ] } }, "username": { "type": "string" }, "credential": { "type": "string" } } } }, "filters": { "type": "object", "properties": { "candidates": { "description": "Keep only these candidates", "type": "array", "items": { "type": "string" } }, "interfaces": { "description": "Keep only these interfaces", "type": "array", "items": { "type": "string" } }, "ips": { "description": "Keep only these IP-addresses", "type": "array", "items": { "type": "string" } }, "networks": { "description": "Use only these network types", "type": "array", "items": { "enum": [ "tcp4", "tcp6", "udp4", "udp6" ], "type": "string" } }, "udp_ports": { "description": "Use only these UDP ports range [min, max]", "type": "array", "items": { "type": "integer" }, "maxItems": 2, "minItems": 2 } } } } }, "webtorrent": { "type": "object", "properties": { "trackers": { "type": "array", "items": { "type": "string" } }, "shares": { "additionalProperties": { "type": "object", "properties": { "pwd": { "type": "string" }, "src": { "type": "string" } } } } } } } }