[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 -
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.
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:
- [C] boucle de lecture streaming audio
- Musique audio - Télécharger - Lecture & Playlists
- Streaming - Guide
- Realtek audio driver - Télécharger - Pilotes & Matériel
- Fast streaming - Accueil - Guide TV et vidéo
- Confirmation de lecture whatsapp - Guide
4 réponses
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.
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.
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.
Je trouve que c'est un peu de la bidouille mais bon je vais faire comme sa merci beaucoup.