Multi-platform live streaming relay. Receives RTMP from OBS and retransmits to multiple RTMP destinations simultaneously (Kick, Twitch, YouTube, etc.). Includes live WebRTC preview, priority-based input fallback, and FLV clip failover.
┌──────────┐
RTMP ─────>│ │────RTMP──> Kick
Test signals ───>│ NeverDrop│────RTMP──> Twitch
Fallback clips ─>│ Relay │────RTMP──> YouTube
│ Engine │
│ │────WebRTC──> Browser preview
└──────────┘
mkdir -p videos
docker run -d \
--name neverdrop \
-p 1935:1935 \
-p 3000:3000 \
pablogod/neverdropOr with docker-compose.yml:
services:
neverdrop:
image: pablogod/neverdrop
container_name: neverdrop
ports:
- 1935:1935
- 3000:3000
restart: unless-stoppedmake run
# or directly:
go run ./cmd/neverdrop/Open http://<vps-ip>:3000 in your browser.
Set your OBS output to:
Server: rtmp://<vps-ip>:1935/live
Stream Key: any-name-you-choose
The stream key becomes the input ID in the panel. You can push multiple streams with different keys — they appear as Priority Inputs.
All inputs must use the same encoding parameters. The relay is calibrated for:
| Setting | Value |
|---|---|
| Resolution | 1920×1080 |
| Framerate | 30 fps |
| Keyframe interval | 1s (recommended for low-latency switching) |
| Audio encoder | AAC |
| Audio sample rate | 48000 Hz |
Critical: The keyframe interval must be ≤ 2s. Higher values cause 8+ second delays when switching inputs and visible glitches on Kick/YouTube players.
The web UI shows:
- Relay — live video preview, bitrate, uptime, data sent, and a bitrate chart
- Outputs — configured destinations. Click Add to set one up, then Start to begin pushing. Each output has its own bitrate chart and stats
- Priority Inputs — each incoming stream listed with priority order. The highest-priority connected stream is the active source
- Logs — real-time server log output (always visible)
- 🧪 Test — generates a local test stream to try the relay without OBS
When no live input is connected, the relay automatically falls back to:
- Fallback generator — synthetic test pattern (1920×1080, "FALLBACK" text overlay)
- FLV clips — loops
.flvfiles from thevideos/directory - Idle — no output sent
Click ➕ Add, fill in:
- Name (e.g. "Twitch")
- Protocol (RTMP — only supported protocol)
- URL + Stream Key
Then click Start. Stats and chart appear once streaming.
| Variable | Default | Description |
|---|---|---|
API_PORT |
3000 | Web UI port |
RTMP_PORT |
1935 | RTMP ingest port |
DB_PATH |
neverdrop.db | SQLite database path |
VIDEOS_DIR |
videos | Fallback FLV clips directory |
API_KEY |
(auto) | Auth key for API calls (X-API-Key header) |
Each input stream has a WebRTC preview. Browsers with WebRTC support will show a live (~2s delay) picture of what's being relayed.