Skip to main content
EdgeCaster is a lightweight edge gateway that converts Rhombus secure raw streams into RTSP streams using MediaMTX. It runs on a Raspberry Pi 5 and allows legacy VMS, NVR, and third-party AI/video systems that require RTSP to consume video from Rhombus cameras.
Rhombus does not support RTSP natively because it is not a secure protocol. EdgeCaster bridges this gap for environments that require RTSP compatibility by converting Rhombus’s encrypted raw streams locally on your network. Deploy EdgeCaster only on trusted networks.

How It Works

Rhombus Camera
     β”‚
     β”‚ Secure Raw Stream (HTTPS H.264)
     β–Ό
EdgeCaster (Raspberry Pi)
     β”‚ FFmpeg stream copy (no transcoding)
     β–Ό
MediaMTX (RTSP server, port 8554)
     β”‚
     β–Ό
External Systems (VMS / NVR / AI)
EdgeCaster uses the Rhombus API to discover cameras, creates secure raw streams via createRawHttpStream, and pipes them through FFmpeg (stream copy β€” no transcoding) to MediaMTX which serves them as standard RTSP.

Features

  • Automatic camera discovery via Rhombus API
  • Web UI for enabling/disabling streams per camera
  • Up to 10 concurrent streams (stream copy, no CPU-intensive transcoding)
  • Automatic stream recovery on failure with configurable retry logic
  • Persistent stream state across reboots
  • Auto-updates via configurable nightly window
  • Ready-to-flash Raspberry Pi SD card image builder

Hardware Requirements

ComponentRequirement
DeviceRaspberry Pi 5
RAM8 GB recommended
Storage32 GB SD card minimum
NetworkGigabit Ethernet
OSUbuntu Server 24.04

Setup

1

Clone and install

git clone https://github.com/RhombusSystems/edgecaster-stream-converter.git
cd edgecaster-stream-converter
sudo bash scripts/install.sh
The installer handles all dependencies: FFmpeg, Python, Node.js, Nginx, MediaMTX, systemd services, and log rotation.
2

Configure via web UI

Open http://<device-ip> in a browser:
  1. Enter your Rhombus Org API Key
  2. Cameras are discovered automatically
  3. Toggle cameras on to start RTSP streams
3

Connect your systems

Point your VMS, NVR, or video analytics to the RTSP endpoints:
rtsp://<device-ip>:8554/front_door
rtsp://<device-ip>:8554/warehouse
rtsp://<device-ip>:8554/parking_lot
Test with VLC: vlc rtsp://<device-ip>:8554/<stream-name>

Web UI

The web interface at http://<device-ip> provides:
  • Dashboard β€” View all discovered cameras with stream status
  • Stream control β€” Toggle individual cameras on/off for RTSP conversion
  • Settings β€” Configure API key, refresh camera discovery, set auto-update window
  • System status β€” Health metrics and service status
The web UI has no built-in authentication in v1. Deploy EdgeCaster only on trusted networks where access to port 80 is restricted.

Network Ports

PortPurpose
80Web UI (Nginx reverse proxy)
8554RTSP streams (MediaMTX)
8000Backend API (internal, localhost only)

Rhombus API Endpoints Used

EdgeCaster interacts with 5 Rhombus API endpoints automatically:
EndpointPurpose
POST /api/camera/getMinimalCameraStateListDiscover cameras in your organization
POST /api/camera/createRawHttpStreamCreate a secure raw stream for a camera
POST /api/camera/deleteRawHttpStreamClean up stream when disabled
POST /api/camera/getRawHttpStreamsList existing raw streams
POST /api/location/getLocationLabelsForOrgResolve location names for the UI

Managing Services

EdgeCaster runs as systemd services:
# Check status
sudo systemctl status edgecaster
sudo systemctl status mediamtx

# View logs
journalctl -u edgecaster -f
journalctl -u mediamtx -f

# Restart
sudo systemctl restart edgecaster

Auto-Updates

EdgeCaster checks for updates hourly and applies them during a configurable window (default: 2:00–5:00 AM). Configure via the web UI Settings page or directly:
# /etc/edgecaster/config.yaml
auto_update_enabled: true
update_hour_start: 2
update_hour_end: 5
Manual update:
sudo bash scripts/edgecaster-update.sh

Local Development

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd backend
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

EdgeCaster API

The EdgeCaster backend exposes a local REST API:
MethodPathDescription
GET/api/auth/statusCheck setup state
GET/api/settingsGet app settings
POST/api/settings/api-keySet Rhombus API key
PUT/api/settings/update-scheduleConfigure auto-update window
POST/api/settings/discovery/refreshRefresh camera list from Rhombus
GET/api/camerasList discovered cameras
GET/api/streamsList active RTSP streams
POST/api/streams/{uuid}/enableStart RTSP stream for a camera
POST/api/streams/{uuid}/disableStop RTSP stream
GET/api/system/statusSystem health metrics

Limitations

  • Maximum 10 concurrent streams (Raspberry Pi CPU constraint, configurable via max_streams)
  • RTSP authentication is not enabled in v1 β€” restrict access via network controls
  • Cameras must be accessible on the local network for raw stream URLs
  • Secure raw stream tokens expire automatically; EdgeCaster recreates them on failure
  • No HTTP authentication on the web UI β€” trusted network deployment only

Security Notes

  • Your API key is stored in /etc/edgecaster/config.yaml (owned by edgecaster user, not world-readable)
  • API keys are never logged or exposed in API responses
  • The systemd service runs with hardened security: NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp
  • RTSP streams are unauthenticated β€” restrict port 8554 access at the network level

Troubleshooting

Verify your Rhombus API key is valid and has access to cameras. Check that the device can reach api2.rhombussystems.com. Try refreshing discovery from the Settings page.
Check FFmpeg is installed (ffmpeg -version), MediaMTX is running (systemctl status mediamtx), and the camera is online. View logs with journalctl -u edgecaster -f.
Confirm the stream shows β€œrunning” in the web UI. Test with VLC: vlc rtsp://<device-ip>:8554/<path>. Check that port 8554 is not blocked by a firewall.
Check the timer: systemctl status edgecaster-update.timer. Verify the installation is git-based (.git folder exists) and the current time falls within the update window.

Resources

GitHub Repository

Source code, image builder, and issue tracker

Streaming Video Guide

Direct streaming integration without RTSP conversion

React SDK

Embed camera streams in React applications

API Reference

Full documentation for raw stream and camera endpoints