Pelo que entendi, a questão principal está no processamento dos vídeos, certo?
Realmente, o processamento de vídeo em tempo real é uma tarefa computacionalmente intensiva. Para plataformas como o YouTube, por exemplo, o Google até desenvolveu seu próprio hardware ASIC para lidar com isso.
Existem algumas abordagens que você pode considerar para melhorar a eficiência do streaming:
-
Criar uma instância do FFmpeg para cada segmento, me parece ser um gargalo desnessário, pois a iniciliazação do mesmo é relativamente lenta. Neste caso aumentar os tamaho dos segmentos pode melhorar o desempenho, mas o ideal é um único comando processar todo o video do ínicio ao fim e usar segmentos menores.
-
Otimizar o comando FFmpeg: Revisar e otimizar seu comando FFmpeg pode fazer uma grande diferença. Reduzir a qualidade do vídeo, por exemplo, pode acelerar o processamento. É um trade-off que você precisaria avaliar.
-
Processamento em segundo plano: Uma abordagem muito comum neste cenário é processar os vídeos antecipadamente. Em vez de esperar um pedido para começar a processar, você poderia antecipar a demanda e já ter os segmentos prontos para serem entregues. Isso, no entanto, obviamente exigiria mais armazenamento.
-
Máquina mais poderosa e GPU: Por último, o desempenho do hardware pode ser o gargalo. Uma máquina mais poderosa ou uma GPU parruda certamente vai acelerar o processamento do FFmpeg. Em alguns casos, investir em hardware mais robusto pode ser uma solução necessária.