Files
m5p3nc3r ef78f19e72 Add image and streaming from USB camera
Plus a little freshen up of the readme's
2026-05-07 16:38:36 +00:00

66 lines
2.1 KiB
Docker

# ── Stage 1: full install — source for cherry-picked plugins ────────────
FROM ros:kilted-ros-core AS gst-builder
RUN apt-get update && apt-get install -y --no-install-recommends \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-nice \
&& rm -rf /var/lib/apt/lists/*
# Copy only the 8 plugin .so files the pipeline actually uses.
# Each plugin bundle (plugins-base/good/bad/nice) contains dozens more
# that we never touch; leaving them out keeps the runtime image lean.
RUN set -e && ARCH=$(uname -m)-linux-gnu && \
mkdir /gst-select && \
for p in \
libgstapp.so \
libgstvideoconvertscale.so \
libgstvpx.so \
libgstrtp.so \
libgstrtpmanager.so \
libgstwebrtc.so \
libgstdtls.so \
libgstsrtp.so \
libgstnice.so \
; do cp /usr/lib/${ARCH}/gstreamer-1.0/${p} /gst-select/; done
# ── Stage 2: lean runtime ───────────────────────────────────────────────
FROM ros:kilted-ros-core
RUN apt-get update && apt-get install -y --no-install-recommends \
# GStreamer core runtime and base utility libs (libgstvideo etc.) — no plugins
libgstreamer1.0-0 \
libgstreamer-plugins-base1.0-0 \
# Python GI bindings + WebRTC/SDP typelibs; pulls libgstreamer-plugins-bad1.0-0
python3-gi \
gir1.2-gst-plugins-bad-1.0 \
# Shared libs the cherry-picked plugins link against
libvpx9 \
libnice10 \
libsrtp2-1 \
liborc-0.4-0t64 \
# App deps
python3-numpy \
python3-websockets \
&& rm -rf /var/lib/apt/lists/*
# Install cherry-picked plugins and refresh the linker cache
COPY --from=gst-builder /gst-select/ /tmp/gst-select/
RUN ARCH=$(uname -m)-linux-gnu && \
cp /tmp/gst-select/*.so /usr/lib/${ARCH}/gstreamer-1.0/ && \
rm -rf /tmp/gst-select && \
ldconfig
WORKDIR /app
COPY webrtc_streamer.py .
COPY entrypoint.sh .
RUN chmod +x entrypoint.sh
ENV IMAGE_TOPIC=/camera/image_raw
ENV PORT=8443
ENV BITRATE=2000000
EXPOSE 8443
ENTRYPOINT ["./entrypoint.sh"]