Cameras & compatibility
NVR talks to cameras over RTSP — if a camera or recorder serves an RTSP stream, it almost certainly works. No vendor cloud account, no ONVIF discovery required: paste the stream URL and go.
Stream tiers#
Most IP cameras serve the same video at several resolutions. NVR uses each tier for what it’s good at:
| Tier | Hikvision channel | Used for |
|---|---|---|
| main | 101 | Focus view, recording, downloads, snapshots |
| sub | 102 | Grid tiles, recorded-playback scrubbing, thumbnails |
| third | 103 | Motion/detection evidence (on cameras that have it) |
This tiering is what keeps 16 cameras smooth on one machine: the grid only ever pulls the cheap ~250 kbps sub streams, and the 4K main stream flows when you focus a single camera. Older two-stream cameras simply have no third — everything still works.
RTSP URL cheat sheet#
Replace user:pass and the host; channel numbers are 1-based.
| Vendor | Main stream | Sub stream |
|---|---|---|
| Hikvision | rtsp://user:pass@cam:554/Streaming/Channels/101 | …/Streaming/Channels/102 |
| Dahua | rtsp://user:pass@cam:554/cam/realmonitor?channel=1&subtype=0 | …&subtype=1 |
| Axis | rtsp://user:pass@cam:554/axis-media/media.amp | add ?resolution=640x360 |
| Reolink | rtsp://user:pass@cam:554/h264Preview_01_main | …/h264Preview_01_sub |
| Amcrest | same as Dahua | same as Dahua |
| ONVIF / other | check the camera’s web UI or manual — the path varies |
For Hikvision, the channel number is the camera (or DVR channel) times 100 plus the tier: camera 1 main is 101, DVR channel 6 sub is 602.
Codecs#
- H.265 (HEVC) is the primary path — camera bytes go to disk and to the browser unchanged, so recording 16 cameras costs almost no CPU.
- H.264 is fully supported end to end: ingest, recording, and playback. Mixed fleets are fine.
- Browsers that can’t decode HEVC (Firefox, Chrome without hardware HEVC) get an automatic H.264 compatibility lane — the daemon transcodes on demand, only for that viewer, never for recording. Safari and Chrome on Mac play HEVC natively.
DVRs and multi-channel devices#
Writing 16 camera blocks for a 16-channel DVR is tedious and error-prone, so a devices block expands one entry into one camera per channel at boot:
devices:
- id: dvr
name: "Office DVR"
vendor: hikvision # hikvision | dahua
host: 192.168.10.125:554
username: admin
password: CHANGEME
channels: [1, 2, 3, 4]
streams: [main, sub]
record: true Cameras appear as dvr-ch1, dvr-ch2, … with URLs built by the vendor adapter. Motion events from the device’s single control-plane stream are routed to the right channel camera automatically.
Audio#
Set audio: true on a stream to carry its audio track through to the browser and into recordings. Off by default per stream — most fixed cameras have no useful mic.
If a camera won’t connect#
Work through the troubleshooting page — and confirm the URL itself with a direct pull before blaming NVR:
ffprobe -rtsp_transport tcp "rtsp://user:pass@192.168.1.50:554/Streaming/Channels/101"