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.
77 lines
2.4 KiB
Markdown
77 lines
2.4 KiB
Markdown
# Compatibility Matrix
|
|
|
|
## Mandatory Acceptance Matrix
|
|
|
|
The deterministic acceptance matrix is driven by tester binaries, not by a dummy pipeline source.
|
|
|
|
Run it with:
|
|
|
|
```bash
|
|
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
|