[C] boucle de lecture streaming audio

Onkas81 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
Onkas81 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Salut tout le monde,
J'ai un petit problème concernant mon programme qui est sensé envoyer un fichier wave en multicast avec rtp.
Je reçois bien le fichier et j'arrive à le lire car mon buffer est infini mais le problème est qu'il envoie "à la vitesse de la machine" alors que j'aimerais l'envoyer selon son débit wave en octets par seconde.

Voilà ma boucle d'envoi:

infos:
TAILLE_BLOC est égal à 512o
data c'est ce que j'envoi
runcond -> la condition de boucle de lecture (pour pouvoir stopper la lecture)
j'envoie en rtp avec un time stamp: user_ts
auquel je rajoute adding_time_user_ts à chaque envoi de paquet
(adding_time_user_ts=1000*Taille_bloc/débitwave) (pour avoir un rajout en millisecondes)

while( ((i=fread(data,1,TAILLE_BLOC,fic))>0) && (runcond) )
{
/* envoie des données en rtp */
rtp_session_send_with_ts(session,data,i,user_ts);
/* gestion du timestamp */
user_ts+=adding_time_user_ts;
}

Voilà j'espère que vous pourrez m'aider.
A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
utilise la fonction C time() qui mesure le temps d'exécution.
chaque envoi fait par rtp_session_send_with_ts, fait un envoie qui représente "a" secondes de chanson.
Il suffit d'attendre ce temps soit écouler pour continuer l'envoie. Avec peut être une petite marge de sécurité.
while( ((i=fread(data,1,TAILLE_BLOC,fic))>0) && (runcond) )
{
/* envoie des données en rtp */
rtp_session_send_with_ts(session,data,i,user_ts);
t1=time();
/* gestion du timestamp */
user_ts+=adding_time_user_ts;
while(t2-t1<a)
{sleep(30);t2=time();}
}

Ou un truc dans le genre.
0
Onkas81 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
C'est comme sa que l'on fait quand on fait du streaming?
Je trouve que c'est un peu de la bidouille mais bon je vais faire comme sa merci beaucoup.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Sinon, tu peux synchroniser avec les clients, en envoyant les données suivantes que lorsqu'il le demandent.
0
Onkas81 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
D'accord merci beaucoup en tout cas.
0