La arquitectura

Un hub. Un bus. Todo lo demás se suscribe.

El núcleo, cctv_hub, es un solo hilo epoll sobre llamadas de sistema, sin libc. Ingiere las cámaras por RTSP y reparte cada flujo a quien lo pidió. Nada más en el sistema habla con una cámara, y ningún suscriptor sabe qué hacen los demás.

Ingesta
8 cámaras · 16 flujos RTSP

Un flujo principal y uno secundario por cámara, traídos por el hub. Hoy Reolink; el driver de cada fabricante es un objeto compartido.

driveway
terrace
pergola  3.33:1
… 8 en vivo, 2 previstas
cctv_hub — el bus de eventos
un hilo epoll · sin libc · ~2,4% de un núcleo para 16 flujos

Cada fotograma, evento, comando y resultado pasa por aquí, y por ningún otro sitio. Hechos, órdenes y resultados viajan por el mismo protocolo documentado, y por eso añadir un consumidor nunca implica tocar la ruta de ingesta.

Grabador

Clips de evento activados por movimiento: margen previo, episodio, margen posterior, contiguos.

Detector

Detección de objetos en su propio equipo, con seguimiento de novedad: la presencia no es un evento.

Control de cámara

Un vocabulario neutral, con las formas de cada fabricante aisladas en un driver.

Vigilante

Una cámara apagada es un evento de primera clase con reglas de alarma, no un hueco que se descubre después.

También en la lista: el muro en vivo, la aplicación, el exportador, la consola — cada uno un proceso que pidió al bus lo que necesita. También lo que usted escriba.

Qué viaja por el bus

Fotogramas. Vídeo Annex-B, tal como llegó, a cada suscriptor que lo pidió.
Eventos. Movimiento, detecciones por clase, estado de cámara, progreso de trabajos. Se escriben en events.jsonl como registro consultable.
Comandos. Un vocabulario neutral — reinicio, PTZ, codificador, perfil de imagen — nunca la forma propia de un fabricante.
Resultados. Qué pasó con cada comando, como un evento sobre el que cualquiera puede actuar.

Medido, con la máquina en la que se midió

Huella de toda la pila en producción ~1.0 of 20 cores · <1 GiB QNAP TVS-h874 · 8 cam / 16 streams
Coste de ingesta del hub ~2.4% de un núcleo Misma máquina · 16 flujos RTSP
Latencia del bus, p95 0.064 ms · 0.210 ms TLS Loopback · compilación debug
Suelo de transporte UDS ~5× TCP loopback Sintético · tramas de 1 KB

Los valores absolutos dependen de la máquina: las proporciones viajan, los absolutos no. Cada cifra indica su máquina y su compilación para que pueda repetirla en la suya.

La pantalla de resumen: recuentos de eventos por clase en toda la instalación, generados del mismo índice de eventos que escribe el grabador. Render de diseño, no captura.
El mismo índice de eventos, para una persona · render de diseño