Skip to content

pablodz/neverdrop

Repository files navigation

NeverDrop

Multi-platform streaming relay. Receives RTMP/SRT from OBS and retransmits to multiple destinations simultaneously (Kick, Twitch, YouTube, etc.). Includes live WebRTC preview, priority-based input fallback, and FLV clip failover.

                          ┌──────────┐
               RTMP ─────>│          │────RTMP──> Kick
               SRT  ─────>│ NeverDrop│────RTMP──> Twitch
         Test signals ───>│  Relay   │────RTMP──> YouTube
         Fallback clips ─>│  Engine  │────SRT ──> Custom
                          │          │
                          │          │────WebRTC──> Browser preview
                          └──────────┘

Descripción de la imagen

Quick start

Docker

mkdir -p videos

docker run -d \
  --name neverdrop \
  -p 1935:1935 \
  -p 3000:3000 \
  -p 10080:10080 \
  pablogod/neverdrop

Or with docker-compose.yml:

services:
  neverdrop:
    image: pablogod/neverdrop
    container_name: neverdrop
    ports:
      - 1935:1935
      - 3000:3000
      - 10080:10080
    restart: unless-stopped

Development

make run
# or directly:
go run ./cmd/neverdrop/

Open http://<vps-ip>:3000 in your browser.

How it works

Pushing a stream from OBS

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.

Panel

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. Click ▲/▼ to reorder. 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

Fallback

When no live input is connected, the relay automatically falls back to playing FLV clips from the videos/ directory. Drop .flv files in that folder and restart the relay.

Input source priority: Live streamFallback clipsIdle

Outputs (destinations)

Click ➕ Add, fill in:

  • Name (e.g. "Twitch")
  • Protocol (RTMP or SRT)
  • URL + Stream Key

Then click Start. Stats and chart appear once streaming.

Configuration

Variable Default Description
API_PORT 3000 Web UI port
RTMP_PORT 1935 RTMP ingest port
SRT_PORT 10080 SRT 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)

Preview

The relay video and each input stream have a WebRTC preview. Browsers with WebRTC support will show a live (~2s delay) picture of what's being relayed.

About

Stream like your internet never fail

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages