Documentation > Tutorials > First Stream
This tutorial walks you through your first live broadcast using SpiritStream and OBS Studio. You'll learn how to connect your encoder, start streaming, and monitor your stream health.
Before starting, ensure you have:
- SpiritStream installed and FFmpeg configured (Getting Started)
- OBS Studio (or similar RTMP encoder) installed
- A streaming profile created with at least one target
- Your stream key from your chosen platform
By the end of this tutorial, you will be able to:
- Configure OBS Studio to send video to SpiritStream
- Start and stop streams properly
- Monitor stream statistics in real-time
- Troubleshoot common streaming issues
Understanding how data flows helps troubleshoot issues:
%%{init: {'theme': 'base', 'themeVariables': {
'primaryColor': '#3D3649',
'primaryTextColor': '#F4F2F7',
'primaryBorderColor': '#7C3AED',
'lineColor': '#9489A8',
'secondaryColor': '#251A33',
'tertiaryColor': '#1A1225',
'background': '#0F0A14',
'mainBkg': '#1A1225',
'nodeBorder': '#5E5472',
'clusterBkg': '#251A33',
'clusterBorder': '#3D3649',
'titleColor': '#A78BFA',
'edgeLabelBackground': '#1A1225',
'textColor': '#F4F2F7'
}}}%%
flowchart LR
OBS["OBS Studio"] -->|"RTMP"| SS["SpiritStream<br/>localhost:1935"]
SS -->|"RTMP"| YT["YouTube"]
SS -->|"RTMP"| TW["Twitch"]
SS -->|"RTMP"| KK["Kick"]
OBS sends to SpiritStream, which distributes to all configured platforms.
- Launch OBS Studio
- Go to Settings (File → Settings on Windows/Linux, OBS → Preferences on macOS)
- Select the Stream tab
Configure OBS to send to SpiritStream instead of directly to a platform:
| Setting | Value |
|---|---|
| Service | Custom... |
| Server | rtmp://localhost:1935/live |
| Stream Key | stream (or any key you prefer) |
Note: The stream key here is just for the local connection between OBS and SpiritStream. Your actual platform stream keys are configured in SpiritStream profiles.
For best results with SpiritStream:
| Setting | Recommended Value |
|---|---|
| Output Mode | Advanced |
| Encoder | x264 or NVENC (hardware) |
| Rate Control | CBR |
| Bitrate | 4500-6000 kbps for 1080p |
| Keyframe Interval | 2 seconds |
| Profile | high |
- Open SpiritStream
- Navigate to Profiles in the sidebar
- Click on your streaming profile to select it
- Verify the profile shows as "Active" on the Dashboard
Before starting, confirm your targets are configured:
- Go to Stream Targets in the sidebar
- Check that each platform shows the correct server URL
- Ensure stream keys are entered (shown as masked dots)
The order matters—start SpiritStream first, then OBS.
- Go to the Dashboard or Stream Manager
- Click the Start Stream button
- Wait for the status to show "Waiting for input..."
%%{init: {'theme': 'base', 'themeVariables': {
'primaryColor': '#3D3649',
'primaryTextColor': '#F4F2F7',
'primaryBorderColor': '#7C3AED',
'lineColor': '#9489A8',
'secondaryColor': '#251A33',
'tertiaryColor': '#1A1225',
'background': '#0F0A14',
'mainBkg': '#1A1225',
'nodeBorder': '#5E5472',
'clusterBkg': '#251A33',
'clusterBorder': '#3D3649',
'titleColor': '#A78BFA',
'edgeLabelBackground': '#1A1225',
'textColor': '#F4F2F7'
}}}%%
sequenceDiagram
participant User
participant SS as SpiritStream
participant OBS
participant Platform as YouTube/Twitch
User->>SS: Click "Start Stream"
SS->>SS: Start RTMP server on :1935
SS-->>User: Status: "Waiting for input"
User->>OBS: Click "Start Streaming"
OBS->>SS: RTMP connection
SS->>Platform: Forward stream
SS-->>User: Status: "Live"
Startup sequence for streaming.
- In OBS, click Start Streaming
- OBS should connect within seconds
- SpiritStream status changes to "Live"
The Dashboard shows real-time metrics:
| Stat | Description | Healthy Range |
|---|---|---|
| Active Streams | Number of live output targets | Your target count |
| Total Bitrate | Combined bitrate to all platforms | Sum of configured bitrates |
| Dropped Frames | Frames lost due to network/CPU | 0 (any drops indicate issues) |
| Uptime | Time since stream started | N/A |
Each target card shows:
- Status indicator: Green (live), Yellow (connecting), Red (error)
- Bitrate: Current output bitrate
- FPS: Frames per second being sent
For detailed diagnostics, check Logs in the sidebar. Look for:
[INFO] Stream started— Normal startup[WARN] Dropped frames— Network or CPU issue[ERROR] Connection failed— Platform rejected connection
Always stop in the correct order to avoid issues.
- In OBS, click Stop Streaming
- Wait for OBS to confirm the stream has stopped
- In SpiritStream, click Stop Stream
- All target statuses return to "Offline"
Why this order? Stopping SpiritStream first while OBS is still sending can cause OBS to show errors and may result in incomplete stream endings on platforms.
| Symptom | Cause | Solution |
|---|---|---|
| OBS shows "Disconnected" | SpiritStream not running | Start SpiritStream first |
| SpiritStream shows "Waiting" | OBS not streaming | Start streaming in OBS |
| Platform shows offline | Invalid stream key | Verify key in Stream Targets |
| Symptom | Cause | Solution |
|---|---|---|
| No audio on stream | OBS audio not configured | Check OBS Audio settings |
| Audio out of sync | Encoder settings | Set audio to AAC, 128-320 kbps |
| Crackling audio | Bitrate too low | Increase audio bitrate to 160+ kbps |
If OBS shows "Failed to connect to server":
- Check SpiritStream is running — The RTMP server only starts when you click Start Stream
- Verify the URL — Must be exactly
rtmp://localhost:1935/live - Check port availability — Another application may be using port 1935
- Firewall — Ensure SpiritStream is allowed through your firewall
| Cause | Solution |
|---|---|
| Software encoding (x264) | Switch to hardware encoder (NVENC/QuickSync) |
| High preset in OBS | Use "veryfast" or "faster" preset |
| Re-encoding in SpiritStream | Use "Passthrough" mode if quality matches |
| Service | Server URL |
|---|---|
| SpiritStream Ingest | rtmp://localhost:1935/live |
| YouTube | rtmp://a.rtmp.youtube.com/live2 |
| Twitch | rtmp://live.twitch.tv/app |
| Kick | rtmps://fa723fc1b171.global-contribute.live-video.net/app |
- SpiritStream installed and FFmpeg working
- Profile created with stream targets
- Stream keys entered for each platform
- OBS configured with custom server
- SpiritStream started first
- OBS streaming to localhost
Now that you've completed your first stream:
- Multi-Platform — Stream to multiple platforms simultaneously
- Custom Encoding — Optimize quality per platform
Related: Getting Started | Multi-Platform | FFmpeg Integration