我在 C# 中遇到了 UdpClient 的问题。我正在两个客户端之间通过 Internet 流式传输音频。
在我的麦克风上,采样率为 16khz,我发送带有音频的 UDP 数据包,每个数据包 6400 字节。这些永远不会通过,除了最后一个数据包,自从我关闭录音以来,它通常在 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?
有任何想法吗?