cs_eikichi
Messages postés9Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention 9 mai 2011
-
25 avril 2007 à 12:37
cs_couco
Messages postés2Date d'inscriptionmercredi 17 mars 2004StatutMembreDernière intervention26 avril 2007
-
26 avril 2007 à 15:51
Bonjour a tous,
Je cherche à transférer un flux audio en utilisant des sockets en UDP.
Le flux est déjà subdivisé en plusieurs petits paquets UDP que j'envoie
en permanence du Client vers le Serveur, les données envoyées sont de
type byte[].
Cependant je me demande si les objets Datagrampacket peuvent être
identifiés par un numéro de séquence (méthode renvoyant le num du
paquet) ou si je dois moi-même donner un numéro de séquence (en byte
toujours) pour chaque paquet transmis, dans ce cas comment puis-je
fusionner deux arrays byte[] (un pour le numéro de séquence et un pour
les données audio) dans un seul que je transmettrai dans le
Datagrampacket?
Merci d'avance pour vos réponses.
Si jamais voilà le bout de code pour l'applic client:
tout se passe dans la classe audioInputBlockReady qui reçoit ce bout de
flux audio (inputbuffer) et qui le convertit en paquet UDP.
public void audioInputBlockReady(AudioThread audiothread, byte[] inputbuffer){
/*
* TODO
*
* When the AudioThread is running, this method is periodically called
* by the AudioThread to indicate that new block of audio data is ready.
* Note that this method is actually executed within the AudioThread
* thread - don't forget to synchronize your objects.
*
* Imagine you are using audio block of 800 bytes (=400 samples). Since
* we are sampling at 8000 samples per second (given by AudioThread),
* such a block would correspond to 50 ms. Hence, this method would be
* called 20 times per second with an "inputbuffer" containing 800
* bytes.
*
* In this method you may process, package and send these samples. Note
* that you should not use the inputbuffer object outside of this
* function. If you want to send its contents in a UDP datagram, for
* instance, you should rather copy the buffer to a new buffer, i.e.
pour le reste il te faut changer ton code et envoyer des paquets régulier soit :
toutes les :
10 ms la voix fait 80 octets + 12 octets de header soit un paquet de 92 octets
20 ms la voix fait 160 octets + 12 octets de header soit un paquet de 172 octets
30 ms la voix fait 240 octets + 12 octets de header soit un paquet de 252 octets
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_eikichi
Messages postés9Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention 9 mai 2011 25 avril 2007 à 14:41
Merci pour le conseil ça paraît plus propre qu'avec la méthode classique, mais malheureusement on m'impose les Sockets, le prog sera une sorte de Skype-like. Mais la fin de ton listing va beaucoup me servir, au fait ça me fait venir à une autre question: un Datagrampacket c'est juste un tableau de bytes en fait rien de plus donc si je veux rajouter des en-têtes genre numero de sequence, ip source/destination, ports, etc... c'est à moi de les implémenter?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 25 avril 2007 à 15:18
Salut,
RTP reste sur UDP
Concernant ta questrion, oui tu dois mettre toi meme le CSEQ, pour ce qui est de l'ip src/dest et des port c'est dans la couche IP donc tu n'as pas à les rajouter.
Pour ce qui et de skype il passe la voix sur RTP.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."