Servidor RTMP usando ffmpeg

Me gustaría usar un Teradek Cube conectado a una cámara de transmisión para enviar a un servidor que ejecuta ffmpeg con un puerto RTMP abierto, y hacer que ffmpeg vuelva a transmitir esa transmisión a un decodificador usando RTMP o RTSP.

Monaserver hace esto, pero necesito duplicar esta funcionalidad usando ffmpeg. Yo usaría el Cube como servidor, excepto que podría estar transmitiendo en cualquier lugar, por lo que abrir puertos en cada ubicación a la que va la cámara no es una opción. Nuestro decodificador es un Teradek Slice. Cualquier otra sugerencia sobre cómo hacer esto sería muy apreciada.

¡Gracias!

Respuestas (1)

Puede usar FFmpeg como un servidor RTMP de la siguiente maneraffmpeg -f flv -listen 1 -i rtmp://localhost:1935/live/app -c copy rtsp://YOUR_RTSP_HOST

Notas:

  • -listen 1hace que FFmpeg actúe como un servidor RTMP cuando se usa con el protocolo RTMP
  • Úselo rtmp://localhost:1935/live/appcomo la URL del servidor RTMP en la fuente
  • Puede configurar cualquier ruta de reproducción rtmp://localhost:1935/any/thingy cualquier puerto
  • La principal ventaja de esta forma es la simplicidad, la desventaja es que el servidor se detiene si la fuente se detuvo o tuvo errores de codificación.
  • La otra opción es usar nginx con nginx-rtmp-module
Perfecto, mil gracias. Si me gustaría usar una aplicación como VLC para recibir la transmisión del servidor, ¿puede ffmpeg escuchar una conexión y enviarla también al puerto local 1935?
Sí, ffmpeg -f flv -listen 1 -i rtmp://localhost:8889/live/app -c copy -f flv -listen 1 rtmp://localhost:1935/live/appsolo configure diferentes puertos para entrada y salida
Gracias de nuevo, esto es exactamente lo que necesito. Mientras lo probaba, probé casi todas las combinaciones de /live/app en Teradek Cube y varias aplicaciones de transmisión de video RTMP de iOS para probar esto, y ffmpeg no responde mientras funciona monaserver. ¿Es 'aplicación' la clave y se debe incluir live en la URL del cliente?
¿Explicaría cómo configura las URL de RTMP en Cube, aplicaciones de iOS y Monaserver? ¿Abres los puertos requeridos? Puedes configurar cualquier ruta de juego/cualquier/cosa
Además, el servidor de entrada FFmpeg se inicia cuando recibe una transmisión y la salida se inicia cuando recibe una solicitud.
En las aplicaciones de transmisión de iOS, solo ingresé rtmp://serveraddress (con los puertos abiertos 1935 y 554) y monaserver conectado. En VLC, simplemente me conecté a la misma dirección. Algunas aplicaciones requerían un campo de clave de transmisión, que estaba activo de forma predeterminada. Cuando ffmpeg está escuchando, no importa qué URL se ingrese como entrada, no responde.
@Marware, ¿es correcto el doble -listen 1en su segundo comentario? El segundo se está aplicando a la URL de salida, por lo que creo que no tiene sentido iniciar un servidor de escucha... ¿Tal vez solo se duplica al copiar y pegar el comando?
@Piranna Correcto, debería serffmpeg -f flv -i rtmp://localhost:8889/live/app -c copy -f flv -listen 1 rtmp://localhost:1935/live/app
¿Puedes ser capaz de actualizar tu comentario con la corrección?
Además, ¿cómo es que estás aplicando -listen 1al segundo en lugar del anterior?