Comandos ffmpeg por Tipo de Cámara
═══ CSI: H.264 HW directo ═══
rpicam-vid -t 0 --width 1280 --height 720 --framerate 25 \
--codec h264 --profile baseline --level 3.1 \
--inline --listen -o tcp://127.0.0.1:8888
ffmpeg -f v4l2 -input_format h264 -video_size 1280x720 \
-framerate 25 -i /dev/video0 -c:v copy \
-f rtp rtp://127.0.0.1:5004
═══ USB: MJPEG → re-encode H.264 HW ═══
ffmpeg -f v4l2 -input_format mjpeg -video_size 1280x720 \
-framerate 25 -i /dev/video0 \
-c:v h264_v4l2m2m -b:v 1M -pix_fmt yuv420p \
-f rtp rtp://127.0.0.1:5004
═══ USB con H.264 HW integrado: passthrough ═══
ffmpeg -f v4l2 -input_format h264 -video_size 1280x720 \
-framerate 25 -i /dev/video0 -c:v copy \
-f rtp rtp://127.0.0.1:5004
Impacto en §2.1 — Formato de Entrega al Navegador
El formato al navegador (MJPEG, HLS) es el mismo con CSI o USB. Lo que cambia es el pipeline servidor.
| Formato entrega | Pipeline CSI | Pipeline USB | Δ CPU |
| MJPEG <img> |
rpicam-vid --codec mjpeg → HTTP |
ffmpeg -f v4l2 -input_format mjpeg -c:v copy → HTTP |
~0% (ambos nativos) |
| HLS <video> |
rpicam-vid --codec h264 → ffmpeg -f hls |
ffmpeg -f v4l2 mjpeg → h264_v4l2m2m → -f hls |
CSI ~5% · USB ~15% |
| HLS (USB H.264 HW) |
N/A |
ffmpeg -f v4l2 h264 → -c:v copy -f hls |
~3% |
Para Fase 3 (Internet) con HLS, CSI ahorra ~10% CPU vs. USB. En un dispositivo solar de 22W, esos ciclos de CPU se traducen en vatios.
Detección Automática del Tipo de Cámara
libcamera-hello --list-cameras
v4l2-ctl --list-formats-ext -d /dev/video0
Fase 0 automatiza la detección: el pipeline se configura solo según el resultado de hardware_detect.js.