• v0.2.0 98d1bb5296

    v0.2.0 — encoded packet ring
    build / cmake build (CUDA 12.4, Ubuntu 22.04) (push) Failing after 3m3s
    test-u4-runner / u4 runner smoke test (push) Successful in 1s
    build / ffmpeg filter patch (out-of-tree) (push) Has been skipped
    release / build runtime Docker image (push) Failing after 5m58s
    release / build source tarball (push) Successful in 6m2s
    Stable

    gx released 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() + accessors
      • cuframes_subscriber_get_codec_params(codec_id, extradata, size)
    • C++ RAII: cuframes::Publisher::enable_packets / set_codec_extradata / publish_packet.
    • cuframes-rtsp-source: --enable-packet-ring CLI flag. Дублирует AVPacket в encoded ring до передачи декодеру.
    • FFmpeg demuxer cuframes_packets://<key>gx/ffmpeg-patched, branch n7.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_packets demuxer:

    • gx/ffmpeg-patched branch n7.1-cuframes (uploaded merged PR #1).

    Связано

    Downloads