A VPS can make live streaming easier and more reliable. The most popular use is restreaming: you send one stream from OBS to your server, and the server forwards it to YouTube, Twitch, Facebook, Kick and others at the same time. Your home upload only carries one stream. You can also transcode, record, or run your own streaming server for private audiences.
Common setups
| Setup | What the VPS does |
|---|---|
| Restreaming (multistream) | Receives one RTMP stream, forwards copies to several platforms |
| Transcoding | Converts to lower bitrates or other formats with FFmpeg (CPU-heavy) |
| Recording | Saves the stream to disk as a backup |
| Self-hosted streaming | Serves HLS to viewers directly (Owncast, Nginx + HLS, MediaMTX) |
| 24/7 streams | Loops pre-recorded video to a platform with FFmpeg |
Restreaming with Nginx RTMP
sudo apt install -y nginx libnginx-mod-rtmp
Add to the end of /etc/nginx/nginx.conf (outside the http block):
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
# only allow publishing from your IP
allow publish 203.0.113.50;
deny publish all;
deny play all;
push rtmp://a.rtmp.youtube.com/live2/YOUR-YOUTUBE-KEY;
push rtmp://live.twitch.tv/app/YOUR-TWITCH-KEY;
}
}
}
sudo nginx -t && sudo systemctl reload nginx
sudo ufw allow from 203.0.113.50 to any port 1935 proto tcp
In OBS → Settings → Stream: Service “Custom”, Server rtmp://your-vps-ip/live, and any stream key (for example main).
Notes:
- Platforms that require RTMPS (TLS), such as Facebook Live, need a local relay (stunnel) or FFmpeg to push over TLS.
- If your home IP changes, use a secret application name, or a publish key check with
on_publish, instead of an IP allowlist. - Keep your platform stream keys secret. Anyone with them can stream to your channel.
Transcoding with FFmpeg
Restreaming without transcoding uses almost no CPU. Transcoding (for example making a 720p copy for a platform with lower limits) is CPU-heavy: roughly 1–2 vCPU per 720p30 x264 output on fast presets, more for 1080p60.
ffmpeg -i rtmp://127.0.0.1/live/main -c:v libx264 -preset veryfast -b:v 3000k -s 1280x720 \
-c:a aac -b:a 128k -f flv rtmp://platform.example/live/KEY
Whenever possible, stream at the bitrate and resolution your target platforms accept, and avoid server-side transcoding.
Bandwidth sizing
Each outgoing stream uses its full bitrate:
| Setup | Upload from VPS |
|---|---|
| 1 input → 3 platforms at 6 Mbps | ~18 Mbps out (+6 Mbps in) |
| 2 hours/day, 3 platforms at 6 Mbps | ~16 GB/day ≈ 500 GB/month |
| Self-hosted HLS to 50 viewers at 3 Mbps | ~150 Mbps |
Check your plan’s port speed and monthly transfer. VPS.DO’s USA plans come with 1 Gbps ports and monthly transfer allowances. See USA VPS and VPS bandwidth explained.
Location
- For restreaming, place the VPS between you and the platforms’ ingest servers, ideally in a well-connected location near you. A stable path from home to the VPS matters most.
- Test your route with mtr before going live, and run a private test stream. See ping, traceroute and mtr.
Self-hosted live streaming
For private events, internal broadcasts, or streaming without platform rules:
- Owncast: a self-hosted Twitch-like server with chat. Easy to set up with Docker.
- MediaMTX: a lightweight RTSP/RTMP/HLS/WebRTC media server.
- Nginx RTMP + HLS: serve
.m3u8playlists to browsers and players.
Viewer bandwidth adds up fast, so put a CDN in front for larger audiences. See CDN for websites.
Rights and rules
Only stream content you have the rights to. Rebroadcasting copyrighted streams (sports, TV, films) leads to takedowns, account bans, and abuse reports to your hosting provider. See the VPS.DO legal policies.
Quick reference
| Task | Tool |
|---|---|
| Multistream from OBS | Nginx RTMP push |
| Ingest port | 1935/tcp (restrict publishers) |
| Lower-bitrate copies | FFmpeg (CPU-heavy) |
| Self-hosted channel | Owncast / MediaMTX |
| Bandwidth | bitrate × outputs × hours |
Related: Jellyfin media server and Nginx reverse proxy.