# Guia CCTV: 16 camaras sin cortes

## Tu hardware

| Componente | Modelo | Notas |
|------------|--------|-------|
| TV Box | H313 4GB, 720p panel, WiFi AIC8800 | eros_p1 / ADT-3 rebrand |
| NVR | IP Pro AI-L 32ch, H.265, 256 Mbps | **IP: 192.168.1.108** (admin / admin123) |
| Camaras | Dahua 3MP WiFi + 2MP exterior PoE | WiFi 6 en domos |
| Almacenamiento box | eMMC interna | **No se usa tarjeta SD** |

## Arquitectura recomendada (max fiabilidad)

```
[Camaras PoE] ---> [Switch PoE] ---> [NVR Gigabit]
[Camaras WiFi] ---> [AP dedicado CCTV 5GHz] ---> [NVR]
                                              |
                                    [HDMI 4K al monitor principal]
                                              |
                                    [TV Box por ADB - vision remota/app]
```

### Regla de oro
**Para 16 camaras en una pantalla sin cortes, el NVR debe hacer el trabajo pesado**, no el TV box.

Opciones ordenadas por fiabilidad:

1. **HDMI directo del NVR al monitor** (mejor: 0 lag, mosaico nativo del NVR)
2. **TV Box con app Local** conectada al NVR por **WiFi 7** (5 GHz, sub-streams)
3. **Sub-streams unicamente** (D1/720p o 640x480) — nunca 16x main stream 3MP
4. Red WiFi dedicada CCTV si hay muchas camaras WiFi (reduce interferencia)

## Calculo de ancho de banda

| Escenario | Mbps aprox. | Viabilidad WiFi box (180 Mbps) |
|-----------|-------------|--------------------------------|
| 16 sub-streams H.265 ~512 kbps | ~8 Mbps | OK |
| 16 sub-streams ~1 Mbps | ~16 Mbps | OK |
| 16 main streams 2-3 Mbps | ~40-48 Mbps | Arriesgado + CPU no da |
| 16 main streams 4 Mbps | ~64 Mbps | No recomendado en H313 |

## Configuracion NVR (recomendada)

1. Activar **Sub-stream H.265** en todas las camaras
2. Sub-stream: **704x576 o 720p**, 10-15 fps, bitrate 512-768 kbps
3. Main stream: solo para grabacion, no para mosaico en box
4. En mosaico 4x4 (16 canales): usar **solo sub-stream**
5. Habilitar **VGA/HDMI simultaneos** del NVR si usas monitor dedicado

## Apps CCTV — cual usar? (actualizado)

| App | RAM | 9 cam mosaico H313 | NVR Dahua |
|-----|-----|---------------------|-----------|
| **Ojo RTSP** | ~30 MB | **4 cam fluidas** / 16 paginadas | Via RTSP directo |
| **DMSS** | ~350 MB | Lag / cortes con 9+ cam | Oficial pero pesada |
| **Vesta** | ~84 MB | Limitada | Parcial |

**Solucion aplicada:** Ojo RTSP con **4 cam/pagina** (paginacion 16 cam) o **4 cam fijas** en grid. Ver `Deploy-CctvRotate16.ps1`.

```powershell
# 16 cam paginadas (recomendado produccion)
.\deploy\Deploy-CctvRotate16.ps1 -DeviceIp 192.168.1.24:5555

# 4 cam fijas en grid (max fluido continuo)
.\deploy\Start-Cctv-Fluid.ps1 -DeviceIp 192.168.1.24:5555 -App Ojo -Profile tiny -KeepStreams
```

**Importante NVR:** sub-stream **H.264** (Ojo fuerza h264 en VLC), 704x576, 512 kbps, 10-15 fps. Sin esto el H313 no decodifica fluido.

## Despliegue definitivo: 16 cam paginadas (4 por pagina)

Configuracion recomendada para **ver las 16 cam sin lag** en H313:

```powershell
# Un comando — genera 4 paginas x 4 cam, kiosco + rotacion 20s
.\deploy\Deploy-CctvRotate16.ps1 -DeviceIp 192.168.1.24:5555

# Cambiar intervalo (ej. 15s por pagina = ciclo 60s)
# Editar CCTV_PAGE_SEC en deploy/nvr-config.env y redeploy
```

| Pagina | Canales NVR | Visible |
|--------|-------------|---------|
| 1 | 1–4 | 2×2 fluido |
| 2 | 5–8 | 2×2 fluido |
| 3 | 9–12 | 2×2 fluido |
| 4 | 13–16 | 2×2 fluido |

Ciclo completo 16 cam: **80 s** (con `CCTV_PAGE_SEC=20`).

Alternativas hardware (RK3566, S905X4, precios): [deploy/HARDWARE-ALTERNATIVAS.md](HARDWARE-ALTERNATIVAS.md)

## Modo FLUIDO (resultado verificado 2026-08-28)

**Problema raiz:** Ojo 6-10 cam = decodificacion software ~260% CPU = lag. OpenIPC necesita pista audio en RTSP.

**Solucion que funciona sin lag:**

```powershell
.\deploy\Start-Cctv-Fluid.ps1 -DeviceIp 192.168.1.24:5555 -App Ojo -Profile tiny -KeepStreams
```

| Parametro | Valor |
|-----------|-------|
| App | **Ojo RTSP** |
| Cams visibles | **4** (mosaico 2x2) |
| Resolucion | **352x288 @ 10fps** |
| Bitrate | **256 kbps/cam** |
| CPU box | **~62% user, 291% idle** |
| Veredicto | **FLUIDO** |
| Captura | `deploy-logs/fluid-Ojo-tiny.png` (1.3 MB) |

Alternativa HW decode (OpenIPC quad, ~75% CPU): `-App OpenIPC` — video en TV pero screencap negro (TextureView).

**En cliente NVR Dahua:** sub-stream **352x288 o 480x360, H.264 baseline, 256-384 kbps, 10-12 fps, max 4 cam simultaneas** o paginar 4 por pagina.

## Demo visible (recomendado para verificar en el TV)

Problema con pruebas anteriores: 10 camaras identicas de noche no permiten ver si hay cortes.

**Solucion:** `Start-Cctv-Demo.ps1` — 6 camaras con **calle en vivo (Wowza)**, recortes distintos, etiqueta **CAMn-LIVE** y **contador de tiempo** en cada celda. Si el contador se congela = corte.

```powershell
# Deja Ojo en mosaico 6 cam + streams activos — MIRA EL TV
.\deploy\Start-Cctv-Demo.ps1 -DeviceIp 192.168.1.24:5555 -KeepStreams

# Alternativa max fluido: OpenIPC quad (4 cam HW decode)
.\deploy\Start-Cctv-Demo.ps1 -DeviceIp 192.168.1.24:5555 -App OpenIPC -KeepStreams
```

Perfil: **704x576 @ 768 kbps** (sub-stream NVR Dahua recomendado). Resultado piloto 6 cam: **FLUIDO**.

Captura: `deploy-logs/demo-Ojo-6 cam.png`

## Prueba sin NVR — HD REAL (no testsrc)

Dos scripts: uno sintetico (referencia de carga) y uno con **camara RTSP publica en vivo**.

### Benchmark HD REAL (recomendado)

Fuente verificada con `ffprobe`: camara publica **1280x720 H.264** (`stream.strba.sk`, lago Vyhlad, Eslovaquia). Diez relays `ffmpeg -c:v copy` (sin patron de prueba) → MediaMTX → `adb reverse` → box.

```powershell
# Ojo + IPCam + OpenIPC quad — informe en deploy-logs/REAL-HD-BENCHMARK.md
.\deploy\Test-10Cam-RealHD.ps1 -DeviceIp 192.168.1.24:5555 -KeepStreams
```

**Resultado piloto 2026-08-28 (HD real 720p):**

| App | Cams | Veredicto | Captura |
|-----|------|-----------|---------|
| **Ojo RTSP** | 10 (3x4) | Lag leve | `deploy-logs/real-ojo-720p.png` |
| **RTSP IP-Cam Viewer** | 10 (grid 4 col) | Lag leve | `deploy-logs/real-ipcam-720p.png` |
| **OpenIPC Decoder** | 4 (quad HW) | Lag leve | `deploy-logs/real-openipc-quad-720p.png` |

Fuentes publicas probadas desde tu red: Strba **OK 720p**; Wowza **OK 480p**; Microsoft Virtual Camera 720p **timeout**; IPVM demo **DNS fail**; NVR 192.168.1.108 **timeout** (solo accesible en red cliente).

### Benchmark sintetico (carga equivalente NVR)

```powershell
.\deploy\Test-10Cam-HD.ps1 -DeviceIp 192.168.1.24:5555 -KeepStreams
```

Conclusión H313: **10 camaras HD 720p simultaneas no son fiables** (lag en las tres apps probadas). En cliente usar **6-8 cam max** a 720p, **mosaico paginado** (4-5 cam), o sub-stream **704x576 @ 512 kbps**.

Requisitos PC: JDK, ffmpeg, MediaMTX en `tools/mediamtx/`.

## Apps para comparar (H313 armeabi-v7a)

| App | Tamano | 10 cam HD | Notas |
|-----|--------|-----------|-------|
| **Ojo RTSP** | ~30 MB | Si (3x4) | Probada; **lag/cortes con 10x720p** |
| **RTSP IP-Cam Viewer** | ~3.6 MB | Si (grid N col) | ExoPlayer; prefs inyectables (`inject-ipcam-prefs.ps1`) |
| **Cams (vladpen)** | ~29 MB | — | **No instala** (APK F-Droid solo arm64) |
| **OpenIPC Decoder** | ~41 KB | Quad 4 cam | Instala en H313 armv7; HW MediaCodec; `inject-openipc-prefs.ps1` |
| **DMSS** | ~350 MB | Lag/cortes | Descartada para mosaico |

## Fix pantalla "agrandada"

Causa: forzar `density 240` agrandaba menus; solo el mosaico 16 se veia bien.
**Solucion:** `sys.display-size=1280x720` + **density nativa 160** (`wm density reset`).

### DMSS (alternativa Dahua)
A menudo mas estable con NVR Dahua IP Pro:
1. Abrir DMSS → Dispositivo → IP/Domain
2. IP NVR + credenciales
3. Vista multipantalla nativa

## Limites del TV Box H313

- CPU max: **1296 MHz** (no sube mas con ninguna ROM)
- Panel interno: **1280x720** (HDMI puede ser 4K pero UI/apps ven 720p)
- Decodificar 16 H.265 simultaneos es **limite del hardware** — usar sub-stream
- Conexion por **WiFi 7 Movistar** (sin Ethernet en tu instalacion)

## WiFi optimizado (ya aplicado)

- `wifi_sleep_policy=2` (WiFi nunca duerme con corriente)
- Scan WiFi en background desactivado
- Pantalla siempre encendida enchufada (`stay_on_while_plugged_in=3`)
- Conectado a 5 GHz (-16 dBm excelente, 180 Mbps enlace)

### Mejora adicional recomendada
- Conectar **cable Ethernet** del box al switch del NVR
- Camaras WiFi en SSID **CCTV** separado del WiFi domestico
- AP dedicado a 1-2 metros del NVR si hay muchas camaras WiFi

## Checklist antes de escalar a 6 dispositivos

- [ ] 16 camaras visibles 30 min sin freeze
- [ ] CPU < 80% durante mosaico (`cpu_monitor -c 500`)
- [ ] Temperatura < 75°C
- [ ] Vesta/DMSS abre tras reinicio (density 213 persiste via script)
- [ ] Ethernet probado si es posible
- [ ] Backup boot.img del dispositivo piloto

## Despliegue en mas dispositivos

```powershell
cd c:\xampp\htdocs\Android-super-accelerar-rom

# Dispositivo piloto (este)
.\deploy\Deploy-CctvBox.ps1 -DeviceIp 192.168.1.14:5555

# Cuando funcione, repetir en cada box:
.\deploy\Deploy-CctvBox.ps1 -DeviceIp 192.168.1.15:5555
.\deploy\Deploy-CctvBox.ps1 -DeviceIp 192.168.1.16:5555
# ... etc
```

Solo fix Vesta en un dispositivo:
```powershell
.\deploy\Deploy-CctvBox.ps1 -DeviceIp 192.168.1.20:5555 -AcceptVestaOnly
```
