HomeTechOps

Cameras

RTSP camera URL not working

Build a working RTSP URL — the per-vendor path families (Reolink, Hikvision, Dahua/Amcrest), password encoding, and ffprobe testing.

Problem summary

An RTSP URL is rtsp://USER:PASS@IP:554/<path>, and the path is vendor-specific. Most 'RTSP not working' is the wrong vendor path, a password with special characters that isn't percent-encoded, or a blocked port — prove the URL with ffprobe/VLC before wiring it into an NVR.

Operator snapshotEvidence first
First proof

Use the correct vendor path family for main vs sub stream.

Screen to open

ffprobe -rtsp_transport tcp "rtsp://USER:PASS@IP:554/<vendor-path>"

Expected signal

The path matches the brand (Reolink Preview_01_main/sub; Hikvision /Streaming/Channels/101|102; Dahua/Amcrest /cam/realmonitor?channel=1&subtype=0|1).

Stop boundary

If the camera is unreachable at all, treat it as camera-offline.

Layer path

1An RTSP URL has a fixed shape — rtsp://USER:PASS@IP:554/<path> — and the <path> is vendor-specific, so 'it won't connect' is usually the path, the credentials encoding, or the wrong stream role.
2The vendor families matter: Reolink, Hikvision (and Hik-OEM), and Dahua (which Amcrest is built on) each have their own path format, with separate main and sub stream paths.
3Special characters in the password (@, !, *, etc.) break the URL parser at the '@' unless percent-encoded.
4Prove the URL with ffprobe/VLC before wiring it into an NVR — that isolates a URL problem from an NVR-config problem.
Runbook

Step-by-step runbook

Start here. Do each check in order, compare it to the expected result, and stop when the evidence explains the failure or the safe stop point applies.

1

Identify the camera brand/family

Check: Determine whether it's Reolink, Hikvision/Hik-OEM, or Dahua/Amcrest.

Expected result: You know which RTSP path format to use.

If not: Amcrest and many OEMs follow the Dahua format; Hik-OEMs follow Hikvision.

2

Build the URL with the right path + encoding

Check: Use the brand's main/sub path and percent-encode any special characters in the password.

Expected result: A syntactically valid URL with the correct stream role.

If not: If unsure of the path, read it from ONVIF Device Manager or the camera's web UI.

3

Prove it with ffprobe/VLC

Check: Open the URL outside any NVR.

Expected result: The stream plays with a reported codec.

If not: 404 = path; auth = encoding; timeout = port/firewall — fix the specific failure.

4

Confirm port reachability across the VLAN

Check: Check TCP 554 (or the camera's port) from the NVR.

Expected result: The NVR can reach the RTSP port.

If not: Open the port across the camera VLAN if it's blocked.

5

Wire the verified URL into the NVR

Check: Use the working URL; for Frigate, restream via go2rtc and select the matching preset.

Expected result: The NVR pulls the stream reliably.

If not: If VLC worked but the NVR fails, the issue is NVR codec/preset, not the URL.

Decision tree

Decision tree

If: Connection refused / 404 on the path.

Then: Wrong vendor path or stream role.

Action: Use the brand's documented main/sub path (Reolink/Hikvision/Dahua-Amcrest families).

If: Auth fails despite correct password.

Then: Special characters not percent-encoded.

Action: URL-encode the password (@ → %40) or set a temporary simple password to confirm.

If: Times out / no route.

Then: Port 554 blocked or wrong RTSP port (often a camera-VLAN firewall).

Action: Open the RTSP port across the VLAN or use the camera's configured port.

Safe stop: If the camera is unreachable at all, treat it as camera-offline.

If: VLC works but the NVR/Frigate doesn't.

Then: NVR/Frigate config (codec/preset/restream), not the URL.

Action: Take the verified URL into the NVR; for Frigate use go2rtc + the right preset.

Evidence

Evidence table

SymptomEvidence to collectLikely layerNext action
404 / refused on the RTSP path.Brand + the exact path used vs the vendor format.Wrong path / stream roleUse the documented main/sub path for that brand.
Auth fails with a correct password.Whether the password has special characters and is encoded.URL encodingPercent-encode the password; retest.
Connection times out.TCP 554 reachability across the network/VLAN.Port / firewallOpen the RTSP port to the NVR; verify the camera's RTSP port.
VLC plays it, NVR won't.NVR codec/preset/restream config.NVR configCarry the verified URL in; for Frigate restream via go2rtc.
Reference

Commands and settings paths

Probe the candidate URL

ffprobe -rtsp_transport tcp "rtsp://USER:PASS@IP:554/<vendor-path>"

Where: From a machine that can reach the camera.

Expected: ffprobe reports a video stream (codec, resolution, fps).

Failure means: 404/invalid = wrong path; auth error = encode the password; timeout = port/firewall.

Safe next step: Correct the specific failure and re-probe; then use the working URL in the NVR.

Discover the path/port

ONVIF Device Manager (shows stream URIs) or the camera's web UI > stream settings

Where: On the LAN with the camera's credentials.

Expected: The camera reports its RTSP URI(s) and port for main and sub streams.

Failure means: If the web UI shows a non-554 port or an unusual path, use exactly that.

Safe next step: Copy the reported URI; percent-encode credentials in the final URL.

Test reachability to the RTSP port

nc -vz <camera-ip> 554 (or the camera's configured RTSP port)

Where: From the NVR (across the VLAN if segmented).

Expected: The port is open from the NVR's vantage point.

Failure means: A blocked port points at the inter-VLAN firewall or a wrong port, not the URL syntax.

Safe next step: Allow the NVR to reach the RTSP port; see /cameras/isolate-cameras-on-vlan.

Hardware boundary

Hardware and platform boundary

Change only when

  • Standardize on cameras that expose a documented RTSP URL and a usable low-res substream — it makes NVR/Frigate setup predictable across brands.

Evidence that matters

  • A published RTSP path, a separate substream, ONVIF for discovery, and credentials you can set without exotic characters.

Evidence that does not matter

  • A glossy app if it doesn't also expose standard RTSP — you'll fight every NVR integration.

Avoid

  • Hardcoding a per-model URL table as gospel — firmware changes paths; verify with ffprobe/ONVIF each time.

Related tool/calculator

Use the linked calculator or tool to turn this runbook into numbers for your exact setup.

Camera bandwidth calculator

Related problems

Last reviewed

2026-06-02 · Reviewed by HomeTechOps. Built from June-2026 research verified against Reolink/Hikvision/Dahua RTSP formats (Amcrest = Dahua family) and the percent-encoding requirement; leads with brand-family patterns + ffprobe verification rather than a per-model matrix (firmware changes paths), per the no-fake-compatibility rule.

Sources/assumptions

  • Assumes a camera exposing standard RTSP with a main and sub stream; vendor path formats differ.
  • Amcrest is built on Dahua firmware (shared URL format); many OEMs follow Dahua or Hikvision patterns.
  • Firmware revisions can change RTSP paths — verify with ffprobe / ONVIF Device Manager rather than trusting a static per-model table.

Source-backed checks

HomeTechOps turns official docs and conservative safety rules into a shorter runbook. These links are the source trail for the page direction.