Skip to content

Recording Servers

Recording servers are the workhorses of a Meridian VMS deployment. Each server runs the recorder daemon, which manages continuous recording and a stream relay for RTSP ingestion. The management server coordinates all recording servers through its API and real-time messaging.

Recording servers are managed from Settings > General > System in the web interface.

Recording servers register themselves automatically when the recorder daemon starts. The daemon connects to the management server using the credentials configured during installation.

  1. The recorder daemon starts and reads its configuration.
  2. It registers with the management server, providing its name and network address.
  3. If the server was previously registered, the management server updates its status to online.
  4. If this is a new server, a new registration is created.
  5. The recorder then fetches its assigned cameras and begins recording.

Each recording server sends a heartbeat to the management server every 30 seconds. The heartbeat includes:

  • Disk usage — total and used bytes on the recordings partition
  • Per-camera status — each camera reports as recording, error, or offline

The management server uses heartbeats to:

  • Update the server’s last_heartbeat timestamp
  • Set the server status to online
  • Bulk-update camera statuses in a single database query
  • Trigger failover rebalancing if the server was previously offline
StatusMeaning
onlineHeartbeat received within the expected interval
offlineNo heartbeat received; the server may be down or unreachable
degradedThe server is online but one or more cameras are in an error state

When a server transitions from offline to online, the management server automatically triggers a failover rebalance check if failover is enabled.

Clicking a recording server row in the System page opens a detailed health modal showing real-time statistics. The modal auto-refreshes every 10 seconds.

The health modal displays:

  • CPU utilisation — percentage and core count, with a colour-coded progress bar (green < 50%, yellow 50-80%, red > 80%)
  • Load average — 1, 5, and 15-minute load averages
  • Memory usage — used vs total, with a breakdown of memory consumed by individual recording processes

If the recording server has a CUDA-capable GPU (required for AI object detection), the health modal shows:

  • GPU model name — for example, NVIDIA Tesla T4
  • CUDA version
  • GPU utilisation — percentage with colour-coded bar
  • VRAM usage — used, free, and total memory with a progress bar
  • GPU temperature — in degrees Celsius

The health modal also shows:

  • Total cameras assigned to the server
  • Number of cameras currently recording
  • Events detected today

A list of internal daemon threads (heartbeat, retention, detection, etc.) with alive/dead indicators.

Each recording server has independent AI object detection settings. These are configured through the Edit dialog accessible from the server row in the System page.

Enable Object Detection : Master toggle. When disabled, no inference runs on this server regardless of other settings.

Model : The detection model to use. Available options:

| Model | Description |
|---|---|
| Nano | Fastest inference, lowest accuracy |
| Small | Good balance of speed and accuracy |
| Medium | Best balance (recommended) |
| Large | Highest accuracy, GPU intensive |
| VisDrone | Optimised for overhead/aerial camera angles |
| Combined | COCO + VisDrone + LLVIP + CrowdHuman merged model |

Inference FPS : How many frames per second to process through the detection model. Range: 0.5 to 10.0 in 0.5 increments. Higher values detect events faster but consume more GPU resources.

Confidence Threshold : Minimum confidence score (10% to 90%) for a detection to be recorded as an event. Lower values catch more detections but may increase false positives.

Detection Classes : Which object classes to detect. Presented as toggle chips. Available classes include: person, car, truck, bus, motorcycle, bicycle, dog, cat, bird, pedestrian, people, van, motor, tricycle.

Separate from the recording detection pipeline, each server also has settings that apply only to the real-time Live Detection page:

Live Confidence : Confidence threshold for detections shown on the live detection view. Can be set independently of the recording threshold.

Live Detection Classes : Which classes to show on the live detection page. Allows showing a different set of classes than what is recorded.

Administrators can restart the recorder daemon on any server directly from the UI by clicking the Restart button on the server row. This sends a POST /api/servers/{id}/restart request, which proxies a restart command to the recorder’s local API.

After triggering a restart, the UI polls the server status every 3 seconds for up to 90 seconds, showing a “restarting” badge until the recorder reports back as healthy.

Each recording server reports disk usage through its heartbeat. The System page displays:

  • A progress bar showing used vs total disk space, colour-coded:
    • Green: < 75% used
    • Yellow: 75-90% used
    • Red: > 90% used
  • Used and total bytes in human-readable format (MB, GB, TB)
  • Total recording size stored on each server

The disk usage reported is for the partition containing /recordings, where all video segments are stored.

Administrators can delete a recording server from the System page. Deleting a server:

  • Removes the server record from the database
  • Unassigns all cameras that were assigned to it
MethodEndpointDescription
POST/api/servers/registerRecorder self-registration
GET/api/serversList all servers with recording size
GET/api/servers/{id}Get a single server
PATCH/api/servers/{id}Update server name, URL, or detection settings
DELETE/api/servers/{id}Delete a server
POST/api/servers/{id}/heartbeatHeartbeat with disk usage and camera statuses
POST/api/servers/{id}/restartTrigger recorder restart
GET/api/servers/{id}/camerasList cameras assigned to server
GET/api/servers/{id}/detectionGet detection config (called by recorder)
GET/api/servers/{id}/zonesGet detection zones for all cameras on server