Estou tentando transmitir áudio de um microfone usando o FFmpeg em uma rede para o VLC, mas não consegui obter a latência abaixo de meio segundo, o que é inaceitável para o meu propósito. Eu consegui transmitir vídeo bruto (do mesmo dispositivo de webcam) quase sem latência, então espero que seja possível fazer o mesmo com o áudio, já que há menos dados envolvidos.
Comando FFmpeg:
ffmpeg -f dshow -i audio="Microphone (2- Microsoft LifeCam VX-5000)" -f wav udp://127.0.0.1:12000
Saída do console:
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, dshow, from 'audio=Microphone (2- Microsoft LifeCam VX-5000)':
Duration: N/A, start: 1047373.188000, bitrate: N/A
Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
[wav @ 04fffba0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Output #0, wav, to 'udp://127.0.0.1:12000':
Metadata:
ISFT : Lavf57.36.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : Lavc57.40.100 pcm_s16le
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Estou recebendo isso em VLC com o caching definido para 10ms, mas o atraso real entre um som e o VLC é de meio segundo.
Além disso, se eu não iniciar o VLC tentando receber o fluxo antes de iniciar o fluxo do FFmpeg, ele não funcionará. Eu posso facilmente contornar este problema, mas parece um pouco estranho.
Existe alguma maneira de reduzir ainda mais a latência?