189 lines
6.1 KiB
Markdown
189 lines
6.1 KiB
Markdown
# Compatibility Matrix
|
|
|
|
This document defines the complete protocol, codec, and RTMP mode compatibility matrix for cv-mmap streamer. It explicitly separates mandatory (blocking) checks from optional (non-blocking) checks.
|
|
|
|
## Mandatory Checks (Blocking for Release)
|
|
|
|
These checks must ALL pass for a release to be considered valid. They require no external servers and run entirely in standalone mode.
|
|
|
|
### Protocol/Codec Matrix
|
|
|
|
| Row | Protocol | Codec | RTMP Mode | Test Command | Evidence |
|
|
|-----|----------|-------|-----------|--------------|----------|
|
|
| 1 | RTP | H.264 | N/A | `./scripts/acceptance_standalone.sh` (row 1) | task-14-acceptance.txt |
|
|
| 2 | RTP | H.265 | N/A | `./scripts/acceptance_standalone.sh` (row 2) | task-14-acceptance.txt |
|
|
| 3 | RTMP | H.264 | enhanced | `./scripts/acceptance_standalone.sh` (row 3) | task-14-acceptance.txt |
|
|
| 4 | RTMP | H.265 | enhanced | `./scripts/acceptance_standalone.sh` (row 4) | task-14-acceptance.txt |
|
|
| 5 | RTMP | H.265 | domestic | `./scripts/acceptance_standalone.sh` (row 5) | task-14-acceptance.txt |
|
|
|
|
**Pass Criteria:**
|
|
- Exit code 0 from `acceptance_standalone.sh`
|
|
- JSON summary shows `total=5 pass=5 fail=0 skip=0`
|
|
- All tester processes receive expected packet/frame counts
|
|
|
|
### Fault Scenarios
|
|
|
|
| Scenario | Description | Test Command | Evidence |
|
|
|----------|-------------|--------------|----------|
|
|
| Torn Read | Coherent snapshot rejects torn frames | `./scripts/fault_suite.sh` | task-15-fault-suite.txt |
|
|
| Sink Stall | Backpressure containment under slow consumer | `./scripts/fault_suite.sh` | task-15-fault-suite.txt |
|
|
| Reset Storm | Stream reset recovery | `./scripts/fault_suite.sh` | task-15-fault-suite.txt |
|
|
|
|
**Pass Criteria:**
|
|
- Exit code 0 from `fault_suite.sh`
|
|
- All fault scenarios PASS status
|
|
- No violations of latency/drop thresholds
|
|
|
|
## Invalid Combinations (Explicitly Rejected)
|
|
|
|
These combinations are rejected at startup with clear error messages and non-zero exit codes.
|
|
|
|
| Combination | Error | Exit Code |
|
|
|-------------|-------|-----------|
|
|
| RTMP + H.264 + domestic mode | H.264 does not support domestic mode | 1 |
|
|
| RTP without --rtp-endpoint | Missing required RTP endpoint | 1 |
|
|
| RTMP without --rtmp-url | Missing required RTMP URL | 1 |
|
|
| --rtmp-mode without H.265 codec | Domestic mode requires H.265 | 1 |
|
|
|
|
## Optional Checks (Non-Blocking)
|
|
|
|
These checks are provided for interoperability validation but are NOT required for release acceptance. If the environment is unavailable, these should be skipped.
|
|
|
|
### Server Smoke Tests
|
|
|
|
| Server | Protocols | H.265 Support | Status |
|
|
|--------|-----------|---------------|--------|
|
|
| SRS 6.0+ | RTMP, HTTP-FLV, HLS, WebRTC | Enhanced-RTMP | Optional |
|
|
| ZLMediaKit | RTMP, HTTP-FLV, HTTP-TS, RTSP, WebRTC | Enhanced + Domestic | Optional |
|
|
|
|
**Skip Conditions:**
|
|
- Docker not available
|
|
- Port 1935 in use by another service
|
|
- Server container fails to start
|
|
- Network isolation prevents connection
|
|
|
|
**Expected Behavior When Skipped:**
|
|
- Script exits with status 0 (SKIP)
|
|
- Evidence file notes the skip reason
|
|
- Mandatory acceptance still proceeds
|
|
|
|
## RTMP H.265 Dual Mode Details
|
|
|
|
### Enhanced-RTMP Mode (Recommended)
|
|
|
|
**Specification:** [Enhanced RTMP](https://github.com/veovera/enhanced-rtmp)
|
|
|
|
**Characteristics:**
|
|
- Video codec header byte: `0x90` (sequence) / `0x91` (frame)
|
|
- FourCC: `hvc1` or `hev1`
|
|
- Standardized, widely supported
|
|
- FFmpeg 6.0+ native support
|
|
- OBS 29+ support
|
|
- SRS 6.0+ native support
|
|
- ZLMediaKit default mode
|
|
|
|
**When to use:**
|
|
- Greenfield deployments
|
|
- Modern CDN ingestion
|
|
- Cross-platform compatibility requirements
|
|
|
|
### Domestic Extension Mode (Legacy Compatibility)
|
|
|
|
**Specification:** Proprietary FLV extension using codec-id 12
|
|
|
|
**Characteristics:**
|
|
- Video codec header byte: `0x1c` (keyframe) / `0x2c` (inter)
|
|
- FLV codec-id: 12 (non-standard)
|
|
- Legacy Chinese CDN compatibility
|
|
- Requires explicit config in ZLMediaKit (`enhanced=0`)
|
|
- Not supported by all players
|
|
|
|
**When to use:**
|
|
- Legacy CDN requirements
|
|
- Existing domestic-mode infrastructure
|
|
- Backward compatibility with older systems
|
|
|
|
### Mode Selection Decision Tree
|
|
|
|
```
|
|
Is codec H.265?
|
|
├── No (H.264) ──> Use enhanced mode only (domestic invalid)
|
|
└── Yes (H.265)
|
|
├── Target is modern CDN/player? ──> enhanced
|
|
├── Target requires domestic mode? ──> domestic
|
|
└── Unknown? ──> enhanced (safer default)
|
|
```
|
|
|
|
## Validation Commands
|
|
|
|
### Verify Mandatory Matrix
|
|
|
|
```bash
|
|
cd downstream/cvmmap-streamer
|
|
./scripts/acceptance_standalone.sh
|
|
echo "Exit code: $?"
|
|
```
|
|
|
|
### Verify Individual Row (RTP H.264)
|
|
|
|
```bash
|
|
# Terminal 1: Tester
|
|
./build/rtp_receiver_tester \
|
|
--port 51040 \
|
|
--expect-pt 96 \
|
|
--packet-threshold 1 \
|
|
--timeout-ms 10000
|
|
|
|
# Terminal 2: Streamer in dummy input mode
|
|
./build/cvmmap_streamer \
|
|
--run-mode pipeline \
|
|
--input-mode dummy \
|
|
--shm-name test_rtp_h264 \
|
|
--zmq-endpoint "ipc:///tmp/test_rtp_h264.ipc" \
|
|
--dummy-label rtp_h264 \
|
|
--dummy-frames 320 \
|
|
--dummy-fps 200 \
|
|
--dummy-width 640 \
|
|
--dummy-height 360 &
|
|
|
|
./build/cvmmap_streamer \
|
|
--run-mode pipeline \
|
|
--codec h264 \
|
|
--shm-name test_rtp_h264 \
|
|
--zmq-endpoint "ipc:///tmp/test_rtp_h264.ipc" \
|
|
--queue-size 1 \
|
|
--gop 30 \
|
|
--b-frames 0 \
|
|
--ingest-max-frames 120 \
|
|
--rtp \
|
|
--rtp-endpoint "127.0.0.1:51040" \
|
|
--rtp-payload-type 96 \
|
|
--rtp-sdp /tmp/test_rtp_h264.sdp
|
|
```
|
|
|
|
### Verify Invalid Combination Rejection
|
|
|
|
```bash
|
|
# Should fail with clear error
|
|
./build/cvmmap_streamer \
|
|
--codec h264 \
|
|
--rtmp-mode domestic \
|
|
--shm-name test \
|
|
--zmq-endpoint "ipc:///tmp/test.ipc"
|
|
|
|
echo "Exit code: $?" # Expected: 2 (invalid mode matrix)
|
|
```
|
|
|
|
## Evidence Locations
|
|
|
|
All test evidence is written to `.sisyphus/evidence/`:
|
|
|
|
| Evidence File | Description |
|
|
|---------------|-------------|
|
|
| task-14-acceptance.txt | Latest acceptance run pointer |
|
|
| task-14-acceptance-summary.json | Acceptance summary JSON |
|
|
| task-14-acceptance/RUN_ID/ | Per-run logs for each matrix row |
|
|
| task-15-fault-suite.txt | Latest fault suite run pointer |
|
|
| task-15-fault-suite-summary.json | Fault suite summary JSON |
|
|
| task-15-fault-suite/RUN_ID/ | Per-run logs for each scenario |
|