Estou transmitindo pequenos arquivos de áudio de um raspberry-pi para vários outros raspberry-pi. A conexão sem fio é boa, o rendimento é bom, o ping/latência é bom.
Os receptores ficam assim:
avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001
Quando envio o stream de áudio (usando -re) assim:
avconv -re -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1
O resultado no receptor é um áudio instável com muito disto:
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred0B f=0/0
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred0B f=0/0
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred0B f=0/0
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred0B f=0/0
ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred0B f=0/0
Quando envio o stream de áudio (sem usar -re) assim:
avconv -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1
O resultado no receptor é um áudio saltado com muito disto:
[mp3 @ 0x72501740] overread, skip -10 enddists: -7 -7 0B f=0/0
[mp3 @ 0x72501740] overread, skip -7 enddists: -5 -5
[mp3 @ 0x72501740] overread, skip -9 enddists: -6 -6 0B f=0/0
[mp3 @ 0x72501740] overread, skip -5 enddists: -1 -1 0B f=0/0
[mp3 @ 0x72501740] overread, skip -7 enddists: -2 -2
Se eu aumentar o tamanho da sonda no receptor, o primeiro som reproduzido será bom e os sons subsequentes serão ruins porque o tamanho da sonda só se aplica inicialmente.
A questão real: Como posso fazer com que o avplay armazene continuamente a entrada em buffer de maneira adequada, para que não ocorram subexecuções e sobreleituras/saltos?
Responder1
Agora estou usando:
avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001?buffer_size=400000
Isso parece ajudar e acredito que qualquer salto adicional se deva à interferência sem fio e ao fato de estar usando UDP.