Streaming SRT con FFmpeg: comandos y configuración

Comprobar el soporte SRT

FFmpeg debe haberse compilado con libsrt. Compruébelo así:

ffmpeg -protocols 2>/dev/null | grep srt

srt debe aparecer como protocolo de entrada y salida. Utilice una versión reciente de FFmpeg y SRT para beneficiarse de correcciones y métricas actuales.

Modo listener

En modo listener, FFmpeg abre un puerto UDP y queda a la escucha de una conexión:

ffmpeg -i "srt://:9000?mode=listener&latency=500000" \
  -c copy output.ts

La latencia de la URL de FFmpeg se expresa en microsegundos: 500000 equivale a 500 ms. Asegúrese de permitir el puerto UDP en el cortafuegos.

Modo caller

En modo caller, FFmpeg inicia la conexión hacia un listener remoto:

ffmpeg -re -i input.mp4 -c copy -f mpegts \
  "srt://gateway.example:9000?mode=caller&latency=500000"

El modo caller suele ser más sencillo detrás de NAT porque el emisor inicia la conexión.

Cifrado AES

SRT admite AES-128, AES-192 y AES-256. El emisor y el receptor deben utilizar exactamente la misma passphrase y longitud de clave:

ffmpeg -re -i input.mp4 -c copy -f mpegts \
  "srt://gateway.example:9000?mode=caller&latency=500000&pbkeylen=32&passphrase=UNA_FRASE_SEGURA"

No incluya secretos directamente en historiales, repositorios o logs de producción. Utilice su sistema de secretos para construir la URL en tiempo de ejecución.

Relay sin transcodificación

Para recibir SRT y reenviar otro flujo SRT conservando el video y el audio:

ffmpeg -i "srt://:9000?mode=listener&latency=500000" \
  -map 0 -c copy -f mpegts \
  "srt://destination.example:10000?mode=caller&latency=500000"

-map 0 conserva todas las pistas. -c copy evita pérdida de calidad y reduce la carga CPU, pero exige que el receptor acepte los códecs y la estructura recibidos.

Transcodificar HEVC a H.264

Ejemplo con Intel QSV:

ffmpeg -hwaccel qsv -i "srt://:9000?mode=listener&latency=500000" \
  -c:v h264_qsv -b:v 6M -c:a aac -b:a 192k -f mpegts \
  "srt://destination.example:10000?mode=caller&latency=500000"

Adapte el filtro, formato de píxel, GOP, audio y bitrate al receptor final. NVENC y VAAPI utilizan otros codificadores y opciones de FFmpeg.

Ajustar la latencia

Mida el RTT en condiciones reales y añada margen para la variación del retardo (jitter) y las retransmisiones. Una red local estable puede usar un búfer reducido; internet, las redes celulares o el satélite necesitan más. Vajracast muestra el RTT de cada extremo en tiempo real para facilitar el ajuste durante una producción en exteriores.

Una latencia demasiado baja provoca paquetes descartados; una demasiado alta añade retraso innecesario. Pruebe también durante congestión, no solo cuando la red está libre.

Diagnóstico

  • Tiempo de conexión agotado: compruebe la dirección, el puerto UDP, el modo listener y el cortafuegos.
  • Negociación rechazada: revise la passphrase, pbkeylen, el modo y el Stream ID.
  • Video corrupto: aumente latencia y compruebe pérdidas/retransmisiones.
  • Sin audio: inspeccione pistas con ffprobe y use -map explícito.
  • El receptor rechaza el TS: normalice las marcas de tiempo, PID, continuidad, GOP y cabeceras, o transcodifique cuando sea necesario.

Para operar varias fuentes, failover y destinos sin mantener procesos manuales, utilice una pasarela SRT gestionada.

Distribuya señales broadcast en vivo desde la nube

Plataforma gestionada en la nube con servidores dedicados, redundancia N+1, transcodificación por hardware y distribución global. Gratis durante 30 días.

Iniciar prueba gratuita Ver precios

30 días gratis · Sin tarjeta · Acceso directo al equipo de desarrollo