Construye tu propia tubería de transmisión de video en vivo: Guía práctica de FFmpeg × MediaMTX

Problema: La cámara habla a través de RTSP, pero el navegador no puede escuchar.

Supongamos que queremos mostrar imágenes en vivo desde cámaras de seguridad y dispositivos IoT en una aplicación web. La mayoría de las cámaras transmiten a través de RTSP (Protocolo de Transmisión en Tiempo Real). Sin embargo, los navegadores han dejado de soportar RTSP desde la década de 2010. En resumen, el problema fundamental es que “el idioma que habla la cámara” y “el idioma que entiende el navegador” son diferentes.

La traducción está a cargo de FFmpeg (el cuchillo suizo del procesamiento de video) y MediaMTX (servidor de conversión de protocolo). Combinando estos dos, se puede crear una pipeline de streaming de baja latencia de nivel profesional.

Explicación de herramientas

FFmpeg: la varita mágica para convertir cualquier formato de video

Flujo de procesamiento de FFmpeg:

  • Demultiplexor: Separar video y audio del contenedor
  • Decodificar: Convertir datos comprimidos en fotogramas sin procesar
  • Filtrado: aplicación de escalado, corrección de color, etc.
  • Codificación: comprimido en H.264 o VP9
  • Multiplex: empaquetado en el contenedor de salida

En aplicaciones de streaming, FFmpeg funciona como un motor de entrada. Captura video desde cámaras web o archivos, lo codifica de manera eficiente y lo envía al servidor a través de RTSP o RTMP.

MediaMTX: un hub de protocolo compatible con múltiples clientes

FFmpeg tiene una salida única, pero MediaMTX puede transmitir simultáneamente a múltiples clientes. Además:

  • Recepción a través de RTSP/RTMP/WebRTC/HLS
  • Reempaquetado para diferentes clientes
  • Convertir RTSP a WebRTC (reproducible en el navegador)
  • Autenticación, balanceo de carga, gestión de clientes

Con un solo binario y un archivo de configuración YAML, se pueden manejar escenas complejas que anteriormente requerían múltiples servidores dedicados.

Pasos de implementación

Paso 1: Instalar la herramienta

Ubuntu/Debian:

sudo apt update sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree make -j$(nproc) sudo make install

macOS:

brew install ffmpeg

Windows: Descarga de gydan.dev → Descomprimir en C:\ffmpeg → Agregar al PATH del sistema

También se instala MediaMTX v1.15.0 (fácil con un solo binario).

Paso 2: Transmitir archivo de video

Crear mediamtx.yml:

caminos: prueba_video: fuente: editor

Iniciar MediaMTX:

mediamtx mediamtx.yml

Envío de video a través de RTSP con FFmpeg:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re: Mantener la tasa de fotogramas (requerido para transmisión en vivo) -preset fast: equilibrio de velocidad de codificación

Verificar en VLC Media Player: Media → Abrir flujo de red → rtsp://localhost:8554/test_video

Paso 3: Transmitir en vivo con la cámara web

Windows:

ffmpeg -f dshow -rtbufsize 100M -i video=“Cámara web integrada” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

Linux:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatency es clave. Optimización de transmisión en tiempo real.

Paso 4: Reproducir en el navegador (WebRTC)

Actualizar mediamtx.yml:

webrtc: sí webrtcAddress: :8889 webrtcEncryption: no webrtcAllowOrigin: '*'}

caminos: cámara web: fuente: editor

Reinicie MediaMTX y abra http://localhost:8889 en el navegador → la transmisión en vivo se mostrará en el navegador.

Flujo de datos

  1. Cámara web → Generación de fotogramas en vivo
  2. FFmpeg → Codificación H.264 y emisión RTSP
  3. MediaMTX → Recepción RTSP y conversión WebRTC
  4. Navegador → Reproducción en tiempo real con WebRTC

MediaMTX no reencode. Solo empaqueta flujos H.264 en contenedores de diferentes protocolos. Por eso se logra baja latencia.

Resumen de esta vez

Pipeline básico completado:

  • FFmpeg y MediaMTX ya están instalados
  • Verificación de streaming de archivos de video y cámara web
  • Reproducción exitosa a través de WebRTC en el navegador

Solo hay desafíos en la operación en producción:

  • Sin autenticación ni seguridad
  • Solo funciona en localhost
  • Compatible con cámaras IP reales no
  • Sin manejo de errores

En la Parte 2, avanzaremos con la adición de autenticación, la conexión de cámaras IP y la compatibilidad con Internet.

Ver original
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Republicar
  • Compartir
Comentar
Añadir un comentario
Añadir un comentario
Sin comentarios
  • Anclado