Files
cvmmap-streamer/docs/compat_matrix.md
T
crosstyan 51d03d4279 feat(encode): add Jetson Multimedia API encoder backend
Integrate a native Jetson Multimedia API encoder path and keep the existing encoded access-unit contract for RTMP, RTP, and recording consumers.

This adds conditional Jetson MMAPI detection in CMake, builds the required NVIDIA sample common classes into a dedicated support library, and compiles the new backend only when the platform dependencies are present.

The runtime selector now lets encoder.backend=auto prefer Jetson MM for NVIDIA hardware requests while keeping encoder.backend=ffmpeg as an explicit FFmpeg path. Device selection semantics are updated so nvidia requires the Jetson backend, auto can fall back to FFmpeg software, and software remains FFmpeg-only.

The Jetson backend converts supported raw inputs through swscale, feeds NvVideoEncoder in YUV420M, emits Annex-B access units, and harvests decoder configuration from a warmup keyframe so downstream packetizers keep their existing contract.

This also splits FFmpeg encoder option handling into a shared header, updates runtime config/help text and tester defaults, and refreshes compatibility/caveat documentation to reflect the new selection behavior.

Build-tree runtime RPATH handling is tightened so GCC 15 builds keep the matching libstdc++ visible locally. Verification covered GCC 15 builds, RTP H.264/H.265 tester runs, RTMP H.264 stub publish, local live SRS smoke with cvmmap://zed1, and remote execution on 192.168.2.155 using the deployed bundle lib directory for the GCC 15 runtime.
2026-04-15 18:37:44 +08:00

2.4 KiB

Compatibility Matrix

Mandatory Acceptance Matrix

The deterministic acceptance matrix is driven by tester binaries, not by a dummy pipeline source.

Run it with:

cmake -B build -S .
cmake --build build
./scripts/acceptance_standalone.sh

Covered rows:

Row Protocol Codec Transport Runner
1 RTP H.264 UDP RTP ./scripts/acceptance_standalone.sh
2 RTP H.265 UDP RTP ./scripts/acceptance_standalone.sh
3 RTMP H.264 libavformat ./scripts/acceptance_standalone.sh
4 RTMP H.265 libavformat ./scripts/acceptance_standalone.sh
5 RTMP H.264 ffmpeg_process ./scripts/acceptance_standalone.sh
6 RTMP H.265 ffmpeg_process ./scripts/acceptance_standalone.sh

Notes:

  • RTMP is Enhanced RTMP only.
  • The custom RTMP packetizer and domestic mode are removed.
  • encoder.backend remains auto|ffmpeg; auto may select Jetson Multimedia API on Jetson builds, while ffmpeg forces the FFmpeg encoder path.

Optional Checks (Non-Blocking)

These are useful interoperability checks, but they are not part of the mandatory acceptance gate:

  • ./scripts/rtmp_srs_smoke.sh
  • ./scripts/live_srs_forward_smoke.sh '<cvmmap-uri>'
  • manual WHEP playback through SRS
  • manual ZLMediaKit interoperability checks
  • live MCAP capture, validation, and paced replay

Recording Coverage

MCAP support is validated separately with:

  • ./build/mcap_reader_tester
  • ./build/mcap_replay_tester
  • ./build/mcap_body_record_tester
  • ./scripts/replay_mcap.sh

Current recording scope:

Output Codec Notes
MCAP foxglove.CompressedVideo H.264 Stored as Annex B access units
MCAP foxglove.CompressedVideo H.265 Stored as Annex B access units
MCAP raw body packets cvmmap.body_tracking.v1 Payload bytes are identical to the cv-mmap ZED body PUB packet

Current Defaults

Setting Value
Encoder backend auto -> Jetson MM on Jetson hardware requests, else FFmpeg
RTMP transport libavformat
RTMP mode Enhanced only
Encoder device auto
Low-latency GOP 30
B-frames 0

What Is No Longer Supported

  • GStreamer encoder backend
  • custom RTMP packetizer
  • RTMP domestic mode
  • dummy input flags in the main runtime
  • direct in-repo RTSP/WebRTC publishing