libav - 通过 UDP 传输音频会导致读取过度或不足

libav - 通过 UDP 传输音频会导致读取过度或不足

我正在将小型音频文件从一台 raspberry-pi 传输到其他几台 raspberry-pi。无线连接良好,吞吐量良好,ping/延迟良好。

接收器如下所示:

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

当我像这样发送音频流(使用 -re)时:

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

接收器上的音频出现断断续续的情况,并出现大量此类情况:

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 

当我发送音频流(不使用-re)时,如下所示:

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

接收器上的音频出现跳跃现象,并出现很多以下情况:

[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

如果我增加接收器上的探测大小,我播放的第一个声音是好的,而后续的声音是坏的,因为探测大小仅在最初适用。

实际问题是:如何让 avplay 正确连续地缓冲输入,以免发生欠载和过度读取/跳过?

答案1

我现在正在使用:

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

这似乎有帮助,我相信任何进一步的跳过都是由于无线干扰和我正在使用 UDP 的事实造成的。

相关内容