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:
- €10-15/month for unlimited platforms
- No watermarks or branding
- Full control over your setup
- One upload from your PC
- 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: