51d03d4279
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.
2.4 KiB
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.backendremainsauto|ffmpeg;automay select Jetson Multimedia API on Jetson builds, whileffmpegforces 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