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
ffprobey use-mapexplí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.
Plataforma gestionada en la nube con servidores dedicados, redundancia N+1, transcodificación por hardware y distribución global. Gratis durante 30 días.
30 días gratis · Sin tarjeta · Acceso directo al equipo de desarrollo