Cloneable example that bundles MistServer, Prometheus, and Grafana with ready-to-use VOD assets and a live ingest helper. The default setup compiles MistServer from source with -DWITH_AV=true
for hardware-accelerated transcoding support, provisions Prometheus scraping, and loads a starter Grafana dashboard.
- Custom MistServer image built from the official
development
branch with AV acceleration enabled. - Pre-baked configuration at
configs/mistserver.conf
mounted read/write for easy updates through the Mist UI. - Sample VOD assets & simulated livestream preconfigured in Mist.
- Prometheus configured to scrape MistServer metrics and Grafana auto-provisioned with a baseline dashboard and Prometheus datasource.
- Default
--shm-size=1gb
to avoid the 64 MB Docker shared-memory limit.
- Docker Engine 24+ and Docker Compose Plugin 2.20+.
- At least ~4 GB free RAM (MistServer build plus Grafana/Prometheus).
docker compose up --build
Services become available at:
- MistController UI: http://localhost:4242 (default credentials
admin
/admin
). - MistPlayer: http://localhost:8080/{stream}.html
- RTMP ingest: rtmp://localhost:1935/live/{stream}
- Prometheus: http://localhost:9090
- Grafana (admin/admin): http://localhost:3000
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
docker-compose.gpu.yml
grants the container access to NVIDIA GPUs (gpus: all
) when the NVIDIA Container Toolkit is installed, and exposes /dev/dri
for Intel Quick Sync / VA-API. If your distribution restricts /dev/dri
to the render
group, edit the commented group_add
line with your render group GID (getent group render
). Docker Desktop on macOS/Windows does not expose host GPUs to Linux containers, so this override has no effect there.
- Default streams:
vod
: on-demand playback from assets inassets/vod/
.live
: simulated livestream using ffmpegpush
: stream ready to accept RTMP inputs
- Metrics are exposed at
http://localhost:4242/telemetry
. Prometheus scrapes this endpoint every 10 seconds.
- To emit a synthetic FFmpeg test signal to the stream named 'push':
./scripts/videogen.sh -f flv -ac 2 rtmp://localhost:1935/live/push
- To playback the result (substitute your favourite player):
ffplay http://localhost:8080/hls/push/index.m3u8 ffplay http://localhost:8080/cmaf/push/index.m3u8 ffplay http://localhost:8080/webrtc/push
- On the MistController UI (http://localhost:4242) you can view the stream and some basic QoE metrics
- The embedded MistPlayer allows you to seamlessly switch between protocols, like WebRTC: http://localhost:8080/push.html?dev=1
Grafana loads the MistServer Overview
dashboard automatically. Start with the example panels (target status, scrape duration, latest metrics) and extend the queries as you explore the Mist metrics namespace. To import community dashboards, drop the JSON in grafana/dashboards
and restart Grafana.
docker compose down
Add --volumes
to drop Prometheus/Grafana data directories.