@rhombussystems/react package provides drop-in React components for streaming Rhombus cameras. Two player modes are available:
RhombusBufferedPlayer— MPEG-DASH live streaming via Dash.js (buffered, reliable)RhombusRealtimePlayer— Low-latency H.264 over WebSocket via WebCodecs (near real-time)
Requires React 18+ and a backend endpoint that generates federated session tokens. Your Rhombus API key must never be exposed to the browser.
Install
react and react-dom >= 18. The dashjs library is included automatically for DASH playback.
Quick Start
- Requests a federated session token from your backend (
POST /api/federated-token) - Fetches media URIs from the Rhombus API
- Initializes Dash.js playback
Buffered Player (DASH)
TheRhombusBufferedPlayer streams MPEG-DASH live video with configurable quality levels.
Stream Quality
Control server-side downscaling with thebufferedStreamQuality prop:
| Value | Description |
|---|---|
"HIGH" | Full resolution (default) |
"MEDIUM" | Medium downscale |
"LOW" | Low resolution, lowest bandwidth |
RequestModifier applies the change on the next segment request.
Realtime Player (WebSocket)
TheRhombusRealtimePlayer decodes H.264 frames over WebSocket using the browser’s WebCodecs API and renders to a <canvas>. This provides lower latency than DASH.
Connection Modes
| Mode | Description |
|---|---|
"wan" | Uses the WAN H.264 WebSocket URI with federated token auth appended to the URL |
"lan" | Uses the LAN H.264 WebSocket URI. Auth is handled via an RFT cookie instead of URL parameters |
Stream Quality
| Value | Description |
|---|---|
"HD" | Full resolution (default) |
"SD" | Lower resolution via /wsl path — changing this prop reconnects the WebSocket |
Browser compatibility: WebCodecs with H.264 decoding is supported in Chrome, Edge, and Safari 16.4+. Firefox support is limited.
LAN Mode Considerations
In LAN mode, the SDK sets anRFT cookie with the federated token. This works when your app and the camera’s LAN endpoint share a compatible domain. If your app runs on localhost while the camera is on a different host, the cookie cannot be set by the browser.
Use applyLanAuthCookie={false} if your integration handles the RFT cookie through a different mechanism.
Backend Setup
The SDK requires a server-side endpoint to generate federated session tokens. Your Rhombus API key stays on the server — it is never sent to the browser.Token Endpoint
Your backend must expose a POST endpoint (default path:/api/federated-token):
Override Mode (Proxy All Requests)
If you prefer to keep all Rhombus traffic server-side (the browser never talks to Rhombus directly), useapiOverrideBaseUrl:
POST /api/media-uris endpoint that proxies to Rhombus’s POST /camera/getMediaUris.
Props Reference
Shared Props
| Prop | Type | Default | Description |
|---|---|---|---|
cameraUuid | string | required | Camera UUID to stream |
apiOverrideBaseUrl | string | — | Route both token and media requests through your server |
rhombusApiBaseUrl | string | https://api2.rhombussystems.com/api | Rhombus API base URL (when not using override) |
paths.federatedToken | string | /api/federated-token | Path to your token endpoint |
paths.mediaUris | string | /camera/getMediaUris or /api/media-uris | Path for media URI resolution |
federatedSessionToken | string | — | Skip token fetch; use this token directly |
headers | object | — | Extra headers merged into the token request |
getRequestHeaders | () => object | — | Dynamic headers for each request |
onError | (error: Error) => void | — | Error callback |
RhombusBufferedPlayer Props
| Prop | Type | Default | Description |
|---|---|---|---|
bufferedStreamQuality | "HIGH" | "MEDIUM" | "LOW" | "HIGH" | Server-side downscale level |
applyBufferedStreamQuality | boolean | true | Set false to disable quality parameter |
RhombusRealtimePlayer Props
| Prop | Type | Default | Description |
|---|---|---|---|
connectionMode | "wan" | "lan" | required | WAN (token via URL) or LAN (token via cookie) |
realtimeStreamQuality | "HD" | "SD" | "HD" | Stream resolution; changing reconnects the WebSocket |
applyLanAuthCookie | boolean | true | Set RFT cookie for LAN mode |
lanAuthCookieName | string | "RFT" | Cookie name for LAN auth |
lanAuthCookieDomain | string | — | Cookie domain for LAN auth |
lanAuthCookiePath | string | "/" | Cookie path for LAN auth |
lanAuthCookieSecure | boolean | true | Secure flag on LAN auth cookie |
Troubleshooting
404 on /api/federated-token
404 on /api/federated-token
Your backend does not have a token endpoint at the expected path. Either implement
POST /api/federated-token or set the paths.federatedToken prop to match your route.CORS errors fetching media URIs
CORS errors fetching media URIs
The federated token was generated without a
domain matching your app’s origin. Pass your app’s origin as the domain parameter when calling generateFederatedSessionToken on your backend.Realtime player shows nothing
Realtime player shows nothing
Check browser compatibility — WebCodecs H.264 requires Chrome, Edge, or Safari 16.4+. Check the browser console for
[RhombusRealtimePlayer] messages.LAN mode not authenticating
LAN mode not authenticating
The
RFT cookie cannot be set across different origins. If your app runs on localhost and the camera is on a LAN host, use applyLanAuthCookie={false} and handle auth separately.Resources
npm Package
Package details and version history
GitHub Repository
Source code, examples, and issues
Streaming Video Guide
Low-level streaming implementation without the SDK
Video Player Guide
Custom Dash.js player implementation