test+docs: packet ring stress test + Frigate dual-input guide (v0.2 Step 6)
Тесты:
- libcuframes/tests/test_packet_ring.c — 2 scenarios:
1) normal flow: 1 pub × 1 sub × 2000 packets, varied sizes, GOP=30,
payload integrity check (seq в первых 8 байтах + pattern). PTS
monotonicity, first KEY seq, нет data errors.
2) slow consumer (10ms delay): publisher 200 fps, subscriber должен
detect OVERRUN, library resync на keyframe — verify received >10
даже на сильно медленном консьюмере.
- libcuframes/tests/CMakeLists.txt: add_test packet_ring_basic.
Docs:
- CHANGELOG.md: новая [Unreleased] секция с full v0.2 highlights и
явно declared limitations (sub-stream, audio, codec change → v0.3).
- docs/integrations/frigate.md: новая секция "v0.2: dual-input (detect +
record через один RTSP)" с config example, requirements, trade-offs.
Связано: #2, PR #4. Step 6 (final) перед снятием draft.
This commit is contained in:
@@ -5,6 +5,45 @@
|
||||
Формат основан на [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
проект следует [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased] — v0.2 work in progress
|
||||
|
||||
См. PR [#4](https://git.goldix.org/gx/cuframes/pulls/4).
|
||||
|
||||
### Added
|
||||
|
||||
- **Encoded packet ring** — параллельный ring для H.264/H.265 NAL units
|
||||
(отдельный SHM `/dev/shm/cuframes-<key>-packets`, variable-length byte
|
||||
buffer + slot index, seqlock-style read для защиты от overrun).
|
||||
- **Wire protocol v2** (`proto_version = 2` в SHM header). Backward-compat:
|
||||
v2 publishers принимают v1 subscribers (frames-only).
|
||||
- **Public C API** (`include/cuframes/cuframes.h`):
|
||||
- `cuframes_publisher_enable_packets(opts)` — активирует ring
|
||||
- `cuframes_publisher_set_codec_extradata(data, size)` — SPS/PPS
|
||||
- `cuframes_publisher_publish_packet(data, size, pts, dts, flags)`
|
||||
- `cuframes_subscriber_enable_packets()` + `_next_packet()` + accessors
|
||||
- `cuframes_subscriber_get_codec_params(codec_id, extradata, size)`
|
||||
- **`cuframes::Publisher`** (C++ RAII): `enable_packets`, `set_codec_extradata`,
|
||||
`publish_packet` методы.
|
||||
- **`cuframes-rtsp-source`**: новый CLI flag `--enable-packet-ring`.
|
||||
Дублирует `AVPacket` в encoded ring до передачи декодеру.
|
||||
- **FFmpeg demuxer `cuframes_packets://<key>`** (отдельная ветка
|
||||
[gx/ffmpeg-patched PR #1](https://git.goldix.org/gx/ffmpeg-patched/pulls/1)).
|
||||
Companion к `cuframes://`. Use case: Frigate `record` role без
|
||||
второго RTSP к камере.
|
||||
- **4 новых error codes**: `PACKET_OVERSIZED`, `NO_PACKET_RING`,
|
||||
`NO_CODEC_PARAMS`, `PACKET_OVERRUN`.
|
||||
- **Stress test** `libcuframes/tests/test_packet_ring.c`: 2 scenarios —
|
||||
normal flow (1 pub × 1 sub × 2000 packets, integrity check) +
|
||||
slow consumer (must hit OVERRUN + library auto-resync на keyframe).
|
||||
- **Protocol spec §10** в `docs/protocol.md` (397 строк): byte-exact
|
||||
layout, seqlock semantics, late-subscriber GOP-aligned start.
|
||||
|
||||
### Limitations (документировано)
|
||||
|
||||
- Sub-stream selection отложено в v0.3 (`<key>-substream-<N>` naming).
|
||||
- Audio packets — v0.3 (тот же ring layout, codec_id = audio).
|
||||
- Codec change mid-stream — требует publisher destroy+recreate.
|
||||
|
||||
## [0.1.0] — 2026-05-17
|
||||
|
||||
Первый функциональный release с production deployment.
|
||||
|
||||
Reference in New Issue
Block a user