2026-05-21 19:57:22 -04:00
|
|
|
# ── 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
|
2026-05-21 20:53:03 -04:00
|
|
|
COPY decklink-sdk16.patch /decklink-sdk16.patch
|
2026-05-21 19:57:22 -04:00
|
|
|
|
|
|
|
|
# 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 ───────────────────────────────────────────────────
|
2026-04-07 21:58:28 -04:00
|
|
|
FROM node:20-bookworm
|
2026-05-21 19:57:22 -04:00
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
|
2026-04-07 21:58:28 -04:00
|
|
|
WORKDIR /app
|
|
|
|
|
COPY package*.json ./
|
|
|
|
|
RUN npm install --omit=dev
|
|
|
|
|
COPY . .
|
2026-05-21 19:57:22 -04:00
|
|
|
|
2026-04-07 21:58:28 -04:00
|
|
|
EXPOSE 3001
|
|
|
|
|
CMD ["node", "src/index.js"]
|