[C] boucle de lecture streaming audio

Fermé
Onkas81 Messages postés 9 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 19 mai 2009 - 7 janv. 2009 à 10:08
Onkas81 Messages postés 9 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 19 mai 2009 - 7 janv. 2009 à 14:57
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 janv. 2009 à 12:28
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 vendredi 21 mars 2008 Statut Membre Dernière intervention 19 mai 2009
7 janv. 2009 à 13:23
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 janv. 2009 à 14:14
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 vendredi 21 mars 2008 Statut Membre Dernière intervention 19 mai 2009
7 janv. 2009 à 14:57
D'accord merci beaucoup en tout cas.
0