У меня проблемы с UdpClient в C#. Я передаю аудио через Интернет между двумя клиентами.
На моем микрофоне с частотой дискретизации 16 кГц я отправляю UDP-пакеты со звуком по 6400 байт на пакет. Они никогда не проходят, за исключением последнего пакета, который обычно составляет около 1200-3400 с чем-то, так как я закрываю запись. Когда я снижаю частоту дискретизации до 8 кГц, я отправляю пакеты с полезной нагрузкой 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 не пахнет для меня подозрительно, особенно с максимальным размером, что, 64 КБ?
Любые идеи?