Restreamer

Self-hosted streaming server for publishing live video

Video Surveillance ★ 5.2k stars Easy setup Apache-2.0

Restreamer by datarhei is a self-hosted streaming server that ingests video sources such as RTSP camera feeds and publishes them to web pages or platforms like YouTube. It ships as a Docker image with a built-in web UI.

Key features

  • Ingest and restream RTSP
  • Built-in web UI
  • Publish to multiple platforms
  • Docker-based deployment

Pros & cons

Strengths

  • Easy to publish camera feeds
  • Polished interface

Trade-offs

  • Restreaming focus
  • Not a full NVR with recording rules

Restreamer replaces

Last reviewed Sep 13, 2026 · 891 words

One container, one RTSP URL pasted into a form, and your camera is playing on a web page you can embed and simultaneously pushing to YouTube or Twitch. That is Restreamer's entire pitch, it delivers it in under 10 minutes, and it is the reason the datarhei project has 5,185 stars despite doing one narrow thing. The trap is in the name: it restreams. It does not record on motion, it does not detect objects, and it will not replace an NVR. Buy it for the publishing job and nothing else.

The compose file is short and the ports are not optional

Restreamer 2 is a web UI wrapped around datarhei Core, which is itself a managed FFmpeg process runner. The stock deployment:

services:
  restreamer:
    image: datarhei/restreamer:latest
    ports:
      - "8080:8080"     # web UI and HLS player
      - "8181:8181"     # same, over TLS
      - "1935:1935"     # RTMP ingest
      - "6000:6000/udp" # SRT ingest
    volumes:
      - ./config:/core/config
      - ./data:/core/data
    restart: unless-stopped

Open port 8080, create the admin account on first launch, then add a source. RTSP cameras are the common case (rtsp://user:[email protected]:554/stream1 or whatever your camera exposes), but it will also accept an RTMP or SRT push from OBS, a USB device, or a Raspberry Pi camera. If all you want is a LAN-only viewer, ports 1935 and 6000 can stay closed. If you are putting this on the internet, put a reverse proxy with real certificates in front of 8080 instead of using the self-signed 8181 listener.

Copy mode is what keeps it at 512 MB of RAM

The catalogue's 512 MB minimum is honest only if Restreamer is not transcoding. When the incoming stream is H.264 with AAC or no audio, the process wizard defaults to copying the video track straight into HLS segments, and CPU stays close to idle. The moment you ask it to re-encode (the source is H.265, you want a lower bitrate for YouTube, you enable a text overlay) FFmpeg starts burning cores: a single 1080p software encode is roughly a full core on a modern x86 chip and far more than a Raspberry Pi 4 can sustain. There are Pi and GPU variants of the image for hardware encoding; check the image tags before assuming your Intel Quick Sync or NVENC card will be used, because the default tag will not touch it.

Practical rule: set the camera to H.264 at the bitrate you want to publish, and let Restreamer copy. That is 90% of the performance tuning.

Publishing to platforms is a paste-the-key affair

Each source gets zero or more publication targets. The built-in list covers YouTube, Twitch, Facebook, and a generic RTMP/SRT destination; you paste the platform's stream key and toggle it on. The player page it generates supports a logo, a poster image, and a chat-free layout, and the HLS URL underneath is plain enough to drop into any <video> player or an Owncast instance if you want your own live-streaming page with chat. The API behind the UI is documented and token-authenticated, which is how people wire it into Home Assistant automations to start and stop publishing.

Where it stops and the NVR tools begin

Restreamer has no recording rules, no motion or object detection, no timeline scrubbing of past footage, and no multi-camera wall beyond making several sources. If you want that, Frigate is the bigger and safer project in the video surveillance category: it records, detects, and integrates with Home Assistant, and it happens to bundle go2rtc for restreaming too. If you want restreaming only but headless and lighter, go2rtc does RTSP-in, WebRTC and HLS-out in a single binary with a text config and about a fifth of the memory. Restreamer's edge over go2rtc is the UI: a non-technical person can add a camera and publish to YouTube without editing YAML, and the player page looks finished.

The gotchas I would want to know on day one

Restreamer 2 is a different product from Restreamer 1 and the config does not carry over; if you find an old tutorial referencing datarhei/restreamer:0.6, close it. HLS adds latency, typically 6 to 20 seconds; the WebRTC and low-latency paths are not Restreamer's strength, so a doorbell-style live view is better served by go2rtc. And because it holds camera credentials in its config directory, treat ./config as a secret and keep the box on a VLAN that cannot reach the cameras' own admin pages from the outside.

What I'd do

For a public camera feed (a harbour, a nest box, a ski slope, a hobby workshop) or a small church or club that wants to push one camera to YouTube reliably, Restreamer is what I would deploy and I would not overthink it: default image, camera set to H.264, copy mode, Caddy in front of port 8080. For home security I would not start here at all; I would run Frigate and let its bundled go2rtc handle any restreaming. And if I wanted both, the two coexist on the same box without argument because Restreamer can take go2rtc's RTSP output as a source.

Compare Restreamer

2 head-to-head comparisons.

Similar video surveillance apps