Symptom (run #1826 fail на u4-runner):
Bootstrap step молча установил Node 12 (Ubuntu default) вместо Node 20
из NodeSource → actions/checkout@v4 не парсится (ES2022 static blocks).
Cause:
curl ... setup_20.x на slow network (u4 через VPN) timeout/fail silently,
apt install fallback на default ubuntu nodejs (Node 12). Без error.
Fix:
- curl --retry 3 --retry-delay 5 --connect-timeout 30
- retry-loop на NodeSource setup (3 попытки)
- явная verification major version >= 18 после install, fail с exit 1
если установился Node < 18
Применяется к обоим jobs (cmake-build и filter-build).
Связано: PR #4 (v0.2), run #1826 fail.
Тесты:
- 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.
- cuframes::Publisher (C++ wrapper): добавлены enable_packets(),
set_codec_extradata(), publish_packet() методы.
- cuframes-rtsp-source: новый CLI flag --enable-packet-ring. При его
установке после opening stream — pub.enable_packets(codec_id) +
set_codec_extradata из vstream->codecpar->extradata.
- В main loop: после av_read_frame, до avcodec_send_packet, packet
публикуется в packet ring с конверсией pts/dts из stream_tb в ns,
AV_PKT_FLAG_KEY/CORRUPT/DISCONTINUITY → CUFRAMES_PKT_FLAG_*.
Тест:
cuframes-rtsp-source --rtsp rtsp://... --key cam1 --enable-packet-ring
# frames consumer'ы продолжают работать через cuframes:// (как v0.1)
# record consumer'ы могут brать packets через cuframes_packets:// (Step 5)
Связано: #2, PR #4.