Este proyecto permite capturar video y audio de una cámara USB 3.0 en una Raspberry Pi 5 y transmitirlo a la red local mediante RTMP, permitiendo visualización en navegadores (WebRTC), VLC u OBS.
El ecosistema se apoya en tres pilares de software de alto rendimiento para garantizar estabilidad y baja latencia:
-
FFmpeg (ffmpeg.org)
Motor de procesamiento multimedia. Se encarga de capturar video crudo (V4L2) y audio (ALSA), comprimirlos en H.264/AAC y empaquetarlos en flujo RTMP. -
MediaMTX (github.com)
Servidor de medios (media proxy) que actúa como receptor central; permite que el flujo sea consumido simultáneamente vía WebRTC, HLS y RTSP. -
Cockpit (cockpit-project.org)
Interfaz gráfica web para Linux. Permite gestionar los servicios de systemd (iniciar/detener) y monitorear logs de forma visual sin usar SSH.
El script install.sh permite configurar el sistema en un solo comando.
Si no se pasan parámetros, usará los valores por defecto (RTMP, nicolasrt, 1080p@60fps).
Este repositorio incluye un plugin Cockpit para ver el stream y controlar el servicio desde una UI web:
- Ruta del plugin en el repo:
cockpit/pi-tv/ - Instalador unificado:
install.sh
Desde la raíz del repositorio:
chmod +x install.sh
./install.sh -u nicolasrt -s 1280x720 -f 30 -T 70 -H 'TU_TOKEN_HA'Esto:
- Copia
manifest.json,index.html,app.jsyapp.cssa~/.local/share/cockpit/pi-tv/ - Instala el wrapper de Home Assistant en
/usr/local/bin/ha-script-run.sh - Guarda el token HA en
/etc/ha-token(si se usa-H) - Recarga la integración Tuya (
homeassistant.reload_config_entry) usando el entry id indicado - Recarga servicios (
streaming-tv.service, monitores ycockpit)
chmod +x install.sh && ./install.shEjemplo: 720p a 30fps con límite térmico de 70°C
./install.sh -u nicolasrt -s 1280x720 -f 30 -T 70| Flag | Descripción | Valor por defecto |
|---|---|---|
| -u | Usuario del sistema que ejecutará el servicio | nicolasrt |
| -m | Modo de transmisión (RTMP o UDP) | RTMP |
| -n | Nombre del dispositivo de audio (ALSA) | USB3.0 Video |
| -i | Host/IP de destino (solo para modo UDP) | localhost |
| -r | URL del servidor RTMP local | rtmp://localhost:1935/live/stream |
| -v | Ruta del dispositivo de video | /dev/video0 |
| -b | ID del Bus USB para reset (Bus-Puerto) | 5-1 |
| -s | Resolución de video (Ancho x Alto) | 1920x1080 |
| -f | Cuadros por segundo (FPS) | 60 |
| -T | Límite de temperatura de CPU (°C) | 75 |
| -H | Token de Home Assistant para controles de canal | (vacío / opcional) |
| -E | Entry ID de Tuya para recarga de integración | 01KK2T254KGSTZP1RMJ76KY45J |
| -P | Carpeta fuente del plugin Cockpit | ./cockpit/pi-tv |
| -C | Carpeta destino del plugin Cockpit | /home//.local/share/cockpit/pi-tv |
| -I | Tiempo de inactividad (segundos) para apagar el stream | 300 |
| -S | Servicio a detener si hay sobrecalentamiento o inactividad | streaming-tv.service |
| -c | Intervalo en segundos entre cada comprobación de espectadores | 30 |
-
scripts/streaming-tv.sh
Realiza el mantenimiento del hardware (reset USB), detecta el audio y lanza la codificación FFmpeg. -
services/streaming-tv.service
Permite la gestión del stream como servicio de sistema desde Cockpit. -
scripts/thermal-monitor.sh
Script centinela que supervisa la temperatura y detiene el stream en caso de calor crítico. -
services/thermal-monitor.service
Mantiene el monitoreo térmico activo en segundo plano desde el arranque. -
scripts/idle-monitor.sh Script de eficiencia energética que consulta la API de MediaMTX. Si no detecta espectadores durante un tiempo determinado (parámetro -t), ordena el apagado automático del streaming.
-
services/idle-monitor.service Servicio encargado de mantener la vigilancia de inactividad activa en segundo plano.
-
docker/docker-compose.yml
Define el contenedor MediaMTX para la distribución del flujo de video. -
install.sh
Automatiza dependencias, permisos y despliega los archivos en sus rutas correctas. -
scripts/ha-script-run.sh Wrapper de integración con Home Assistant para ejecutar scripts (
script.turn_on) usando token en/etc/ha-token(por defecto usahttp://localhost:8123).
| Función | Método / URL |
|---|---|
| Control On/Off | Cockpit en https://IP_DE_LA_PI:9090 |
| Ver en Web | http://IP_DE_LA_PI:8889/live/stream (WebRTC) |
| Ver en VLC | rtmp://IP_DE_LA_PI:1935/live/stream |
| Ver en ffplay | ffplay -i "rtmp://IP_DE_LA_PI:1935/live/stream" -fflags nobuffer |
journalctl -u streaming-tv.service -fsudo systemctl restart streaming-tv.servicesudo docker psv4l2-ctl --list-devices y arecord -l