Ich streame kleine Audiodateien von einem Raspberry Pi zu mehreren anderen Raspberry Pis. Die drahtlose Verbindung ist gut, der Durchsatz ist gut, der Ping/die Latenz ist gut.
Die Empfänger sehen wie folgt aus:
avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001
Wenn ich den Audiostream (mit -re) wie folgt sende:
avconv -re -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1
Das Ergebnis auf dem Receiver ist abgehackter Ton mit vielen dieser Geräusche:
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
Wenn ich den Audiostream (ohne -re zu verwenden) wie folgt sende:
avconv -i 1.wav -f mp3 -b:a 128K -vn udp://239.255.0.1:81?localaddr=192.168.0.1
Das Ergebnis auf dem Receiver ist ein ruckelnder Ton mit vielen dieser Geräusche:
[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
Wenn ich die Probesize am Empfänger erhöhe, ist der erste Ton, den ich abspiele, gut und nachfolgende Töne sind schlecht, weil die Probesize nur anfangs gilt.
Die eigentliche Frage: Wie kann ich avplay dazu bringen, die Eingabe kontinuierlich richtig zu puffern, sodass es nicht zu Unterläufen und Überlesungen/Überspringungen kommt?
Antwort1
Ich verwende jetzt:
avplay -probesize 32 -f mp3 -vn -i udp://239.255.0.1:8001?buffer_size=400000
Dies scheint zu helfen und ich glaube, dass alle weiteren Aussetzer auf Funkstörungen und die Tatsache, dass ich UDP verwende, zurückzuführen sind.