C#のUdpClientで問題が発生しています。2つのクライアント間でインターネット経由でオーディオをストリーミングしています。
私のマイクでは、16kHzのサンプルレートで、パケットあたり6400バイトの音声付きのUDPパケットを送信します。録音を閉じてから通常1200〜3400程度の最後のパケットを除いて、これらは決して通過しません。サンプルレートを8kHzに下げると、3200バイトのペイロードでパケットを送信します。これらは常に何らかの理由で通り抜けます。
それで、基本的に3200を超えるものはすべて失敗します(正確な数はテストされていませんが...)なぜこれが地球上にあるのでしょうか?おそらくUdpClientの内部バッファが小さすぎるか何かだと思っていましたか?オーディオパケットをストリーミングするので、頻繁に送信されます。
受け取る:
private void audioReceive(IAsyncResult asyn)
{
try
{
byte[] temp = audioSock.EndReceive(asyn, ref this.serverEP);
this.waveProvider.AddSamples(temp, 0, temp.Length);
this.textbox_display.Text = this.textbox_display.Text + " got bytes: " + temp.Length;
audioSock.BeginReceive(new AsyncCallback(audioReceive), null);
}
catch (Exception ez)
{
MessageBox.Show("audioReceive: " + this.textbox_nick.Text + " " +ez.ToString());
}
}
明らかな欠点は見つかりません。(関数のasynオブジェクトはnullですが、stateobjectを使用する必要はありませんが、これに関連する必要はありません)
UDPは信頼できないことは知っていますが、3200サイズのパケットがすべて通過し、6400サイズが私には不快な臭いがしないことを考えると、特に最大サイズは64kbですか?
何か案は?