One source, multiple protocols, global reach
Choose the right protocol for each use case
Web Real-Time Communication
Browser viewers, real-time interaction, live auctions, gaming
Web browsers, mobile apps
Enable all protocols with one API call
import { WaveClient } from '@wave/sdk';
const wave = new WaveClient({
apiKey: process.env.WAVE_API_KEY
});
// Create multi-protocol stream with all outputs
const stream = await wave.streams.create({
title: 'Global Event Stream',
protocols: ['webrtc', 'srt', 'rtmp', 'ndi', 'omt'],
// Protocol-specific settings
settings: {
webrtc: {
quality: 'uhd',
codec: 'vp9',
simulcast: [2160, 1080, 720, 480, 240],
enableDataChannel: true,
},
srt: {
latencyMs: 1000,
encryption: 'aes-256',
mode: 'caller',
fec: { enabled: true, columns: 10, rows: 10 },
},
rtmp: {
codec: 'h264',
profile: 'high',
bitrate: 6_000_000,
},
ndi: {
sourceName: 'WAVE-PRODUCTION',
enableTally: true,
bandwidth: 'high',
groups: ['Production', 'Backup'],
},
omt: {
latencyTarget: 'minimum',
syncMode: 'frame_accurate',
redundancy: 2,
},
},
// Failover configuration
failover: {
enabled: true,
sequence: ['webrtc', 'srt', 'rtmp', 'hls'],
trigger: {
packetLoss: 0.03, // 3%
latencyMs: 3000, // 3 seconds
bitrateDropPercent: 50,
},
seamless: true,
},
// Analytics per protocol
analytics: {
granularity: 'per_second',
breakdownBy: ['protocol', 'region', 'device'],
},
});
console.log('Multi-protocol stream created:');
console.log(' WebRTC:', stream.webrtc.url);
console.log(' SRT:', stream.srt.url);
console.log(' RTMP:', stream.rtmp.url);
console.log(' NDI:', stream.ndi.sourceName);
console.log(' OMT:', stream.omt.url);Choose how viewers are routed to protocols
Auto-detect viewer capabilities and serve optimal protocol
WebRTC support? → WebRTC | Good network? → SRT | Fallback → HLS// Automatic capability detection const viewer = await wave.viewers.detect(viewerId); const optimalProtocol = viewer.capabilities.bestProtocol; return stream.urls[optimalProtocol];
How enterprises use multi-protocol streaming
Concert streaming to 500K+ viewers across all platforms
Primary: WebRTC (browsers) | Fallback: HLS (legacy) | Contribution: SRT (venue)“We reached 3x more viewers by enabling all protocol outputs. The automatic transcoding meant zero additional engineering.”
Alex Rivera, Head of Streaming, LiveNation Digital
Competitive gaming with real-time commentary and instant replays
Production: NDI (studio) | Broadcast: OMT (commentators) | Viewers: WebRTC“The OMT protocol gave us true real-time for remote commentators. Players could hear crowd reactions instantly.”
Sarah Chen, Technical Director, ESL Gaming
Internal all-hands meeting with Q&A and breakout rooms
Primary: WebRTC (interactive) | Backup: SRT (poor connections) | Recording: HLS“SRT fallback saved our Tokyo office when their primary connection dropped. Zero interruption for 800 employees.”
Marcus Thompson, VP Engineering, Salesforce
Estimated costs per hour at different scales
| Concurrent Viewers | WebRTC | SRT | RTMP | HLS (CDN) |
|---|---|---|---|---|
| 10K | $40 | $20 | $10 | $5 |
| 100K | $400 | $200 | $100 | $50 |
| 1M | $4,000 | $2,000 | $1,000 | $500 |
| 10M | $40,000 | $20,000 | $10,000 | $5,000 |
Protocol failover, synchronization, and bandwidth management
Automatic switch to backup protocol on connection issues
await wave.streams.create({
protocols: ['webrtc', 'srt', 'rtmp'],
failover: {
enabled: true,
trigger: 'packet_loss > 5% || latency > 2000ms',
sequence: ['webrtc', 'srt', 'rtmp', 'hls'],
seamless: true, // Buffer during switch
}
});Keep all protocol outputs in sync for consistent experience
await wave.streams.create({
protocols: ['webrtc', 'srt', 'ndi'],
sync: {
mode: 'frame_accurate',
maxDrift: 50, // ms
referenceProtocol: 'ndi', // Lowest latency as reference
compensateLatency: true,
}
});Allocate bandwidth across protocols based on priority
await wave.streams.create({
protocols: ['webrtc', 'srt', 'rtmp'],
bandwidth: {
total: 50_000_000, // 50 Mbps total
allocation: {
webrtc: 0.6, // 60% for primary
srt: 0.3, // 30% for contribution
rtmp: 0.1, // 10% for legacy
},
adaptive: true, // Reallocate based on demand
}
});Customize encoding per protocol output
await wave.streams.create({
protocols: {
webrtc: {
quality: '1080p60',
codec: 'vp9',
simulcast: [1080, 720, 480, 240],
},
srt: {
quality: '4k30',
codec: 'hevc',
bitrate: 25_000_000,
},
rtmp: {
quality: '720p30',
codec: 'h264',
profile: 'main',
},
}
});Track performance across all protocols
// Get analytics breakdown by protocol
const analytics = await wave.analytics.get(streamId, {
breakdown_by: ['protocol', 'region'],
metrics: ['viewers', 'latency', 'bitrate', 'errors', 'qoe_score'],
period: 'last_hour',
});
console.log('Protocol Performance:');
analytics.protocols.forEach(protocol => {
console.log(`
${protocol.name}:
Active Viewers: ${protocol.viewers.toLocaleString()}
Average Latency: ${protocol.latency_ms}ms
Average Bitrate: ${(protocol.bitrate / 1_000_000).toFixed(1)} Mbps
Error Rate: ${(protocol.error_rate * 100).toFixed(2)}%
QoE Score: ${protocol.qoe_score}/100
`);
});
// Example output:
// WebRTC:
// Active Viewers: 12,453
// Average Latency: 287ms
// Average Bitrate: 2.4 Mbps
// Error Rate: 0.02%
// QoE Score: 94/100
// SRT:
// Active Viewers: 156
// Average Latency: 1,245ms
// Average Bitrate: 8.5 Mbps
// Error Rate: 0.01%
// QoE Score: 97/100
// Set up alerts per protocol
await wave.alerts.create({
streamId,
conditions: [
{
protocol: 'webrtc',
metric: 'latency_ms',
threshold: 1000,
operator: '>',
action: 'notify_and_failover',
},
{
protocol: 'srt',
metric: 'packet_loss',
threshold: 0.05,
operator: '>',
action: 'increase_fec',
},
],
});Essential guidelines for multi-protocol streaming success
How industry leaders leverage multi-protocol streaming
“WAVE's multi-protocol architecture lets us serve our live events to 190+ countries with protocol auto-selection. Viewers get WebRTC for real-time Q&A, HLS for background viewing - all from one stream.”
Greg Peters
VP of Platform Engineering
65% reduction in CDN costs
“The OMT protocol for our commentator feeds combined with SRT for remote cameras gives us broadcast-quality production without dedicated fiber. We saved $2M annually on contribution infrastructure.”
Aaron LaBerge
CTO, ESPN Digital
14ms glass-to-glass latency
“LinkedIn Live Events needed to support enterprise webinars with thousands of employees and external viewers. WAVE's multi-protocol failover ensures 99.99% uptime even when networks are unreliable.”
Nadia Rawlinson
VP Engineering, LinkedIn
45% engagement increase
Multi-protocol streaming endpoints
| Method | Endpoint | Description | Auth |
|---|---|---|---|
POST | /v1/streams | Create multi-protocol stream | API Key |
GET | /v1/streams/{id}/protocols | List enabled protocols | API Key |
PUT | /v1/streams/{id}/protocols/{proto} | Configure protocol settings | API Key |
GET | /v1/streams/{id}/failover | Get failover configuration | API Key |
PUT | /v1/streams/{id}/failover | Update failover settings | API Key |
GET | /v1/streams/{id}/sync | Get sync status across protocols | API Key |
POST | /v1/streams/{id}/sync/reset | Reset protocol synchronization | API Key |
GET | /v1/analytics/protocols | Protocol usage analytics | API Key |
Common issues, diagnostic commands, and solutions