Multistreaming to Twitch, Kick, and YouTube: Complete VPS Setup Guide

Published on

Quick answer: You can multistream to Twitch, Kick, and YouTube simultaneously using a VPS (€10-15/month) running NGINX-RTMP. Stream once to your VPS, and it reb

Written by Space-Node Team – Infrastructure Team – 15+ years combined experience in game server hosting, VPS infrastructure, and 24/7 streaming solutions. Learn more

Quick answer: You can multistream to Twitch, Kick, and YouTube simultaneously using a VPS (€10-15/month) running NGINX-RTMP. Stream once to your VPS, and it rebroadcasts to all platforms. No watermarks, no monthly fees per platform, full control. This guide shows you exactly how to set it up.


Why Multistream via VPS?

The Problem with Single-Platform Streaming

  • Twitch audience won't watch on YouTube
  • Kick viewers won't come to Twitch
  • You're leaving viewers (and money) on the table

Paid Multistreaming Services

| Service | Price | Platforms | Limitations | |---------|-------|-----------|-------------| | Restream.io | €19-49/month | Many | Watermark on free tier | | Streamyard | €25-49/month | 8 max | Browser-only | | Castr.io | €12-50/month | Many | Bandwidth limits | | OneStream | €10-40/month | 40+ | Recording limits |

VPS Multistreaming

| Factor | Cost | What You Get | |--------|------|--------------| | VPS (Space-Node) | €10-15/month | Unlimited platforms | | No watermarks | - | Clean professional look | | No platform limits | - | Add as many as you want | | Full control | - | Customize everything | | Own your infrastructure | - | No service shutdowns |


How VPS Multistreaming Works

Your PC (OBS) 
    │
    │ RTMP stream (one upload)
    ▼
VPS (NGINX-RTMP Server)
    │
    ├──▶ Twitch (rtmp://live.twitch.tv)
    ├──▶ Kick (rtmp://ingest.kick.com)  
    ├──▶ YouTube (rtmp://a.rtmp.youtube.com)
    ├──▶ Facebook (rtmps://live-api-s.facebook.com)
    └──▶ Custom RTMP (your own server)

You upload one stream, VPS distributes to all platforms.

This means:

  • Only one upload from your internet
  • Lower bandwidth usage locally
  • VPS handles multiple outputs
  • If one platform fails, others keep running

VPS Requirements

| Platforms | CPU | RAM | Bandwidth | Price | |-----------|-----|-----|-----------|-------| | 2-3 platforms | 2 cores | 2GB | 5TB | €5-10 | | 4-5 platforms | 2-4 cores | 4GB | 10TB | €10-15 | | 6+ platforms | 4 cores | 4GB | 15TB | €15-25 | | + Transcoding | 4-6 cores | 8GB | 20TB | €25-40 |

For most streamers (3 platforms), a €10/month VPS is plenty.

Bandwidth calculation:

  • Your stream: 6000 kbps
  • To 3 platforms: 6000 × 3 = 18 Mbps constant
  • Per month: ~5.8 TB

Step 1: Server Setup

Order a VPS with Ubuntu 22.04 or Debian 12.

SSH into your server:

ssh root@YOUR_VPS_IP

Update the system:

apt update && apt upgrade -y

Step 2: Install NGINX with RTMP Module

Option A: Install from Repository (Easy)

apt install nginx libnginx-mod-rtmp -y

Option B: Compile from Source (More Control)

# Install dependencies
apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y

# Download NGINX and RTMP module
cd /tmp
wget http://nginx.org/download/nginx-1.24.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git

# Extract and compile
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --add-module=../nginx-rtmp-module --with-http_ssl_module
make
make install

Step 3: Configure NGINX-RTMP for Multistreaming

Edit the NGINX configuration:

nano /etc/nginx/nginx.conf

Add this RTMP block at the bottom (outside the http block):

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        buflen 1s;
        
        # Main application - receives your stream
        application live {
            live on;
            record off;
            
            # Security: Only allow streaming with correct key
            # Remove this line if you don't need auth
            # on_publish http://localhost/auth;
            
            # Push to Twitch
            push rtmp://live.twitch.tv/app/YOUR_TWITCH_STREAM_KEY;
            
            # Push to Kick
            push rtmp://ingest.kick.com/live/YOUR_KICK_STREAM_KEY;
            
            # Push to YouTube
            push rtmp://a.rtmp.youtube.com/live2/YOUR_YOUTUBE_STREAM_KEY;
        }
    }
}

Test configuration and restart:

nginx -t
systemctl restart nginx

Step 4: Configure OBS

Open OBS and go to Settings → Stream:

  • Service: Custom
  • Server: rtmp://YOUR_VPS_IP/live
  • Stream Key: mystream (or anything you want)

That's it. When you click "Start Streaming," OBS sends to your VPS, and NGINX pushes to all platforms.


Full Configuration Example

Here's a complete nginx.conf for professional multistreaming:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
}

http {
    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    
    # Stats page
    server {
        listen 8080;
        location /stats {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /var/www/html;
        }
        location /control {
            rtmp_control all;
        }
    }
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        buflen 1s;
        
        application live {
            live on;
            record off;
            
            # Allow only your IP to stream (security)
            allow publish YOUR_HOME_IP;
            deny publish all;
            
            # Allow anyone to watch (if you want)
            allow play all;
            
            # === PLATFORMS ===
            
            # Twitch
            push rtmp://live.twitch.tv/app/live_123456789_AbCdEfGhIjKlMnOpQrStUvWxYz;
            
            # Kick
            push rtmp://ingest.kick.com/live/sk_abcdef123456;
            
            # YouTube (primary ingest)
            push rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx-xxxx;
            
            # Facebook (uncomment if needed)
            # push rtmps://live-api-s.facebook.com:443/rtmp/FBxxxxxxxxxx;
            
            # Custom RTMP server (uncomment if needed)
            # push rtmp://other-server.com/live/streamkey;
        }
        
        # Separate app for testing (doesn't push anywhere)
        application test {
            live on;
            record off;
        }
    }
}

Step 5: Add Stats Page (Optional but Useful)

Create stats stylesheet:

mkdir -p /var/www/html
wget https://raw.githubusercontent.com/arut/nginx-rtmp-module/master/stat.xsl -O /var/www/html/stat.xsl

Access stats at: http://YOUR_VPS_IP:8080/stats

This shows:

  • Active streams
  • Bitrate
  • Connected clients
  • Uptime

Platform-Specific Notes

Twitch

Get stream key: Dashboard → Settings → Stream → Primary Stream Key

RTMP URLs by region:

  • Auto: rtmp://live.twitch.tv/app
  • US West: rtmp://live-sjc.twitch.tv/app
  • US East: rtmp://live-iad.twitch.tv/app
  • EU West: rtmp://live-ams.twitch.tv/app
push rtmp://live.twitch.tv/app/live_xxxxxxx_xxxxxxxxxxxxxxx;

Kick

Get stream key: Creator Dashboard → Settings → Stream Key & URL

push rtmp://ingest.kick.com/live/sk_xxxxxxxxxx;

Note: Kick sometimes changes their ingest URL. Check their dashboard for current URL.

YouTube

Get stream key: YouTube Studio → Go Live → Stream → Stream Key

RTMP URLs:

  • Primary: rtmp://a.rtmp.youtube.com/live2
  • Backup: rtmp://b.rtmp.youtube.com/live2
push rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx-xxxx;

Facebook Live

Facebook requires RTMPS (secure). NGINX-RTMP doesn't support RTMPS natively, so you need stunnel:

apt install stunnel4 -y

Configure stunnel:

nano /etc/stunnel/stunnel.conf
[facebook]
client = yes
accept = 127.0.0.1:19350
connect = live-api-s.facebook.com:443

Start stunnel:

systemctl enable stunnel4
systemctl start stunnel4

Then push to localhost:

push rtmp://127.0.0.1:19350/rtmp/FB-STREAM-KEY;

Instagram (via Facebook)

Instagram Live requires the Instagram app, but you can stream via Facebook Creator Studio cross-posting.

X (Twitter)

push rtmp://pscp-ingest-us.periscope.tv/x/STREAM_KEY;

Advanced: Transcoding for Different Qualities

If platforms have different quality requirements, add FFmpeg transcoding:

application live {
    live on;
    record off;
    
    # Transcode to 720p for bandwidth-limited platforms
    exec_push ffmpeg -i rtmp://localhost/live/$name 
        -c:v libx264 -preset veryfast -b:v 2500k -s 1280x720 
        -c:a aac -b:a 128k 
        -f flv rtmp://localhost/720p/$name;
    
    # Push original to Twitch
    push rtmp://live.twitch.tv/app/TWITCH_KEY;
}

application 720p {
    live on;
    record off;
    
    # Push 720p to Kick (if they prefer lower bandwidth)
    push rtmp://ingest.kick.com/live/KICK_KEY;
}

Security Configuration

Allow Only Your IP

application live {
    live on;
    
    # Only your home IP can stream
    allow publish 123.45.67.89;
    deny publish all;
}

Stream Key Authentication

Create an auth script:

nano /var/www/html/auth.php
<?php
$valid_keys = ['mySecretKey123', 'anotherKey456'];
$key = $_POST['name'] ?? '';

if (in_array($key, $valid_keys)) {
    http_response_code(200);
} else {
    http_response_code(403);
}
?>

In nginx.conf:

application live {
    live on;
    on_publish http://localhost/auth.php;
}

Install PHP:

apt install php-fpm -y

Firewall Rules

# Install UFW
apt install ufw -y

# Allow SSH
ufw allow 22

# Allow RTMP only from your IP
ufw allow from YOUR_HOME_IP to any port 1935

# Allow stats page (optional, restrict to your IP)
ufw allow from YOUR_HOME_IP to any port 8080

# Enable firewall
ufw enable

Monitoring Your Multistream

Check Active Connections

# View connections to RTMP port
ss -tulpn | grep 1935

# View NGINX workers
ps aux | grep nginx

Check Stream Stats

Visit: http://YOUR_VPS_IP:8080/stats

Or via command line:

curl http://localhost:8080/stats 2>/dev/null | grep -E 'name|bw_in|bw_out'

Discord/Telegram Alerts

nano /home/user/stream-monitor.sh
#!/bin/bash
DISCORD_WEBHOOK="YOUR_WEBHOOK_URL"

# Check if stream is active
STREAMS=$(curl -s http://localhost:8080/stats | grep -c "<name>")

if [ "$STREAMS" -eq 0 ]; then
    curl -H "Content-Type: application/json" \
         -d '{"content": "⚠️ No active streams detected!"}' \
         "$DISCORD_WEBHOOK"
fi

Add to crontab:

crontab -e
# */5 * * * * /home/user/stream-monitor.sh

Handling Platform Failures

If one platform goes down, NGINX continues pushing to others. But you'll see errors in logs.

View Errors

tail -f /var/log/nginx/error.log

Automatic Retry

NGINX-RTMP automatically retries failed pushes. Configure retry settings:

rtmp {
    server {
        listen 1935;
        
        # Retry push every 3 seconds if it fails
        push_reconnect 3s;
        
        application live {
            live on;
            push rtmp://live.twitch.tv/app/KEY;
        }
    }
}

Recording While Multistreaming

Save a local copy while streaming:

application live {
    live on;
    
    # Record to disk
    record all;
    record_path /var/recordings;
    record_suffix _%Y-%m-%d_%H-%M-%S.flv;
    
    # Convert to MP4 when recording ends
    exec_record_done ffmpeg -i $path -c copy /var/recordings/$basename.mp4;
    
    # Push to platforms
    push rtmp://live.twitch.tv/app/KEY;
    push rtmp://a.rtmp.youtube.com/live2/KEY;
}

Create recordings directory:

mkdir -p /var/recordings
chown www-data:www-data /var/recordings

HLS Output for Custom Viewing

Add HLS output for your own web player:

application live {
    live on;
    
    # Generate HLS
    hls on;
    hls_path /var/www/html/hls;
    hls_fragment 3;
    hls_playlist_length 30;
    
    # Push to platforms
    push rtmp://live.twitch.tv/app/KEY;
}

In http block:

server {
    listen 80;
    
    location /hls {
        alias /var/www/html/hls;
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }
}

Access stream at: http://YOUR_VPS_IP/hls/streamname.m3u8


Cost Comparison

VPS Multistreaming (DIY)

| Item | Monthly Cost | |------|--------------| | VPS 4GB (Space-Node) | €10-15 | | Setup time (one-time) | 1 hour | | Total | €10-15/month |

Paid Multistreaming Services

| Service | Plan | Monthly Cost | |---------|------|--------------| | Restream.io | Professional | €49 | | Streamyard | Professional | €49 | | Castr.io | Starter | €12 | | OneStream | Basic | €10 |

Savings with VPS

If you stream regularly, VPS saves €200-400/year compared to premium multistreaming services.


Troubleshooting

Stream Not Reaching Platforms

# Check NGINX error log
tail -50 /var/log/nginx/error.log

# Common issues:
# - Wrong stream key
# - Platform changed RTMP URL
# - Firewall blocking outbound 1935

High CPU Usage

# Check CPU
htop

# If CPU is maxed, you're transcoding too much
# Use passthrough (no transcoding) or upgrade VPS

Stream Dropping

# Check bandwidth
iftop

# If outbound is maxed, reduce bitrate or upgrade VPS
# Each platform = your bitrate × 1 output

OBS Can't Connect to VPS

# Check NGINX is running
systemctl status nginx

# Check port 1935 is open
ss -tulpn | grep 1935

# Check firewall
ufw status

Frequently Asked Questions

Is multistreaming against ToS?

Twitch: Affiliates cannot multistream live content. After stream ends, you can upload VOD elsewhere.
Kick: No restrictions currently.
YouTube: No restrictions.

Check each platform's current terms before multistreaming.

Does this add delay?

About 1-2 seconds extra latency compared to direct streaming. For most streams, this isn't noticeable.

Can I use SRT instead of RTMP?

Yes, with additional configuration. See our SRT vs RTMP guide.

What happens if my home internet drops?

All platforms will show "Stream Offline." When you reconnect, streams resume (if platforms support it—YouTube does, Twitch may require restarting).

Can I add/remove platforms without restarting?

You need to edit nginx.conf and run nginx -s reload. This briefly interrupts the stream (1-2 seconds).


Conclusion

Multistreaming via VPS is the smart way to reach multiple audiences:

  1. €10-15/month for unlimited platforms
  2. No watermarks or branding
  3. Full control over your setup
  4. One upload from your PC
  5. Professional reliability

Set it up once, and every stream automatically goes to all platforms.


Ready to multistream? Space-Node VPS hosting offers high-bandwidth servers perfect for multistreaming. Starting at €5/month with 1Gbps network and locations optimized for Twitch/YouTube ingests.

Related guides:

About the Author

Space-Node Team – Infrastructure Team – Experts in game server hosting, VPS infrastructure, and 24/7 streaming solutions with 15+ years combined experience.

Since 2023
500+ servers hosted
4.8/5 avg rating

Our team specializes in Minecraft, FiveM, Rust, and 24/7 streaming infrastructure, operating enterprise-grade AMD Ryzen 9 hardware in Netherlands datacenters. We maintain GDPR compliance and ISO 27001-aligned security standards.

Read full author bio and credentials →

Start Streaming in Minutes

Join content creators worldwide who trust our streaming infrastructure. Setup is instant and support is always available.

Multistreaming to Twitch, Kick, and YouTube: Complete VPS Setup Guide