← Work
Open source · MIT · v0.2.0

Camera Feed Lab

A roomful of virtual security cameras without buying or wiring a single one — plus the tool that proves the video actually made it through.

Camera Feed Lab serves configurable RTSP camera feeds from generated test patterns or approved recordings, so you can develop and test an NVR, VMS, video wall, player, analytics service, or any other RTSP consumer as though real cameras were attached. The same configuration runs on a laptop, in CI, or as a shared lab feeder.

The problem it solves.

Software that consumes surveillance video is hard to develop and test without a stable camera estate. Physical cameras are finite, location-dependent, privacy-sensitive, and prone to changes outside the test. A directory of video files is reproducible, but it does not exercise RTSP connections, stream startup, fan-out, pacing, readiness, process lifecycle, or time-aligned replay. Hand-written FFmpeg commands fill the gap for one experiment, but they are hard to review, repeat, scale, and carry between environments.

Camera Feed Lab packages those concerns into one controlled test fixture. The portable default needs no media files — it produces a site-neutral set of synthetic camera feeds immediately. More realistic tests mount local or shared media read-only and replay it without embedding footage or deployment details in the image or repository.

Part one

Feed server.

Validates a JSON manifest, supervises MediaMTX and FFmpeg, and publishes the requested RTSP/TCP camera paths.

  • 1–64 source streams, each with a stable ID, unique RTSP path, activation mode, and explicit video/audio handling.
  • Synthetic or recorded. Deterministic test patterns and tones, or real-time replay of approved MPEG-PS/TS, MP4/MOV, and MXF files.
  • Wall-clock day replay. A looped full-day recording seeks to the current time of day so historical footage tracks real time.
  • Validate before start. Strict JSON contract, rooted media confinement, shell-free FFmpeg planning, and a machine-readable /health readiness endpoint.
Part two

Chain Monitor.

The verification half. It observes what a test consumer actually receives rather than assuming a healthy simulator means a healthy end-to-end system.

  • Delivery probes. Rotating RTSP/TCP probes measure delivered frames against monotonic time.
  • Display liveness. In-memory PNG/JPEG comparisons verify that each region of a physical display is advancing — not dark or frozen — with per-tile masks so moving UI chrome can’t hide a frozen video surface.
  • Telemetry-aware. Typed collectors fold in application health, reader state, and event counts from generic JSON endpoints.
  • Runs independently. Use the feed server alone when end-to-end observation isn’t needed.

Who it’s for.

Anyone building or testing software that expects network cameras.

What it isn’t.

Camera Feed Lab is deliberately narrower than a real NVR — it is the stream-serving and verification side of a camera/NVR test environment.

Open source.

Camera Feed Lab is MIT-licensed and released as open source at v0.2.0. A Go supervisor wraps pinned MediaMTX and FFmpeg in a hardened, non-root, read-only container. The default Compose stack is self-contained: clone the repository, build, and it generates a site-neutral synthetic profile with no footage or credentials required.

View on GitHub → MIT · Go · MediaMTX + FFmpeg