- services/framecache/client/fc_pipe.c: new slot→stdout pipe adapter
- Opens framecache slot as consumer (independent cursor per instance)
- Streams raw UYVY422 frames to stdout continuously
- SIGPIPE detection via write() return — exits cleanly on ffmpeg exit
- SIGTERM/SIGINT clean stop from capture-manager
- Periodic stats to stderr (every 300 frames)
- Exit codes: 0=clean, 1=slot not found, 2=EPIPE
- services/framecache/CMakeLists.txt: add fc_pipe target + install
- services/framecache/Dockerfile: copy fc_pipe to runtime image
- services/capture/Dockerfile:
- New fc-pipe-builder stage (builds fc_pipe from framecache sources)
- Copies fc_pipe binary to /usr/local/bin/fc_pipe in runtime image
- services/capture/src/capture-manager.js:
- _buildInputArgs: new framecache path for deltacast + sdi/blackmagic
when FC_SLOT_ID env is set (injected by node-agent from bridge fmt JSON)
- Spawns fc_pipe <slot_id> as child process
- Uses pipe:0 as ffmpeg rawvideo input 0
- Audio FIFO (unchanged) as ffmpeg input 1
- Falls back to legacy FIFO path when FC_SLOT_ID unset
- audioMap: covers blackmagic via framecache (input 1 for audio FIFO)
- isInterlacedSource: covers blackmagic interlaced signals
- hiresStdio: pipe stdin when bridgeProcess set (fc_pipe stdout→ffmpeg)
- Non-growing spawn: pipes fc_pipe.stdout → ffmpeg.stdin
- Growing orchestrator spawn: pipes fc_pipe.stdout → bash.stdin
- sdiHlsDir: covers blackmagic source type
- Session state stores _fcPipeProcess for clean stop
- stop(): sends SIGTERM to fc_pipe after ffmpeg SIGINT
32 lines
1.3 KiB
Docker
32 lines
1.3 KiB
Docker
# ── Build stage ─────────────────────────────────────────────────────
|
|
FROM debian:bookworm AS builder
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential cmake libmicrohttpd-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY . /src
|
|
RUN cmake -S /src -B /build \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
&& cmake --build /build -j"$(nproc)"
|
|
|
|
# ── Runtime stage ────────────────────────────────────────────────────
|
|
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libmicrohttpd12 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=builder /build/framecache /usr/local/bin/framecache
|
|
COPY --from=builder /build/fc_pipe /usr/local/bin/fc_pipe
|
|
COPY --from=builder /build/fc_test_consumer /usr/local/bin/fc_test_consumer 2>/dev/null || true
|
|
|
|
# /dev/shm/framecache is created at runtime (tmpfs)
|
|
RUN mkdir -p /dev/shm/framecache
|
|
|
|
EXPOSE 7435
|
|
|
|
HEALTHCHECK --interval=10s --timeout=3s --start-period=5s \
|
|
CMD wget -qO- http://localhost:7435/health || exit 1
|
|
|
|
CMD ["/usr/local/bin/framecache"]
|