Livestreams
FrontRow provides professional-grade live streaming capabilities with complete encoder flexibility. Stream using any software or hardware encoder via RTMP, with WebRTC support coming soon.
Encoder Flexibility
Use Any Encoder You Want
FrontRow supports any RTMP-compatible encoder, giving you complete freedom to use your preferred streaming setup:
Software Encoders
- OBS Studio (Free, open-source)
- Streamlabs Desktop
- XSplit Broadcaster
- Wirecast
- NVIDIA Broadcast
- Ecamm Live (macOS)
- vMix
- ManyCam
Hardware Encoders
- Blackmagic ATEM Mini Series
- LiveU Solo
- Teradek VidiU
- Pearl Series (Epiphan)
- YoloBox Pro
- Magewell Ultra Stream
- Roland V-Series
Mobile Encoders
- Larix Broadcaster
- Streamlabs Mobile
- Prism Live Studio
- BeLive
Technical Specifications
RTMP Configuration
Connect to FrontRow using these RTMP settings:
RTMP URL: rtmp://stream.frontrow.com/live
Stream Key: [Your unique stream key from dashboard]
Advanced RTMP Parameters
# Full connection string format
rtmp://stream.frontrow.com/live/{stream_key}
# With custom parameters
rtmp://stream.frontrow.com/live/{stream_key}?backup=1&lowLatency=1
Supported Streaming Protocols
Currently Supported
- RTMP (Real-Time Messaging Protocol)
- RTMPS (Secure RTMP over TLS)
- HLS (HTTP Live Streaming) for playback
- DASH (Dynamic Adaptive Streaming) for playback
Coming Soon
- WebRTC (Web Real-Time Communication) - Ultra-low latency streaming
- SRT (Secure Reliable Transport) - Enhanced reliability
- RIST (Reliable Internet Stream Transport) - Professional broadcast quality
Video Specifications
Supported Codecs
- Video: H.264/AVC (recommended), H.265/HEVC, VP9
- Audio: AAC-LC (recommended), MP3, Opus
Resolution Support
4K Ultra HD: 3840×2160 @ 30/60 fps
1440p: 2560×1440 @ 30/60 fps
1080p Full HD: 1920×1080 @ 30/60 fps
720p HD: 1280×720 @ 30/60 fps
480p SD: 854×480 @ 30 fps
360p: 640×360 @ 30 fps
Bitrate Recommendations
4K @ 60fps: 20,000-40,000 kbps
4K @ 30fps: 13,000-25,000 kbps
1080p @ 60fps: 4,500-9,000 kbps
1080p @ 30fps: 3,000-6,000 kbps
720p @ 60fps: 2,500-5,000 kbps
720p @ 30fps: 1,500-4,000 kbps
Audio Specifications
- Sample Rate: 44.1 kHz or 48 kHz
- Bitrate: 128-320 kbps
- Channels: Mono, Stereo, 5.1 Surround
Setting Up Your Stream
Quick Start with OBS Studio
-
Download OBS Studio from obsproject.com
-
Configure Stream Settings
Settings > Stream
Service: Custom
Server: rtmp://stream.frontrow.com/live
Stream Key: [Your key from FrontRow dashboard]
- Optimize Output Settings
Settings > Output
Output Mode: Advanced
Encoder: x264 or NVIDIA NVENC
Rate Control: CBR
Bitrate: 6000 kbps (for 1080p 30fps)
Keyframe Interval: 2
- Configure Video Settings
Settings > Video
Base Resolution: 1920x1080
Output Resolution: 1920x1080
FPS: 30 or 60
Hardware Encoder Setup (ATEM Mini Example)
- Connect ATEM Software Control
- Open Streaming Settings
- Configure Platform:
- Platform: Custom
- Server:
rtmp://stream.frontrow.com/live
- Key: Your FrontRow stream key
- Set Quality: 1080p30 at 6 Mbps
- Start Streaming: Press "ON AIR" button
Advanced Streaming Features
Multi-Bitrate Streaming
FrontRow automatically creates adaptive bitrate streams:
// Stream analytics API response
{
"renditions": [
{ "name": "source", "resolution": "1920x1080", "bitrate": 6000 },
{ "name": "high", "resolution": "1280x720", "bitrate": 3000 },
{ "name": "medium", "resolution": "854x480", "bitrate": 1500 },
{ "name": "low", "resolution": "640x360", "bitrate": 800 }
]
}
Low Latency Mode
Enable ultra-low latency streaming (2-5 seconds):
// API configuration
const streamConfig = {
lowLatency: true,
targetLatency: 3, // seconds
bufferSize: 1 // seconds
}
Redundant Streaming
Set up backup streams for reliability:
# Primary stream
rtmp://stream.frontrow.com/live/{stream_key}
# Backup stream
rtmp://backup.stream.frontrow.com/live/{stream_key}?backup=1
Stream Management API
Create Stream Session
POST /api/v1/streams/sessions
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"title": "My Live Stream",
"description": "Stream description",
"privacy": "public",
"recordStream": true,
"lowLatency": true
}
Get Stream Status
GET /api/v1/streams/sessions/{sessionId}/status
Authorization: Bearer YOUR_API_KEY
Response:
{
"status": "live",
"health": {
"bitrate": 6245,
"fps": 29.97,
"keyframeInterval": 2.0,
"droppedFrames": 0
},
"viewers": 1523,
"duration": 3600
}
Update Stream Settings
PATCH /api/v1/streams/sessions/{sessionId}
Authorization: Bearer YOUR_API_KEY
{
"title": "Updated Title",
"enableChat": false,
"enableDonations": true
}
WebRTC Support (Coming Soon)
Browser-Based Streaming
Soon you'll be able to stream directly from your browser:
// Future WebRTC implementation
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 1920, height: 1080, frameRate: 30 },
audio: { echoCancellation: true, noiseSuppression: true }
})
const peer = new FrontRowWebRTCPeer({
stream: stream,
streamKey: 'your-stream-key'
})
await peer.startBroadcast()
WebRTC Benefits
- Ultra-low latency: Sub-second delay
- No encoder needed: Stream from browser
- Adaptive quality: Automatic bitrate adjustment
- Better NAT traversal: Works behind firewalls
Stream Health Monitoring
Real-Time Metrics
Monitor your stream health in real-time:
// Connect to metrics WebSocket
const ws = new WebSocket('wss://metrics.frontrow.com/streams/{sessionId}')
ws.onmessage = (event) => {
const metrics = JSON.parse(event.data)
console.log('Bitrate:', metrics.bitrate)
console.log('FPS:', metrics.fps)
console.log('Dropped Frames:', metrics.droppedFrames)
}
Health Indicators
- Green: Excellent (0% dropped frames, stable bitrate)
- Yellow: Good (< 1% dropped frames)
- Red: Poor (> 5% dropped frames or unstable connection)
Network Requirements
Minimum Requirements
- Upload Speed: 5 Mbps (for 720p 30fps)
- Latency: < 100ms to nearest edge server
- Packet Loss: < 2%
Recommended Setup
- Wired Connection: Ethernet preferred over Wi-Fi
- Dedicated Bandwidth: 2x your target bitrate
- Quality of Service: Prioritize streaming traffic
Edge Server Locations
North America: NYC, LAX, CHI, DAL, SEA
Europe: LON, FRA, AMS, MAD
Asia-Pacific: TOK, SIN, SYD, BOM
South America: SAO, GRU
Troubleshooting
Connection Issues
# Test RTMP connectivity
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://stream.frontrow.com/live/{key}
# Check latency to servers
ping stream.frontrow.com
# Trace route for network path
traceroute stream.frontrow.com
Encoder Settings Optimization
CPU Usage Too High
- Lower preset (faster encoding)
- Reduce resolution or framerate
- Use hardware encoding (NVENC, QuickSync)
Stream Buffering
- Lower bitrate by 20%
- Increase keyframe interval to 2-4 seconds
- Check upload bandwidth consistency
Audio Sync Issues
- Set audio offset in encoder (-50ms to +50ms)
- Use CBR for both video and audio
- Ensure consistent sample rates
Best Practices
Pre-Stream Checklist
- Test Stream: Always run a private test
- Check Bandwidth: Run speed test
- Monitor CPU: Keep usage under 80%
- Audio Levels: Peak at -6dB
- Scene Setup: Test all transitions
Professional Tips
- Use a wired internet connection
- Stream at 80% of available upload bandwidth
- Keep local recordings as backup
- Use a UPS for power protection
- Monitor chat from second device
API Integration Examples
Python Streaming Monitor
import requests
import time
class FrontRowStreamMonitor:
def __init__(self, api_key, session_id):
self.api_key = api_key
self.session_id = session_id
self.base_url = "https://api.frontrow.com/v1"
def get_stream_health(self):
headers = {"Authorization": f"Bearer {self.api_key}"}
response = requests.get(
f"{self.base_url}/streams/sessions/{self.session_id}/health",
headers=headers
)
return response.json()
def monitor_stream(self, interval=5):
while True:
health = self.get_stream_health()
print(f"Bitrate: {health['bitrate']} kbps")
print(f"FPS: {health['fps']}")
print(f"Viewers: {health['viewers']}")
time.sleep(interval)
Node.js Auto-Recovery
const FrontRowStream = require('frontrow-sdk')
class StreamManager {
constructor(apiKey, streamKey) {
this.client = new FrontRowStream(apiKey)
this.streamKey = streamKey
this.reconnectAttempts = 0
}
async monitorConnection() {
setInterval(async () => {
const health = await this.client.getStreamHealth()
if (health.status === 'disconnected') {
await this.attemptReconnect()
}
}, 5000)
}
async attemptReconnect() {
if (this.reconnectAttempts < 3) {
console.log(`Attempting reconnect ${this.reconnectAttempts + 1}/3`)
// Trigger encoder restart
this.reconnectAttempts++
} else {
console.error('Max reconnection attempts reached')
// Send alert notification
}
}
}
Support Resources
- Technical Documentation: docs.frontrow.com/streaming
- Encoder Presets: Download optimized presets
- Network Test Tool: test.frontrow.com
- 24/7 Support: support@frontrow.com
Last updated: July 2025 | WebRTC support launching Q3 2025