J'ai des problèmes avec UdpClient en C#. Je diffuse de l'audio sur Internet entre deux clients.UdpClient - buffersize limité?
Sur mon micro, avec une fréquence d'échantillonnage de 16khz, j'envoie des paquets UDP avec de l'audio avec 6400 octets par paquet. Ceux-ci ne passent jamais, sauf le dernier paquet qui est habituellement autour de 1200-3400 quelque chose depuis que je ferme l'enregistrement. Lorsque je réduis la fréquence d'échantillonnage à 8 kHz, j'envoie des paquets avec une charge utile de 3200 octets. Ceux-ci passent toujours pour une raison quelconque.
Donc, fondamentalement, tout ce qui est au-dessus de 3200 est bousillé (n'a pas testé un nombre exact mais ...) pourquoi diable est-ce? Je pensais peut-être que le tampon interne UdpClient est trop petit ou quelque chose? Depuis que je stream flux audio est envoyé fréquemment.
RECEVOIR:
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());
}
}
Je ne peux trouver aucune faute évidente. (L'objet asyn à la fonction est null btw, je n'ai pas besoin d'utiliser un stateobject, mais cela ne devrait pas être lié à cela)
Je sais que le protocole UDP n'est pas fiable, mais étant donné que chaque paquet de taille 3200 passe à travers et pas 6400 odeurs de taille de poisson pour moi, surtout avec la taille maximale est ce que 64kb?
Des idées?
Avec le fait que ce trafic se passe sur Internet, cela ressemble à ce qui se passe. –
Pour développer cela, les paquets IP plus grands que le MTU seront fragmentés. Si tous les fragments arrivent à la destination, ils seront réassemblés dans le paquet IP d'origine (contenant le datagramme UDP d'origine) par la couche IP.S'ils n'arrivent pas tous, il n'y a pas de mécanisme dans UDP pour demander une retransmission, donc le datagramme entier sera perdu. – EJP
Merci, c'est clair maintenant! – KaiserJohaan