This is the fastest end-to-end path through the icey media stack:
- C++ source-to-browser server
- bundled web UI
- Symple signalling over WebSocket
- embedded TURN relay
- real browser playback with a shipped demo source
This is the one place to point people for the demo.
One command. One URL. One click.
The fastest way to try the demo is the published image.
This path targets Linux with host networking:
docker run --rm --network host 0state/icey-server:latestThen open:
http://localhost:4500
Click Watch on the icey peer. The image ships with data/test.mp4 as the default stream source, so the browser should start receiving video immediately.
If you want the repo-backed path for local edits or local artifacts, use Compose from this directory:
docker compose up --buildThen open:
http://localhost:4500
The published image and the local Compose build package:
- the
icey-serverapplication - the production web UI build from
icey-cli/web/ - the sample media file at
data/test.mp4
The published image is available as 0state/icey-server:latest.
The local Compose path reuses the existing local build artifacts instead of recompiling inside Docker, so rebuilds stay cheap.
If your current binary lives in a different build tree, point Docker at it directly:
ICEY_SERVER_BINARY=icey-cli/build-dev/src/server/icey-server docker compose build
docker compose upThe server starts in stream mode by default and listens on:
- HTTP / WebSocket:
4500 - TURN:
3478TCP and UDP
This demo is meant to prove real WebRTC and TURN behavior, not just serve HTML.
Docker bridge networking hides the host-facing ICE and relay addresses the browser needs. network_mode: host keeps the advertised addresses honest on Linux, which is the path that consistently proves the full stack.
You can switch the app mode or input source with environment variables.
Published image examples:
docker run --rm --network host -e ICEY_MODE=record -v "$(pwd)/recordings:/app/recordings" 0state/icey-server:latest
docker run --rm --network host -e ICEY_MODE=relay 0state/icey-server:latest
docker run --rm --network host -e ICEY_SOURCE=rtsp://camera.local/stream1 -e ICEY_LOOP=0 0state/icey-server:latestCompose examples:
ICEY_MODE=record docker compose up --build
ICEY_MODE=relay docker compose up --build
ICEY_SOURCE=/app/media/test.mp4 docker compose up --buildFor the Compose path, record mode writes files into:
icey-cli/docker/recordings/
For the published image path, record mode writes wherever you bind-mount /app/recordings.
- This is the canonical
icey-serverdemo for the self-hosted media stack. - The express path is
docker run --rm --network host 0state/icey-server:latest. - The source path is
docker compose up --buildfrom this directory. - For direct local use, open
http://localhost:4500. - The local Compose build expects the existing
icey-cli/build-dev/src/server/icey-serverbinary andicey-cli/web/dist/output to be present. - The default local Compose context assumes sibling
icey-cli/andicey/checkouts so the demo media file can be copied fromicey/data/test.mp4. - If port
4500or3478is already busy on the host, free it first or overrideICEY_PORT/ICEY_TURN_PORT. - For remote NAT testing, set
ICEY_TURN_EXTERNAL_IPso embedded TURN advertises the right public address. - Docker Desktop host networking is not the primary target here. For non-Linux hosts, use the native app README first.
- App README
- The
iceycore repodocs/recipes/media-server-stack.mdsource-to-browser recipe