How It Works
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
| Component | Requirement |
|---|---|
| Device | Raspberry Pi 5 |
| RAM | 8 GB recommended |
| Storage | 32 GB SD card minimum |
| Network | Gigabit Ethernet |
| OS | Ubuntu Server 24.04 |
Setup
- Install Script
- SD Card Image
Clone and install
Configure via web UI
Open
http://<device-ip> in a browser:- Enter your Rhombus Org API Key
- Cameras are discovered automatically
- Toggle cameras on to start RTSP streams
Web UI
The web interface athttp://<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
| Port | Purpose |
|---|---|
| 80 | Web UI (Nginx reverse proxy) |
| 8554 | RTSP streams (MediaMTX) |
| 8000 | Backend API (internal, localhost only) |
Rhombus API Endpoints Used
EdgeCaster interacts with 5 Rhombus API endpoints automatically:| Endpoint | Purpose |
|---|---|
POST /api/camera/getMinimalCameraStateList | Discover cameras in your organization |
POST /api/camera/createRawHttpStream | Create a secure raw stream for a camera |
POST /api/camera/deleteRawHttpStream | Clean up stream when disabled |
POST /api/camera/getRawHttpStreams | List existing raw streams |
POST /api/location/getLocationLabelsForOrg | Resolve location names for the UI |
Managing Services
EdgeCaster runs as systemd services: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:Local Development
EdgeCaster API
The EdgeCaster backend exposes a local REST API:| Method | Path | Description |
|---|---|---|
GET | /api/auth/status | Check setup state |
GET | /api/settings | Get app settings |
POST | /api/settings/api-key | Set Rhombus API key |
PUT | /api/settings/update-schedule | Configure auto-update window |
POST | /api/settings/discovery/refresh | Refresh camera list from Rhombus |
GET | /api/cameras | List discovered cameras |
GET | /api/streams | List active RTSP streams |
POST | /api/streams/{uuid}/enable | Start RTSP stream for a camera |
POST | /api/streams/{uuid}/disable | Stop RTSP stream |
GET | /api/system/status | System 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 byedgecasteruser, 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
No cameras found
No cameras found
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.Stream not starting
Stream not starting
Check FFmpeg is installed (
ffmpeg -version), MediaMTX is running (systemctl status mediamtx), and the camera is online. View logs with journalctl -u edgecaster -f.RTSP URL not working
RTSP URL not working
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.Auto-update not running
Auto-update not running
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