Skip to content

Latest commit

 

History

History
79 lines (51 loc) · 5.08 KB

File metadata and controls

79 lines (51 loc) · 5.08 KB

Client integrations

FaultCam's external integrations are behavioral oracles, not runtime dependencies of faultcam::faultcam. A passing integration must show that a real client or relay consumed the RTSP stream and that the intended fault/recovery was observed. Building an image, starting a container, opening a TCP port, or finding an event name is not enough.

Fixed local versions

The current local harnesses require:

Component Fixed version Pin/evidence
FFmpeg 8.1.2-full_build-www.gyan.dev CMake requires version 8.1.2; each decode harness records the banner.
MediaMTX 1.19.1 Compose and the harness require bluenviron/mediamtx:1.19.1@sha256:61ebddaa43a6da78d4c6e98b9f9c12066856ffd85893656f5c000d870b88bbe4.
go2rtc 1.9.14 alexxit/go2rtc:1.9.14@sha256:675c318b23c06fd862a61d262240c9a63436b4050d177ffc68a32710d9e05bae.

MediaMTX and go2rtc are both pinned by tag and digest. The MediaMTX harness rejects an image override that differs from its exact pinned reference.

FFmpeg

When FFmpeg 8.1.2 is found at configure time, CMake registers ten ffmpeg_* tests:

  • H.264 over TCP and UDP;
  • H.265 over TCP and UDP;
  • H.264 plus PCMA, PCMU, or AAC over TCP;
  • bounded media-stall, timestamp-backward, and disconnect cases.

The harness invokes FFmpeg decode, writes framemd5 output, checks minimum video/audio frame counts, validates runner/client exit and timeout state, and preserves JSON/JSONL/JUnit. ffprobe metadata success is not used as a substitute for decoded frames.

At the 2026-07-26 documentation update, all 10 tests passed as part of the current default MSVC Release 85/85 run. The full CTest record is artifacts/verification/windows-current/ctest.log, and regenerated reports are under build-core-final/ffmpeg-decode-reports/. Earlier run-specific reports under artifacts/ffmpeg-matrix/ remain useful inputs but are not treated as one homogeneous final matrix because that directory also contains exploratory cases.

MediaMTX

CTest name: mediamtx_disconnect_recovery.

The harness builds FaultCam in a container, gives FaultCam and MediaMTX a private internal relay network, publishes only MediaMTX's RTSP endpoint on a dynamically selected 127.0.0.1 port, and attaches host FFmpeg. Passing requires:

  • the expected fixed versions;
  • loopback-only host binding and internal-only FaultCam;
  • MediaMTX pulling FaultCam, reconnecting after the injected disconnect, and obtaining media from the second connection;
  • FFmpeg decoding 30 frames from the relay;
  • zero FaultCam/client exits and complete container/network cleanup.

The current artifact is artifacts/integrations/mediamtx-e2e-current/client-report.json: status passed, 30 decoded frames, 2 accepted FaultCam connections, post-reconnect media, 292 FaultCam RTP packets, and no remaining Compose containers or networks. mediamtx_disconnect_recovery also passed in 30.48 s inside the current Windows 85/85 run.

go2rtc

CTest names: go2rtc_normal_decode and go2rtc_disconnect_reconnect.

Each run uses a unique internal Compose network with no published container ports. A short-lived docker exec TCP proxy listens only on 127.0.0.1 so host FFmpeg can reach the relay. The normal case must decode at least 30 frames. The reconnect case injects disconnect_reconnect at frame 8 and additionally requires:

  • first-connection media before the fault;
  • a recorded disconnect event;
  • a second accepted upstream connection;
  • first media on connection two after the fault;
  • decoded frames after relay recovery;
  • proxy and Docker cleanup.

The latest recorded artifacts are:

  • artifacts/integrations/go2rtc-normal/result.json: passed, 30 decoded frames;
  • artifacts/integrations/go2rtc-disconnect-reconnect/result.json: passed, 30 decoded frames, 2 upstream connections, recovery assertions passed.

Both were refreshed by the current Windows 85/85 run. The normal and disconnect/reconnect CTests passed in 32.16 s and 29.59 s respectively, and both reports record complete proxy and Docker cleanup.

Running integrations

cmake -S . -B build -DFAULTCAM_BUILD_TESTS=ON
cmake --build build --config Release --parallel
ctest --test-dir build -C Release -L ffmpeg --output-on-failure
ctest --test-dir build -C Release -R "^(mediamtx_disconnect_recovery|go2rtc_normal_decode|go2rtc_disconnect_reconnect)$" --output-on-failure

Docker and Python 3.10+ are required for the relay tests. All harnesses are designed for local execution: loopback host ports, project-specific networks, fixed local images, project test media, and cleanup checks. Do not point them at production cameras or relays.

Compatibility claim

The recorded results establish compatibility only for the fixed versions, scenarios, source fingerprint, and local environment in their reports. They do not establish compatibility with every FFmpeg/MediaMTX/go2rtc release, all RTSP clients, or all camera behaviors.

The files under scenarios/issues/ borrow protocol shapes from upstream issue reports. Their filenames are traceability labels, not integration results. See issue-verification.md.