Files
go2rtc/internal/app
2026-02-06 21:45:55 +03:00
..
2025-12-22 17:22:22 +03:00
2025-10-07 15:15:04 +03:00
2025-12-27 12:17:40 +03:00
2026-02-06 21:45:55 +03:00
2025-10-07 15:15:04 +03:00

App

The application module is responsible for reading configuration files and running other modules.

The configuration can be edited through the application's WebUI with code highlighting, syntax and specification checking.

  • By default, go2rtc will search for the go2rtc.yaml config file in the current working directory
  • go2rtc supports multiple config files:
    • go2rtc -c config1.yaml -c config2.yaml -c config3.yaml
  • go2rtc supports inline config in multiple formats from the command line:
    • YAML: go2rtc -c '{log: {format: text}}'
    • JSON: go2rtc -c '{"log":{"format":"text"}}'
    • key=value: go2rtc -c log.format=text
  • Each subsequent config will overwrite the previous one (but only for defined params)
go2rtc -config "{log: {format: text}}" -config /config/go2rtc.yaml -config "{rtsp: {listen: ''}}" -config /usr/local/go2rtc/go2rtc.yaml

or a simpler version

go2rtc -c log.format=text -c /config/go2rtc.yaml -c rtsp.listen='' -c /usr/local/go2rtc/go2rtc.yaml

Environment variables

There is support for loading external variables into the config. First, they will be attempted to be loaded from credential files. If CREDENTIALS_DIRECTORY is not set, then the key will be loaded from an environment variable. If no environment variable is set, then the string will be left as-is.

streams:
  camera1: rtsp://rtsp:${CAMERA_PASSWORD}@192.168.1.123/av_stream/ch0

rtsp:
  username: ${RTSP_USER:admin}   # "admin" if "RTSP_USER" not set
  password: ${RTSP_PASS:secret}  # "secret" if "RTSP_PASS" not set

JSON Schema

Editors like GoLand and VS Code support autocomplete and syntax validation.

# yaml-language-server: $schema=https://raw.githubusercontent.com/AlexxIT/go2rtc/master/www/schema.json

or from a running go2rtc:

# yaml-language-server: $schema=http://localhost:1984/schema.json

Defaults

  • Default values may change in updates
  • FFmpeg module has many presets, they are not listed here because they may also change in updates
api:
  listen: ":1984"  # default public port for WebUI and HTTP API

ffmpeg:
  bin: "ffmpeg"  # default binary path for FFmpeg

log:
  level: "info"  # default log level
  output: "stdout"
  time: "UNIXMS"

rtsp:
  listen: ":8554"  # default public port for RTSP server
  default_query: "video&audio"

srtp:
  listen: ":8443"  # default public port for SRTP server (used for HomeKit)

webrtc:
  listen: ":8555"  # default public port for WebRTC server (TCP and UDP)
  ice_servers:
    - urls: [ "stun:stun.cloudflare.com:3478", "stun:stun.l.google.com:19302" ]

Log

You can set different log levels for different modules.

log:
  format: ""        # empty (default, autodetect color support), color, json, text 
  level: "info"     # disabled, trace, debug, info (default), warn, error
  output: "stdout"  # empty (only to memory), stderr, stdout (default)
  time: "UNIXMS"    # empty (disable timestamp), UNIXMS (default), UNIXMICRO, UNIXNANO
  
  api: trace   # module name: log level

Modules: api, streams, rtsp, webrtc, mp4, hls, mjpeg, hass, homekit, onvif, rtmp, webtorrent, wyoming, echo, exec, expr, ffmpeg, wyze, xiaomi.