Cámaras
Puerta de enlace RTSP EdgeCaster
Ejecuta EdgeCaster en una Raspberry Pi 5 o cualquier máquina Ubuntu/Debian para retransmitir los streams de las cámaras Rhombus como RTSP con latencia inferior a un segundo para sistemas VMS, NVR y de video de terceros heredados.
En esta página
- Cómo funciona
- Latencia inferior a un segundo, siempre el fotograma más reciente
- Streams concurrentes ilimitados
- Autorrecuperación 24/7
- Características
- Requisitos
- Instalación
- Configuración inicial (2 minutos)
- Panel web
- Métricas de salud en vivo
- Alertas por webhook
- Logs en vivo
- Acceso público (opcional)
- Puertos de red
- Endpoints de la API de Rhombus utilizados
- Gestión de servicios
- Actualizaciones automáticas
- Configuración
- Desarrollo local
- API de EdgeCaster
- Limitaciones
- Notas de seguridad
- Solución de problemas
- ¿Necesitas ayuda?
- Recursos
Esta página se tradujo automáticamente. Si encuentras errores o tienes sugerencias, escríbenos.
EdgeCaster es una puerta de enlace edge local que obtiene los Secure Raw Streams de Rhombus (H.264 sobre HTTPS) y los retransmite como RTSP estándar en tu red local usando MediaMTX integrado. Se ejecuta en una Raspberry Pi 5, un mini-PC o cualquier máquina Ubuntu/Debian, de modo que los sistemas VMS, NVR y de IA/video de terceros heredados que requieren RTSP pueden consumir video de las cámaras Rhombus con menos de un segundo de latencia añadida. Se administra desde un panel web sencillo; funciona 24/7 y se recupera solo cuando un stream se cae.
Rhombus no admite RTSP de forma nativa porque no es un protocolo seguro. EdgeCaster cubre esta brecha para los entornos que requieren compatibilidad con RTSP convirtiendo los streams raw cifrados de Rhombus localmente en tu red. Implementa EdgeCaster únicamente en redes de confianza.
Cómo funciona
Rhombus Camera
│
│ Secure Raw Stream (HTTPS H.264)
▼
EdgeCaster (Raspberry Pi 5 / mini-PC / máquina Ubuntu-Debian)
│ FFmpeg stream copy (sin transcodificación)
▼
MediaMTX (servidor RTSP, puerto 8554)
│
▼
Sistemas externos (VMS / NVR / IA)EdgeCaster usa la API de Rhombus para descubrir cámaras, crea streams raw seguros mediante createRawHttpStream y los canaliza a través de FFmpeg (stream copy — sin transcodificación) hacia MediaMTX, que los sirve como RTSP estándar.
Latencia inferior a un segundo, siempre el fotograma más reciente
Como los streams se copian en lugar de transcodificarse (-c copy), no hay retraso de decodificación/codificación. EdgeCaster minimiza la latencia eliminando el buffering en cada salto:
- FFmpeg se ejecuta sin buffering de entrada, con flags de baja latencia, tiempo de sondeo/análisis reducido para un arranque rápido, y retardo y precarga de multiplexación en cero, de modo que los paquetes se reenvían en cuanto llegan. Los parámetros ajustables (tamaño de sondeo, duración de análisis, umbral de congelamiento) están expuestos en
/etc/edgecaster/config.yamlpor si necesitas ajustarlos en el dispositivo. - MediaMTX está ajustado para baja latencia y detección rápida de fallos: su API de control está habilitada en localhost y un timeout de lectura corto descarta rápidamente a un publicador congelado. Cada lector RTSP tiene su propia cola, así que un consumidor lento no puede añadir latencia al publicador ni a otros lectores.
El resultado: EdgeCaster siempre envía el fotograma más nuevo con menos de un segundo de latencia añadida dentro del dispositivo. La latencia de extremo a extremo ("glass-to-glass") también depende del intervalo GOP/keyframe de la cámara y del búfer propio de tu sistema consumidor, que EdgeCaster no controla.
Streams concurrentes ilimitados
No hay límite fijo de streams: el dispositivo ejecuta tantos streams como permitan su red y su CPU. Como el stream copy es muy ligero, las pruebas reales en una Raspberry Pi 5 mostraron varios streams 1080p más múltiples lectores RTSP con aproximadamente un 3% de CPU, dejando un amplio margen. max_streams: 0 (el valor predeterminado) significa ilimitado; establece un valor positivo en config.yaml si quieres un techo de seguridad opcional.
Autorrecuperación 24/7
EdgeCaster monitorea cada stream a nivel de fotograma usando la salida de progreso de FFmpeg — no solo "¿el proceso está vivo?" — de modo que un feed congelado pero vivo (sin fotogramas nuevos) se detecta en segundos mediante un watchdog. Todos los desencadenantes de fallo (salida del proceso, feed congelado, proceso muerto) pasan por una única ruta de recuperación que garantiza exactamente un relanzamiento, sin carreras de doble reinicio. La recuperación vuelve a obtener una URL de Secure Raw Stream nueva desde Rhombus (los tokens de stream expiran) y se reanuda, normalmente en segundos.
Si un stream sigue fallando, EdgeCaster reintenta rápido (cada 5 segundos, hasta 10 veces), luego pasa a un intervalo de 5 minutos — y sigue intentando para siempre. Nunca se rinde de forma permanente en un dispositivo 24/7. La recuperación de feeds congelados usa un backoff más ligero y rápido.
Características
- Latencia añadida inferior a un segundo, retransmisión siempre del último fotograma (stream copy, sin transcodificación)
- Streams concurrentes ilimitados — tantos como permitan la red y la CPU del dispositivo
- Autorrecuperación 24/7 con detección de congelamiento a nivel de fotograma y renovación automática de la URL del stream
- Panel de salud en vivo con métricas en tiempo real por Server-Sent Events
- Alertas por webhook ante caídas de streams y sobrecarga del dispositivo (Slack, Make.com o cualquier listener HTTP)
- Visor de logs en vivo en el panel — sin necesidad de SSH
- Acceso público seguro opcional con un clic mediante un túnel rápido de Cloudflare
- Descubrimiento automático de cámaras a través de la API de Rhombus
- Estado de streams persistente entre reinicios; los streams se restauran automáticamente al arrancar
- Actualizaciones automáticas nocturnas, instalador de una línea e imagen de Raspberry Pi lista para grabar
Requisitos
| Componente | Requisito |
|---|---|
| Dispositivo | Raspberry Pi 5 (8 GB de RAM recomendados) o cualquier máquina Ubuntu/Debian (mini-PC, VM) |
| Arquitectura | arm64, amd64 o armv7 |
| Red | Gigabit Ethernet por cable |
| SO | Ubuntu o Debian (la imagen de Pi incluye Ubuntu Server 24.04) |
| Rhombus | Org API Key |
Instalación
En cualquier máquina con Ubuntu o Debian (Raspberry Pi, mini-PC o máquina virtual), ejecuta:
curl -fsSL https://raw.githubusercontent.com/RhombusSystems/edgecaster-stream-converter/main/scripts/bootstrap.sh | sudo bashEl script descarga e instala todo — FFmpeg, MediaMTX, servicios systemd — y luego imprime la dirección web que debes abrir.
Graba una imagen lista para usar — sin escribir comandos:
- Obtén la imagen
Pide a Rhombus la imagen de tarjeta SD de EdgeCaster, o genera una tú mismo (ver la siguiente pestaña).
- Grábala
Escribe el archivo
.img.xzen una tarjeta SD con el gratuito Raspberry Pi Imager. - Arranca
Coloca la tarjeta en una Raspberry Pi 5, conéctala a tu red con un cable Ethernet y enciéndela.
- Abre el panel
Espera unos minutos y abre
http://edgecaster.localen un navegador web.
En el primer arranque el dispositivo establece su hostname en edgecaster, crea el usuario edgecaster (contraseña predeterminada: edgecaster) e inicia todos los servicios.
Cambia la contraseña predeterminada inmediatamente después del primer inicio de sesión: passwd edgecaster
Instala desde un checkout de git:
git clone https://github.com/RhombusSystems/edgecaster-stream-converter.git
cd edgecaster-stream-converter
sudo bash scripts/install.shEl instalador conserva un checkout de git en el dispositivo, por lo que las instalaciones manuales reciben actualizaciones automáticas nocturnas igual que la imagen de Pi.
Para generar una imagen de tarjeta SD grabable:
# Cloud-init mode (smaller image, needs internet on first boot)
sudo bash image/build-image.sh
# Pre-baked mode (larger image, no internet needed on first boot)
sudo bash image/build-image.sh --prebakedEl resultado es un .img.xz grabable.
Configuración inicial (2 minutos)
- Abre el panel
Abre EdgeCaster en un navegador web:
http://edgecaster.localohttp://<device-ip>. - Pega tu Rhombus Org API Key
Tus cámaras aparecen automáticamente.
- Activa una cámara
Acciona el interruptor junto a cualquier cámara para iniciar su stream RTSP.
- Conecta tus sistemas
Copia el enlace RTSP de la cámara en tu VMS, NVR o sistema de IA:
rtsp://<device-ip>:8554/front_door rtsp://<device-ip>:8554/warehouse rtsp://<device-ip>:8554/parking_lotLos nombres de las cámaras se normalizan a slugs seguros para URL y se persisten, de modo que las rutas RTSP sobreviven a los reinicios. Prueba con VLC:
vlc rtsp://<device-ip>:8554/<stream-name>
Panel web
El panel es una consola de operador limpia y adaptable que funciona en cualquier dispositivo o navegador — en móvil, la barra lateral se convierte en un cajón deslizante. Un pulso de estado persistente (conteo de streams activos y un indicador de salud) siempre está visible en la barra superior.
Métricas de salud en vivo
El panel transmite métricas en vivo (aproximadamente una vez por segundo) por Server-Sent Events — sin actualización manual: streams activos, cámaras encontradas, % de CPU, % de memoria, temperatura, estado de energía/throttling (bajo voltaje y throttling), promedio de carga de 1 minuto, tiempo de actividad, y rendimiento y conteo de lectores por stream.
Las métricas de temperatura y energía/throttling de la Raspberry Pi requieren el kernel de Raspberry Pi (linux-raspi). Con el kernel -generic/virtual de Ubuntu estas muestran "N/A" porque el SO no expone sensores térmicos. Solución: sudo apt-get install -y linux-raspi && sudo reboot. Todo lo demás funciona igualmente.
Alertas por webhook
EdgeCaster puede enviar una alerta a un webhook genérico — un webhook entrante de Slack, Make.com o cualquier listener HTTP — cuando:
- Un stream se cae o no puede recuperarse
- La Pi informa bajo voltaje (alimentación insuficiente)
- La Pi informa throttling térmico
- La CPU o el promedio de carga se mantienen altos
Los umbrales son configurables, cada alerta tiene un periodo de enfriamiento y las alertas se limpian al recuperarse, para no saturar el webhook. Configúralo en Settings → Alerts, que incluye un botón Send test alert. Las alertas activas también se muestran en el panel.
Logs en vivo
Una pestaña Logs (bajo Cameras) muestra los logs del dispositivo en vivo en una consola estilo terminal — útil para diagnosticar un problema de cámara o de conexión sin SSH:
- Fuentes: Application, Streams y Rhombus API
- Las líneas nuevas llegan en vivo, con niveles de log codificados por color
- Controles de pausa y limpieza
Acceso público (opcional)
Para acceder al panel desde fuera de tu red, ve a Settings → Public Access, establece un usuario y contraseña y haz clic en Turn on public access. EdgeCaster crea un enlace público seguro mediante un túnel rápido de Cloudflare y lo muestra. No se requiere cuenta, token ni configuración de Cloudflare.
El modelo de acceso: en tu red local nunca inicias sesión; el enlace público siempre requiere el usuario y la contraseña. Solo el tráfico que llega por el túnel público es desafiado (autenticación HTTP Basic); la contraseña se almacena con hash, nunca en texto plano.
- El enlace público es efímero — cambia cada vez que el acceso público se reinicia. Es la contrapartida de no necesitar credenciales de Cloudflare.
- El enlace expone controles de cámara: usa una contraseña fuerte y desactiva el acceso público cuando no lo necesites.
- Solo el panel web se expone públicamente — RTSP no se tuneliza y permanece en la LAN.
El acceso público requiere el asistente cloudflared, que el instalador incluye.
Puertos de red
| Puerto | Propósito |
|---|---|
| 80 | Interfaz web |
| 8554 | Streams RTSP (MediaMTX) |
| 8000 | API backend (interna, solo localhost) |
| 9997 | API de control de MediaMTX (interna, solo localhost) |
Endpoints de la API de Rhombus utilizados
EdgeCaster interactúa automáticamente con 5 endpoints de la API de Rhombus:
| Endpoint | Propósito |
|---|---|
POST | Descubre las cámaras de tu organización |
POST | Crea un stream raw seguro para una cámara |
POST | Limpia el stream cuando se deshabilita |
POST | Lista los streams raw existentes |
POST | Resuelve los nombres de ubicación para la interfaz |
Gestión de servicios
EdgeCaster se ejecuta como servicios systemd (edgecaster y mediamtx) con integración de watchdog. Las cámaras habilitadas y sus slugs RTSP persisten entre reinicios, y los streams se restauran automáticamente al arrancar.
# Check status
sudo systemctl status edgecaster mediamtx
# View logs
journalctl -u edgecaster -f
# Restart
sudo systemctl restart edgecaster
# Update now (also runs nightly on its own)
sudo bash /opt/edgecaster/scripts/edgecaster-update.sh
# Uninstall
sudo bash /opt/edgecaster/scripts/uninstall.shActualizaciones automáticas
EdgeCaster busca actualizaciones cada hora y las aplica (git fast-forward) durante una ventana configurable (predeterminada: 2:00–5:00 AM). Todos los métodos de instalación se actualizan automáticamente, incluidas las instalaciones manuales por checkout de git. Configúrala desde la página Settings de la interfaz web o directamente:
# /etc/edgecaster/config.yaml
auto_update_enabled: true
update_hour_start: 2
update_hour_end: 5Configuración
La configuración vive en /etc/edgecaster/config.yaml; el estado de ejecución (cámaras habilitadas y slugs RTSP) vive en /var/lib/edgecaster/state.json; los logs viven en /var/log/edgecaster/. Claves destacadas:
# /etc/edgecaster/config.yaml
max_streams: 0 # 0 = ilimitado (predeterminado); valor positivo = techo máximo
stall_threshold_seconds: 6 # umbral de detección de feed congelado
ffmpeg_probesize: 500000 # menor = arranque más rápido
ffmpeg_analyzeduration: 1000000
alerts_enabled: false
alert_webhook_url: ""
cpu_alert_threshold: 85 # porcentaje, sostenido
temp_alert_threshold_c: 80
load_alert_threshold: 0 # promedio de carga de 1 min; 0 = deshabilitadoDesarrollo local
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 8000cd frontend
npm install
npm run dev
# Dev server on http://localhost:5173, proxies /api to backendpip install pytest pytest-asyncio
python -m pytest backend/tests/ -vAPI de EdgeCaster
El backend de EdgeCaster expone una API REST local:
| Método | Ruta | Descripción |
|---|---|---|
GET | /api/ | Verifica el estado de configuración |
GET | /api/ | Obtiene la configuración de la app |
POST | /api/ | Establece la clave de API de Rhombus |
PUT | /api/ | Configura la ventana de actualización automática |
PUT | /api/ | Configura las alertas por webhook |
POST | /api/ | Envía una alerta de prueba |
GET | /api/ | Obtiene el estado del acceso público |
POST | /api/ | Establece el usuario/contraseña del acceso público |
POST | /api/ | Activa el acceso público |
POST | /api/ | Desactiva el acceso público |
POST | /api/ | Actualiza la lista de cámaras desde Rhombus |
GET | /api/ | Lista las cámaras descubiertas |
GET | /api/ | Lista los streams RTSP activos |
POST | /api/ | Inicia el stream RTSP de una cámara |
POST | /api/ | Detiene el stream RTSP |
GET | /api/ | Instantánea de salud del sistema |
GET | /api/ | Estado del sistema en vivo (Server-Sent Events, ~1s) |
GET | /api/ | Instantánea de logs |
GET | /api/ | Cola de logs en vivo (Server-Sent Events) |
GET | /api/ | Lista las fuentes de logs disponibles |
Limitaciones
- La autenticación RTSP no está habilitada en v1 — restringe el acceso mediante controles de red (puede añadirse vía configuración de MediaMTX)
- Los sistemas consumidores deben estar en la red local — el acceso público no tuneliza RTSP
- Los tokens de stream raw seguro expiran automáticamente; EdgeCaster los vuelve a obtener durante la recuperación
- Sin inicio de sesión en la interfaz web de la LAN — implementación solo en red de confianza (el acceso público añade un inicio de sesión solo para el túnel público)
Notas de seguridad
- Tu clave de API se almacena en
/etc/edgecaster/config.yaml(propiedad del usuarioedgecaster, no legible por todos) - Las claves de API nunca se registran ni se exponen en las respuestas de la API
- El servicio systemd se ejecuta con seguridad reforzada:
NoNewPrivileges,ProtectSystem=strict,ProtectHome,PrivateTmp - Los streams RTSP no están autenticados — restringe el acceso al puerto 8554 a nivel de red
- Con el acceso público activado, solo el tráfico del túnel es desafiado con autenticación HTTP Basic; la contraseña se almacena con hash (nunca en texto plano) y el tráfico de la LAN nunca es desafiado
Solución de problemas
No se encuentran cámaras
Verifica que tu clave de API de Rhombus sea válida y tenga acceso a las cámaras. Comprueba que el dispositivo pueda alcanzar api2.rhombussystems.com. Intenta actualizar el descubrimiento desde la página Settings.
El stream no inicia
Comprueba que FFmpeg esté instalado (ffmpeg -version), que MediaMTX esté en ejecución (systemctl status mediamtx) y que la cámara esté en línea. Revisa la pestaña Logs bajo Cameras, o consulta los logs con journalctl -u edgecaster -f.
La URL RTSP no funciona
Confirma que el stream aparezca como "running" en la interfaz web. Prueba con VLC: vlc rtsp://<device-ip>:8554/<path>. Comprueba que el puerto 8554 no esté bloqueado por un firewall.
La temperatura o el estado de energía muestran N/A
En una Raspberry Pi con el kernel -generic o virtual de Ubuntu, el SO no expone sensores térmicos. Instala el kernel de Pi: sudo apt-get install -y linux-raspi && sudo reboot. Todas las demás métricas funcionan igualmente.
El enlace público dejó de funcionar
El enlace público es efímero — cambia cada vez que el acceso público se reinicia (por ejemplo, tras un reinicio del dispositivo). Abre Settings → Public Access desde la LAN para ver el enlace actual.
La actualización automática no se ejecuta
Revisa el timer: systemctl status edgecaster-update.timer. Verifica que la instalación sea basada en git (que exista la carpeta .git) y que la hora actual esté dentro de la ventana de actualización.
¿Necesitas ayuda?
Escribe a support@rhombus.com y te ayudaremos con la configuración. Es útil incluir qué estabas haciendo y cualquier cosa que muestre el panel.
Recursos
Código fuente, generador de imágenes y rastreador de incidencias
Integración de streaming directo sin conversión RTSP
Incrusta streams de cámara en aplicaciones React
Documentación completa de los endpoints de stream raw y de cámara