# ── Stage 1: Build FFmpeg with DeckLink support ───────────────────────────── FROM debian:bookworm AS ffmpeg-builder RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential nasm yasm pkg-config git ca-certificates python3 \ libssl-dev libx264-dev libx265-dev libvpx-dev libopus-dev \ libmp3lame-dev libsrt-openssl-dev \ libzmq3-dev zlib1g-dev libstdc++-12-dev \ && rm -rf /var/lib/apt/lists/* # Copy in BMD DeckLink SDK headers and patch script COPY sdk/ /decklink-sdk/ COPY patch_decklink.py /patch_decklink.py COPY decklink-sdk16.patch /decklink-sdk16.patch # Pull FFmpeg 7.1 source RUN git clone --depth=1 --branch release/7.1 https://git.ffmpeg.org/ffmpeg.git /ffmpeg # Patch FFmpeg DeckLink code for SDK 16.x API changes RUN python3 /patch_decklink.py WORKDIR /ffmpeg RUN ./configure \ --prefix=/usr/local \ --enable-gpl \ --enable-nonfree \ --enable-libx264 \ --enable-libx265 \ --enable-libvpx \ --enable-libopus \ --enable-libmp3lame \ --enable-libsrt \ --enable-libzmq \ --enable-decklink \ --extra-cflags="-I/decklink-sdk" \ --disable-doc \ --disable-debug \ --disable-ffplay \ && make -j$(nproc) \ && make install # ── Stage 2: Runtime image ─────────────────────────────────────────────────── FROM node:20-bookworm # Runtime deps for compiled ffmpeg libs RUN apt-get update && apt-get install -y --no-install-recommends \ libx264-164 libx265-199 libvpx7 libopus0 libmp3lame0 \ libsrt1.5-openssl libzmq5 libstdc++6 libc++1 libc++abi1 \ && rm -rf /var/lib/apt/lists/* # Copy compiled ffmpeg/ffprobe COPY --from=ffmpeg-builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg COPY --from=ffmpeg-builder /usr/local/bin/ffprobe /usr/local/bin/ffprobe COPY --from=ffmpeg-builder /usr/local/lib/ /usr/local/lib/ # DeckLink runtime .so COPY lib/libDeckLinkAPI.so /usr/lib/libDeckLinkAPI.so COPY lib/libDeckLinkPreviewAPI.so /usr/lib/libDeckLinkPreviewAPI.so RUN ldconfig WORKDIR /app COPY package*.json ./ RUN npm install --omit=dev COPY . . EXPOSE 3001 CMD ["node", "src/index.js"]