![libav - UDP 経由でオーディオをストリーミングすると、オーバーリードまたはアンダーランが発生する](https://rvso.com/image/1497481/libav%20-%20UDP%20%E7%B5%8C%E7%94%B1%E3%81%A7%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E3%82%92%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AA%E3%83%BC%E3%83%89%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%A2%E3%83%B3%E3%83%80%E3%83%BC%E3%83%A9%E3%83%B3%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B.png)
小さなオーディオ ファイルを 1 台の 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 を使用していることが原因であると考えています。