libav: la transmisión de audio a través de UDP da como resultado lecturas excesivas o insuficientes

libav: la transmisión de audio a través de UDP da como resultado lecturas excesivas o insuficientes

Estoy transmitiendo pequeños archivos de audio desde una raspberry-pi a varias otras raspberry-pi. La conexión inalámbrica es buena, el rendimiento es bueno, el ping/latencia es bueno.

Los receptores se ven así:

avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001

Cuando envío la transmisión de audio (usando -re) de esta manera:

avconv -re -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1

El resultado en el receptor es un audio entrecortado con mucho de esto:

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 

Cuando envío la transmisión de audio (sin usar -re) de esta manera:

avconv -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1

El resultado en el receptor es un audio entrecortado con mucho de esto:

[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

Si aumento el tamaño de la sonda en el receptor, el primer sonido que reproduzco es bueno y los sonidos posteriores son malos porque el tamaño de la sonda solo se aplica inicialmente.

La pregunta real: ¿Cómo puedo hacer que avplay almacene continuamente en buffer la entrada correctamente para que no se produzcan insuficiencias de datos ni sobrelecturas/saltos?

Respuesta1

Ahora estoy usando:

avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001?buffer_size=400000

Esto parece ayudar y creo que cualquier salto adicional se debe a interferencias inalámbricas y al hecho de que estoy usando UDP.

información relacionada