Skip to content

CCTV and video

A camera is a data source in FACE. It can be an IP camera or NVR over RTSP, an ONVIF device, an HTTP feed, a video file, or the operator’s own device camera pushing frames. The connector’s job is reachability and description. Frame analysis happens in FACE’s vision pipeline (see /docs/analysis/).

Type spellings

WhereSpellings
Connector registry (Test, Explore)cctv, videostream (video_stream, the “Video Stream” card), camera
Fetch routingcctv, video_stream, videostream, camera, webcam

Settings (CctvConnectionConfig)

SettingMeaning
endpoint_urlrtsp:// / rtsps:// (default port 554), http:// / https://, or a file path readable on the processing node. Do not put credentials in the URL.
usernameCamera username (a setting)
max_framesFrames sampled per extraction. 0 means the server default, not “none”.
transportRTSP transport: tcp (default) or udp
device_captureMarks a push source: the operator’s device records frames and sends them to FACE. endpoint_url stays empty.

Credential: password. It answers RTSP Digest (preferred) or Basic challenges, and ONVIF WS-Security UsernameToken with a password digest. It is never echoed, logged or written into lineage.

Internal addresses are allowed by default, because cameras live on site networks.

Test

Test on a camera connection, from the Connections screen or the CCTV screen, uses the same probe:

EndpointWhat Test does
rtsp://, rtsps://TCP connect to the camera (5 s)
http://, https://One HEAD request with the credentials. 401/403 is reported as feed rejected the credentials (HTTP …).
File pathChecks that the file exists and is not a directory
Device captureValidates the configuration. There is no server-side endpoint to dial. device_capture together with an endpoint_url is refused.

A successful probe says the camera accepted a connection. It does not say that video is being published or that a frame will decode.

Explore: asking the camera what it is

EndpointExplore reads
rtsp://, rtsps://Native RTSP OPTIONS + DESCRIBE (Accept: application/sdp). There is one dataset per media track, with codec, clock rate, packetisation and profile, plus resolution and frame rate where the camera states them, including from the H.264 parameter sets.
http://, https:// (ONVIF)ONVIF over SOAP 1.2: GetSystemDateAndTime, GetDeviceInformation, GetServices/GetCapabilities, GetProfiles, GetVideoSourceConfigurations and GetStreamUri. Each returned stream URI is then described over RTSP in the same call. You type a host and a credential, and FACE finds the streams.
File path, device capturesupported=false, with the reason

CCTVService.DescribeSource returns the same description for an ad-hoc endpoint. Each reason repeats what a DESCRIBE does not establish:

  • that video is being published (an NVR describes a channel whose camera is unplugged)
  • that the codec will decode on this deployment
  • that the scene is what you expect
  • that playback (SETUP/PLAY) will be allowed

ONVIF uses Media ver10. A device that serves profiles only on Media2 reports zero profiles, and the reason says so. FACE does not multicast-probe your LAN (WS-Discovery) and does not subscribe to events. Each camera is added by address.

Snapshots

When a camera supports ONVIF GetSnapshotUri, FACE can fetch a still with one authenticated GET instead of decoding video. Only the path and query from the device’s answer are used. The host and port stay the ones on your connection, so a device cannot redirect FACE to another address. The response must validate as an image.

Frames: two paths

PathRPCWhat it doesWhat it leaves behind
GradedSurveillanceService.IngestSurveillanceFeed (and a fetch’s camera branch)Samples or receives frames, then runs the vision tier: object grading, material, damage, and evidence framesOne lineage record per ingest, evidence artefacts, observations
LiveSurveillanceService.DetectLiveFrameOne validated frame through the deployment’s local detector only. It never reaches the vision model or the network.Nothing: no lineage, observation or evidence

A live answer carries box_origin = BOX_ORIGIN_LOCAL_DETECTOR, the detector’s own label, and no grade, material or damage fields. Its detection_note is never empty and says whether a local detector is present in this deployment. That note describes the deployment, not the camera.

Frame limits

  • Accepted formats: JPEG and PNG (unsupported image format "…" (only jpeg/png accepted))
  • At most 12 MiB per frame, and 40 million pixels
  • Frames sampled from a feed per sweep: default 2, maximum 8. The operator setting VISION_SWEEP_FRAMES changes this.

A camera connection’s Execute has no tabular result and says so. Frames reach analysis through the ingest path, not through SqlService.