es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo compartir el codificador ffmpeg con aplicaciones independientes?

Necesito compartir un codificador ffmepg con aplicaciones de cliente independientes dentro de la misma máquina.

Intenté usar multicast UDP pero tengo múltiples pérdidas de paquetes (no entiendo cómo ocurre esto dentro de la misma máquina).
Por ejemplo:

Codificador: ffmpeg -i -c:v -c:a \
-f mpegts udp://@239.192.1.1:1234&pkt_size=1316

Transmisor 1: ffmpeg -i udp://@239.192.1.1:1234 -c copy -f flv rtmp://
Transmisor 2: ffmpeg -i udp://@239.192.1.1:1234 -c copy -f mpegts srt://

También he intentado RTP pero tengo problemas de sincronización de audio y video.

No puedo usar múltiples salidas de ffmpeg porque los transmisores son desconocidos en el momento de inicialización y comienzan y detienen completamente independientemente del codificador.
¿Alguna idea de cómo implementar esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Existen varias soluciones posibles para compartir un codificador ffmpeg con aplicaciones cliente independientes en la misma máquina.

    En primer lugar, puedes considerar utilizar un tubo con nombre (también conocido como FIFO) para comunicar datos entre el codificador y las aplicaciones cliente. Esto implica crear un archivo especial en el sistema de archivos que actúa como un tubo, permitiendo que los datos se pasen entre procesos. El codificador puede escribir su salida en el tubo y las aplicaciones cliente pueden leer desde el tubo. Este enfoque puede ser más eficiente que el uso de protocolos de red como UDP, ya que los datos nunca abandonan la máquina y no tienen que pasar por la pila de red.

    Otra opción es utilizar un socket de dominio Unix en lugar de un socket de red. Similar al tubo con nombre, un socket de dominio Unix permite que varios procesos se comuniquen entre sí dentro de la misma máquina. Esto puede ser más eficiente y confiable que el uso de UDP, ya que hay menos sobrecarga involucrada.

    Alternativamente, puedes considerar el uso de una cola de mensajes o un sistema de intermediarios como RabbitMQ o Apache Kafka para coordinar la comunicación entre el codificador y las aplicaciones cliente. En este escenario, el codificador publicaría su salida en la cola de mensajes y los clientes se suscribirían a la cola para recibir actualizaciones. Este enfoque puede ser más escalable y flexible que el uso de tubos con nombre o sockets, ya que puede manejar múltiples clientes y permite la comunicación asíncrona.

    En general, el mejor enfoque dependerá de tu caso de uso y requisitos específicos. Puede que desees experimentar con diferentes opciones y medir su rendimiento y confiabilidad para determinar qué funciona mejor para ti.

Comments are closed.