Skip to main content

Quick start

CCNVR is a network video recorder that does everything in a single process: device onboarding, live view, recording storage and playback.

Pick one of the three deployment methods below. The first visit always opens the setup wizard — set the language, local addresses and admin password there.

MethodBest forArtifact
WindowsDesktops, industrial PCsccnvr-windows-amd64.zip
LinuxProduction, auto-start on bootccnvr-linux-amd64-<version>.tar.gz
DockerServers, NAS, quick trialsImage ccnvr/ccnvr:latest

Windows deployment​

  1. Extract ccnvr-windows-amd64.zip to any directory.
  2. Double-click start.bat.
  3. Open http://127.0.0.1:16188.

To stop: double-click stop.bat.

Notes
  • Use start.bat, do not double-click ccnvr.exe directly. start.bat also launches the watchdog process, which restarts the service after a crash.
  • Do not kill ccnvr.exe alone from Task Manager — the watchdog will bring it back. Always stop with stop.bat, which terminates both the watchdog and MediaServer.
  • Windows Firewall prompts on first start — you must allow it, otherwise other machines on the LAN cannot reach it.
  • Only Windows system DLLs are required; no .NET or VC++ runtime needed.

Linux deployment​

1. Extract and start​

tar -xzf ccnvr-linux-amd64-<version>.tar.gz
cd ccnvr-linux-amd64
sudo ./start.sh

The start script prints the access address of every NIC on the machine. Open http://<ip>:16188.

2. Common commands​

./start.sh                # Start in background (survives terminal close)
./stop.sh # Stop
./start.sh status # Process status and health check
sudo ./start.sh service # Install systemd service: auto-start + auto-restart

Upgrades are done in the web console under System info → Version & upgrade — no need to extract the package over the existing files.

Notes
  • Root is required. RTSP defaults to port 554, a privileged port (<1024) that a normal user cannot bind. Run sudo ./start.sh, or sudo setcap 'cap_net_bind_service=+ep' ./MediaServer/MediaServer to run without sudo afterwards.
  • Do not mix sudo and a normal user. Once started with sudo, configs/config.toml is owned by root and a normal-user start can no longer read it. Always use sudo, or fix it with sudo chown -R $(id -un):$(id -gn) ..
  • Requires glibc ≥ 2.31: Ubuntu 20.04+ / Debian 11+ / CentOS Stream 9+.
  • A static ffmpeg ships in the package — nothing to install.

Docker deployment​

docker run -d --name ccnvr --restart always \
-p 16188:16188 \
-p 15060:15060 -p 15060:15060/udp \
-p 31100-31200:31100-31200 -p 31100-31200:31100-31200/udp \
-p 3702:3702/udp \
-v /opt/ccnvr/data:/opt/media/bin/configs \
ccnvr/ccnvr:latest

Then open http://<host-ip>:16188.

Add -p 2554:2554 -p 1935:1935 only if you need RTSP / RTMP distribution (both are off by default).

Notes
  • You must mount /opt/media/bin/configs. Config, database, device records, machine ID and the license file all live there. Without the mount they are lost when the container is recreated, and the license has to be reissued.
  • GB28181 device registration uses UDP 15060. Mapping only TCP makes devices report "registration timeout" forever, with nothing in the server log.
  • ONVIF auto-discovery relies on LAN multicast, so it cannot find devices on a bridge network. Use --network host on Linux (then drop all -p flags). Docker Desktop on Windows / macOS does not support host networking — add cameras by RTSP URL instead.
  • Recordings are written inside the container by default. To keep them on the host, add -v /opt/ccnvr/records:/opt/media/bin/records.

First-run setup​

The first visit opens the setup wizard:

  1. Language
  2. Network — GB28181 SIP advertised IP (LAN IP for local deployments, public IP for internet-facing ones), media server IP (127.0.0.1 is fine for a local install)
  3. Product name
  4. Admin password — default account admin, password admin; the default password cannot be kept

The wizard does not appear again.

Upload the .lic file under System info → License; it takes effect immediately without a restart. Without a license, CCNVR runs as the free edition (5 channels by default). Channels beyond the licensed count can still be managed and deleted, but not previewed or played back.


Ports​

On a cloud server, open these in the provider's security group as well as the host firewall — the security group is the most commonly missed step.

PurposePortProtocolRequired
Web console + ONVIF SOAP16188TCPYes
GB28181 SIP signaling15060TCP + UDPFor GB28181
GB28181 media31100-31200TCP + UDPFor GB28181
ONVIF WS-Discovery3702UDPOptional
RTSP distribution2554TCPOptional
RTMP distribution1935TCPOptional

The media API (16198) is for internal use only — do not expose it.

Optional ports are off by default; enable them under Settings → Stream distribution. Web playback, snapshots and recording do not depend on them.


Troubleshooting​

SymptomCause
GB28181 devices keep timing out and the server logs no SIP traffic at allUDP 15060 is not open in the security group / firewall
ONVIF devices are not discovered on the LANDocker is on a bridge network; switch to --network host
Device registers but shows no videoRTP range (31100-31200) UDP is blocked, or Sip.Host / Media.SDPIP is not set to the public IP
License upload returns invalidNo license public key built into the server, or the license does not match this device code
Linux start says it cannot read config.tomlA previous sudo start changed the file owner to root

See FAQ and Contact for more.