FFmpeg -> MediaMTX -> HLS relay with runtime-configurable modes: - PLAYBACK_MODE: standard (mpegts), fmp4 (HEVC), llhls - INGEST_MODE: rtmp, rtsp - INGEST_AUDIO_MODE: aac, copy - Hourly playlist auto-refresh from upstream URL - Fullscreen video UI with collapsible sidebar, upstream-down banner - Same-origin HLS proxy for HTTPS deployments Tagged as the last HLS-based version before the mpegts.js (v2) rework.
45 lines
1.4 KiB
Docker
45 lines
1.4 KiB
Docker
# Stage 1: Build Go backend
|
|
FROM golang:1.23-alpine AS backend
|
|
WORKDIR /src
|
|
COPY backend/ .
|
|
RUN go build -o /out/tuner .
|
|
|
|
# Stage 2: Build React frontend
|
|
FROM oven/bun:latest AS frontend
|
|
WORKDIR /src
|
|
COPY frontend/ .
|
|
RUN bun install && bun run build
|
|
|
|
# Stage 3: Runtime
|
|
FROM alpine:3.20
|
|
RUN apk add --no-cache ffmpeg ca-certificates wget tar \
|
|
&& wget -qO /tmp/mediamtx.tar.gz \
|
|
https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_amd64.tar.gz \
|
|
&& tar -xzf /tmp/mediamtx.tar.gz -C /usr/local/bin mediamtx \
|
|
&& rm /tmp/mediamtx.tar.gz \
|
|
&& apk del wget tar
|
|
|
|
WORKDIR /app
|
|
COPY --from=backend /out/tuner /app/tuner
|
|
COPY --from=frontend /src/dist /app/frontend/dist
|
|
COPY mediamtx.yml /app/mediamtx.yml
|
|
|
|
ENV RESTREAMER_PORT=8080
|
|
ENV PLAYLIST_PATH=/data/playlist.m3u
|
|
ENV PLAYLIST_URL=https://pia.cx/m3u/630xhAmY/smp424GL
|
|
ENV PLAYLIST_USE_LOCAL=false
|
|
ENV PLAYLIST_AUTO_REFRESH_INTERVAL=1h
|
|
# Playback mode: "standard" (MPEG-TS, iOS-friendly), "fmp4" (HEVC/H.265), or "llhls"
|
|
ENV PLAYBACK_MODE=standard
|
|
# Ingest mode: "rtmp" (default) or "rtsp" (better for HEVC/H.265)
|
|
ENV INGEST_MODE=rtmp
|
|
# RTSP ingest audio mode: "aac" (transcode audio, recommended) or "copy"
|
|
ENV INGEST_AUDIO_MODE=aac
|
|
ENV MEDIAMTX_PATH=/usr/local/bin/mediamtx
|
|
ENV MEDIAMTX_CONFIG=/app/mediamtx.yml
|
|
ENV FRONTEND_DIR=/app/frontend/dist
|
|
|
|
EXPOSE 1935 8080 8888
|
|
|
|
ENTRYPOINT ["/app/tuner"]
|