Se você não usa APIs do FFmpeg em seu código nativamente, você também pode chamar o ffmpeg para produzir qualquer resultado que desejar como um bytestream bruto. Por exemplo:
ffmpeg -i input -c:v mjpeg -f rawvideo -
O -
significa que a saída é enviada para stdout
. As mensagens de diagnóstico do ffmpeg serão enviadas para stderr
, como de costume. Você pode capturar essa saída em seu programa e transmiti-la via transmissão UDP simples para um servidor de escuta.
Para compactar ainda mais o seu fluxo, é claro que você não pode enviar imagem por imagem, mas compactar as imagens como um fluxo de vídeo H.264 bruto:
ffmpeg -i input -c:v libx264 -preset ultrafast -f rawvideo -
Você então analisaria o fluxo de entrada assim, onde -
é stdin
:
ffmpeg -f rawvideo -c:v h264 -i - output
É claro que você precisa descobrir como canalizar os dados corretamente. O ffmpeg também pode ler de pipes Unix.
Eu fiz algo similar sem o FFmpeg, usando as bibliotecas do codificador XviD em C ++ para produzir um fluxo de bits de vídeo, e depois enviá-lo UDP para outra máquina e analise a partir daí. É factível, mas depende de como sua pilha de rede se parece e quão sofisticada (e resistente a erros) ela precisa ser.