Open protocol for professional live production over local WiFi. Glass-to-glass latency 100–300ms (20–75ms in low-latency mode). Built-in tally, scene metadata, and zero-config discovery.
— Motivation
NDI requires 100–500 Mbps — impractical over WiFi. SBL uses adaptive bitrate encoding (2–50 Mbps) with a WebRTC congestion controller optimized for wireless links.
NDI has no native mobile story. SBL was designed from day one for smartphones as professional cameras, with QR-code pairing that works in 3 seconds.
WHIP/WebRTC gives you low latency but zero context. SBL bakes in tally status, scene name, timecode, and transport controls — everything a camera operator needs.
NDI is free-to-use but proprietary SDK. SBL is a protocol spec under Apache 2.0 — implement it in any language, any platform, without contacting us first.
— Protocol
Source announces capabilities: codecs, max resolution, platform, app version. Includes QR pairing token.
Codec negotiation + ICE candidate exchange. Simpler than SDP — just JSON with the fields you actually need.
Receiver notifies source of on-air status: live, preview, standby, recording.
Scene name, source name, timecode, stream duration — pushed from receiver to source in real time.
Receiver sends commands to source: flip-camera, torch-on/off, snapshot, mark.
Receiver requests bitrate adjustment based on observed packet loss or buffer buildup.
— Comparison
| SBL | NDI | WHIP | SRT | RTMP | |
|---|---|---|---|---|---|
| Latency (LAN) | 100–300ms | 100–200ms | 100–500ms | 200ms–2s | 1–5s |
| Bandwidth | 2–50 Mbps | 100–500 Mbps | Variable | Variable | Variable |
| WiFi-ready | ✓ | ✗ High BW | ✓ | ⚠ No ABR | ✗ |
| Mobile-native | ✓ | ✗ | ⚠ Partial | ✗ | ✗ |
| Tally | ✓ Built-in | ✓ Built-in | ✗ None | ✗ None | ✗ None |
| Scene metadata | ✓ Built-in | ✓ Built-in | ✗ | ✗ | ✗ |
| Discovery | mDNS + QR | mDNS | Manual URL | Manual | Manual |
| Encryption | DTLS-SRTP | Optional | DTLS-SRTP | AES-128/256 | None |
| License | Apache 2.0 | Proprietary SDK | IETF Open | MPL-2.0 | Proprietary |
SBL and WHIP are complementary, not competing. SAMBA supports both: WHIP for cloud ingest, SBL for local production with tally and discovery.
— For developers
Browse _sbl._tcp.local or parse sbl://host:port?token=... from QR scan.
Connect to ws://host:port/sbl and send your capabilities and pairing token.
Exchange codec params and ICE candidates. No SDP parsing required — pure JSON.
Media flows over standard WebRTC RTP. Handle TALLY, METADATA, and PING on the WebSocket.
{
"type": "SBL-OFFER",
"sessionId": "f3a9c2e1",
"video": {
"codec": "h264",
"profile": "constrained-baseline",
"bitrateMbps": 8,
"resolution": "1920x1080",
"fps": 60
},
"audio": {
"codec": "opus",
"sampleRate": 48000,
"channels": 2
},
"ice": {
"candidates": ["..."],
"ufrag": "xxxx",
"pwd": "yyyyyyyy"
}
}
— Ecosystem
Implement SBL in your app or hardware and get listed here. Open a PR on GitHub.