-
v0.2.0 — encoded packet ring
Stablebuild / cmake build (CUDA 12.4, Ubuntu 22.04) (push) Failing after 3m3stest-u4-runner / u4 runner smoke test (push) Successful in 1sbuild / ffmpeg filter patch (out-of-tree) (push) Has been skippedrelease / build runtime Docker image (push) Failing after 5m58srelease / build source tarball (push) Successful in 6m2sreleased this
2026-05-19 17:49:50 +01:00 | 16 commits to main since this releaseПараллельный канал для record/mux consumer'ов без второго RTSP-подключения к камере.
Highlights
- Encoded packet ring — отдельный SHM
/dev/shm/cuframes-<key>-packetsдля H.264/H.265 NAL units (variable-length byte buffer + slot index, seqlock-style read). - Wire protocol v2 (
proto_version=2). Backward-compat: v2 publishers принимают v1 subscribers (frames-only). - Public C API:
cuframes_publisher_enable_packets(opts)cuframes_publisher_set_codec_extradata(data, size)cuframes_publisher_publish_packet(data, size, pts, dts, flags)cuframes_subscriber_enable_packets()+_next_packet()+ accessorscuframes_subscriber_get_codec_params(codec_id, extradata, size)
- C++ RAII:
cuframes::Publisher::enable_packets / set_codec_extradata / publish_packet. cuframes-rtsp-source:--enable-packet-ringCLI flag. ДублируетAVPacketв encoded ring до передачи декодеру.- FFmpeg demuxer
cuframes_packets://<key>(вgx/ffmpeg-patched, branchn7.1-cuframes). Companion к существующемуcuframes://. - 4 новых error codes:
PACKET_OVERSIZED,NO_PACKET_RING,NO_CODEC_PARAMS,PACKET_OVERRUN(subscriber на overrun автоматически resync'ается на last keyframe). - Stress test
libcuframes/tests/test_packet_ring.c: normal flow (2000 packets, payload integrity) + slow consumer scenario (OVERRUN + auto-resync). - Protocol spec §10 (397 строк) в
docs/protocol.md— byte-exact layout, seqlock semantics, late-subscriber GOP-aligned start.
Use case — Frigate dual-input
cameras: cam_parking: ffmpeg: inputs: - path: cuframes://cam-parking input_args: -f cuframes roles: [detect] - path: cuframes_packets://cam-parking input_args: -f cuframes_packets roles: [record]→ 1 RTSP connection к камере вместо 2-3 (Frigate сейчас открывает отдельный stream для record).
Полный setup см. в
docs/integrations/frigate.md— секция «v0.2: dual-input».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.
Зависимости для full pipeline
FFmpeg builds должны включать
cuframes_packetsdemuxer:gx/ffmpeg-patchedbranchn7.1-cuframes(uploaded merged PR #1).
Связано
- Issue #2 — feature request с motivation
- PR #4 — full implementation
gx/ffmpeg-patchedPR #1 — FFmpeg demuxerdocs/protocol.md§10 — wire protocol
Downloads
- Encoded packet ring — отдельный SHM