Skip to content

Cameras

Fregata works with anything that exposes RTSP — which is almost every IP camera made. This page is a cheat-sheet of URL patterns by brand, plus the workarounds for cameras that are shy about their streams.

Replace user:pass with your camera’s credentials and IP with the camera’s address. The “main stream” is the high-resolution feed for recording; the “sub-stream” is a lower-resolution feed for detection.

Main: rtsp://user:pass@IP:554/h264Preview_01_main
Sub: rtsp://user:pass@IP:554/h264Preview_01_sub

For HEVC models, swap h264 for h265. Most modern Reolinks dual- encode — they’ll serve H.264 even when set to H.265 in the app.

Main: rtsp://user:pass@IP:554/cam/realmonitor?channel=1&subtype=0
Sub: rtsp://user:pass@IP:554/cam/realmonitor?channel=1&subtype=1

Multi-channel NVRs from these brands increment the channel parameter (1, 2, 3…). The sub-stream toggle is subtype.

Main: rtsp://user:pass@IP:554/Streaming/Channels/101
Sub: rtsp://user:pass@IP:554/Streaming/Channels/102

The path is 1xx (main) and 1xy (sub-stream); for additional channels, increment the leading digit.

Most Lorex models are rebadged Dahua. Try the Dahua URL first.

UniFi cameras have RTSP disabled by default. To turn it on:

  1. Open Protect.
  2. Cameras → click camera → SettingsAdvanced.
  3. Under RTSP, enable each stream you want and copy the URL.

The URL UniFi gives you looks like rtsps://192.168.1.1:7441/<random-key> — it’s RTSP-over-TLS, port 7441. Fregata handles rtsps://; just paste the URL as-is.

These don’t expose RTSP. Workarounds:

  • Ring — no first-party path. Some users run Wyze-Ring-RTSP-style proxies, but they’re brittle.
  • Nest — Google killed the SDM API for new accounts; legacy Nest cams have community projects but nothing reliable.
  • Wyze — Wyze sells official RTSP firmware for some models. If yours is supported, install that firmware and it becomes a normal RTSP camera.

If “no cloud” matters to you, buy cameras that ship RTSP first-class: Reolink, Amcrest, Dahua, Hikvision, UniFi.

Main: rtsp://user:pass@IP:554/stream1
Sub: rtsp://user:pass@IP:554/stream2

Tapo cameras require you to enable the camera account in the Tapo app first (Settings → Camera Account → Set Up). The username/password you set there is what RTSP uses, separate from your Tapo account credentials.

rtsp://user:pass@IP/axis-media/media.amp

Axis URLs accept a videocodec query param if you want to pin the codec. Without it, the camera serves whatever’s negotiated.

Cameras that follow the ONVIF spec (most of them) expose stream URLs via the Media2 service. The easiest discovery tool is ONVIF Device Manager, which connects, lists profiles, and prints the RTSP URL for each.

USB and built-in cameras don’t speak RTSP. Two options:

  1. Run go2rtc with a ffmpeg:device source to fan out a built-in or USB camera as RTSP. go2rtc is already part of Fregata’s bundle; configure it via go2rtc.streams in config.yml. See go2rtc’s README for syntax.
  2. Plug in via Continuity Camera — your iPhone’s camera shows up as a webcam to macOS, which go2rtc can then serve. Useful for one-off “what does that camera angle look like” tests.

This isn’t the use case Fregata’s tuned for — single-purpose IP cameras are the boring, reliable choice — but the mechanism works.

The pattern Fregata is shaped around is main stream for recording, sub-stream for detection:

cameras:
driveway:
ffmpeg:
inputs:
- path: rtsp://user:pass@10.0.1.20:554/h264Preview_01_main
roles: [record]
- path: rtsp://user:pass@10.0.1.20:554/h264Preview_01_sub
roles: [detect]

Why: the sub-stream is usually 640×480 or smaller. Detection at that size is bandwidth- and decode-cheap; only the main stream’s bytes hit the disk. CPU usage drops by 3–5× compared to running detection on the main stream.

If your camera doesn’t have a sub-stream, you can let Fregata’s detector run on the main stream and the recorder uses the same ffmpeg input via the [record, detect] roles tuple — the file just gets decoded once for both purposes.

If detection is choppy and ffprobe shows the camera is reachable over TCP but not UDP (a common Wi-Fi failure mode), pin the transport:

ffmpeg:
input_args: -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1

This is also Fregata’s default for most camera profiles — you shouldn’t need to set it unless you’ve overridden input_args elsewhere.

Frigate has an onvif config block on each camera for PTZ control and presets. It doesn’t replace the RTSP URL — you still need that. The ONVIF block is for telling Fregata “this camera’s pan-tilt- zoom is at port 8000, and here’s how to authenticate”. See the Frigate ONVIF docs for the details.