| Arq. 1 | Arq. 2 | Arq. 3 ★★ | Arq. 4 | Arq. 5 | Arq. 6 ★ | |
|---|---|---|---|---|---|---|
| Stack | go2rtc integral | MediaMTX + rpicam | Mumble + go2rtc + datachannel | ffmpeg → HLS | RPi-WebRTC nativo | µStreamer + Mumble |
| RAM nueva | ~20-40 MB | ~15-30 MB | ~65 MB (+20 nuevos) | ~30 MB | ~80-100 MB | ~10-20 MB |
| Cam CSI | ✔ | ✔ zero-copy | ✔ | ✔ | ✔ nativo | ✔ M2M HW |
| Cam USB | ✔ | ⚠️ ffmpeg | ✔ | ✔ | ✘ | ✔ |
| Audio Tor | ⚠️ TURN | ⚠️ TURN | ✔ Mumble TCP | ✔ HTTP | ⚠️ TURN | ✔ Mumble TCP |
| Bidireccional | ✔ WHEP | ✔ WebRTC | ✔ Mumble | ✘ | ✔ P2P | ✔ Mumble |
| 0 JS browser | ✔ | ✔ | ✔ | ✔ | ✔ vía proxy | ✔ |
| Complejidad | Baja | Media | Media | Mínima | Alta | Baja |
| Spec | ☞ POSTER | ☞ POSTER | ☞ POSTER | ☞ POSTER | ☞ POSTER | ☞ POSTER |
¿Qué cámara tengo / quiero?
════════════════════════════
¿Tengo cámara CSI en RPi?
SÍ → ¿Quiero máxima eficiencia HW encode?
SÍ → MediaMTX (zero-copy) → Arq. 2
o RPi-WebRTC (si P2P nativo) → Arq. 5
NO → go2rtc (CSI vía v4l2, simple) → Arq. 1
o µStreamer (MJPEG + RAM mín.) → Arq. 6 ★
¿Tengo cámara USB?
SÍ → ¿Webcam con H.264 HW integrado?
SÍ → go2rtc v4l2 (passthrough) → Arq. 1
NO → go2rtc v4l2 (MJPEG) → Arq. 1
o µStreamer v4l2 (solo MJPEG) → Arq. 6 ★
RPi-WebRTC DESCARTADO (no soporta USB)
MediaMTX requiere ffmpeg → menos ventaja
¿Podría tener ambas o cambiar en el futuro?
SÍ → go2rtc + hardware_detect.js (Arq. 1)
o µStreamer + hardware_detect.js (Arq. 6)
¿Necesito audio sobre Tor?
SÍ → Mumble (invariante de CSI/USB)
+ go2rtc (si HLS remoto) → Arq. 3 ★★
+ µStreamer (si solo MJPEG LAN) → Arq. 6 ★
¿Solo LAN, RAM mínima, pipeline simple?
SÍ → µStreamer + Mumble → Arq. 6 ★
| Contexto | Arq. | Condicion principal |
|---|---|---|
| LAN + remoto + Tor | Arq. 3 | Siempre válida. CSI+USB. Tor. Audio superior. HLS remoto |
| Solo LAN + RAM critica | Arq. 6 | Solo LAN / RAM crítica. CSI+USB. MJPEG only. La más ligera |
| General sin Tor audio | Arq. 1 | Sin Tor para audio. Simplicidad máxima, un solo binario |
| CSI fija + mW critico | Arq. 2 | Solo CSI fija. Cada mW cuenta. No se prevé USB |
| P2P real sin Tor (CSI) | Arq. 5 | Solo CSI. WebRTC P2P real. No Tor. Riesgo mantenimiento |
| Baseline minima | Arq. 4 | Mínima. ffmpeg→HLS. 4-12s latencia. Escribe a microSD |
| Cam | Fase 1 (LAN) | Fase 3 (Internet) | Fase 3 + Tor |
|---|---|---|---|
| CSI | Arq. 6 (µS) Arq. 1 (go2rtc) Arq. 2 (MTX) |
Arq. 3 (Mumble+HLS) Arq. 5 (P2P) |
Arq. 3 |
| USB | Arq. 6 (µS) Arq. 1 (go2rtc) |
Arq. 3 (Mumble+HLS) | Arq. 3 |
| USB H.264 | Arq. 1 (pass) | Arq. 3 | Arq. 3 |
| Ambas | Arq. 6 o 1 + hw_detect |
Arq. 3 + detect | Arq. 3 |
| Arq. | Descarte / Condición |
|---|---|
| 1 · go2rtc | Excelente si no se necesita Tor para audio. Pero audio vía WHEP/WebRTC no funciona sobre hidden services. Sin Mumble, pierde la ventaja de privacidad de Arq. 3. |
| 2 · MediaMTX | Zero-copy CSI es atractivo para ahorrar mW pero no soporta USB sin ffmpeg intermedio. Pierde flexibilidad. Solo justificable si la cámara CSI es fija y permanente. |
| 4 · ffmpeg→HLS | Latencia 4-12s inaceptable para comunicación. Escribe segmentos .ts a microSD constantemente. No bidireccional. Solo útil como fallback de emergencia. |
| 5 · RPi-WebRTC | Solo CSI (hard requirement). Mantenimiento irregular del proyecto upstream. ~80-100 MB RAM. Si se necesita P2P WebRTC real con CSI fija y sin Tor, es una opción nicho. |
| Arq. 1 (go2rtc) | Arq. 3 (Mumble hybrid) ★★ | Arq. 6 (µStreamer) ★ | |
|---|---|---|---|
| RAM adicional | ~20-40 MB | ~65 MB (~20 nuevos) | ~10-20 MB |
| CPU streaming | ~10-15% | ~12-20% | ~3-8% (M2M HW) |
| Latencia vídeo | 100-300 ms | 100-300 ms (MJPEG) | ~50-100 ms (MJPEG) |
| Latencia audio | 200 ms (OGG) / 2 s (HLS) | ~200 ms (bridge) / ~20 ms (nativo) | ~200 ms (bridge) |
| Necesita ffmpeg | No | Solo audio bridge | Solo audio bridge |
| Audio Tor | ⚠️ TURN | ✔ Mumble TCP | ✔ Mumble TCP |
| Protocolos vídeo | MJPEG + HLS + WHEP | MJPEG + HLS (go2rtc) | MJPEG only |
| Reutiliza murmurd | ✘ | ✔ (+0 MB) | ✔ (+0 MB) |
| Código audio nuevo | ~50 lín config | ~100 lín bridge | ~100 lín bridge |
| Mantenimiento deps | Bajo | Medio (gumble+go2rtc) | Bajo |
| Caso de uso | Simple, sin Tor | General, LAN+Remoto+Tor | Ultra-ligero, solo LAN |
| Device | RPi 3B · BCM2837 · 1 GB LPDDR2 · VideoCore IV |
|---|---|
| OS stack | Yocto Poky 4.3.4 → Docker → Debian Bookworm |
| Energía | Solar 22W |
| App | Oasis :3000 (Node.js / SSB) · cero JS en browser |
| Audio base | murmurd :64738 (Mumble) · ya instalado · +0 MB |
| Restricción | Cero JavaScript en el browser del SNH servido por Oasis |