# C et C++ > C > Contribuez >  Mini serveur de diffusion audio

## berliozo37

Comme a m'a pris un certain temps, et que j'utilise des contributions diverses, je poste ici une contribution dont des bouts peuvent tre utiles  certains.

Par intrt, j'ai programm une plateforme de discussion, dsormais teste, qui marche bien avec 40 personnes.

Le principe: les n personnes parlent, et via JS/PHP, des fichiers audio wav sont progressivement crs sur le serveur (j'utilise wav, car non compress, et facile  manipuler).

Le serveur cre progressivement n fichiers audio de sorties (pour une personne i, on multiplexe les fichiers audio des autres personnes)

Le multiplexage est cod en C. Environ 50ms pour multiplexer 40 morceaux d'une seconde avec 40 personnes, donc suffisamment efficace.

Je ne mets pas les codes en question, mais si a intresse quelqu'un, il n'y a qu' demander.

Ensuite, chaque personne coute sur un port diffrent via un mini serveur https de diffusion (un serveur par personne, c'est plus simple. chaque mini-serveur consomme environ 0.3%CPU sur mon serveur OVH (Ubuntu 18.04). Originellement j'avais essay en PHP: ingrable, trop de consommation CPU.

La distribution audio se fait par injection rgulire de code JS qui transmets des morceaux encods en base64, car les balises audio html5 supportent ce genre de donnes.

Ici, le code du mini-serveur tourne sur un morceau "dat.wav" en cours de cration:



```

```

Il y a la ngociation SSL pour https, puis un envoi d'header dclarant un contenu faussement trs long, puis l'envoi des donnes JS (plus besoin d'header)


le fichier "ecouter.php" qui contient le code JS de traitement :



```

```



Notamment, vous pouvez rcuprer la partie passage en HTTPS (Dans la fonction adquate, il faut charger le certificat et la cl prive utilise pour votre domaine. Les emplacements sont dans les virtualhosts apache (ou autre)

Et penser  cette technique d'injection de JS, qui permet  peu prs tout.



EDIT: on utilise Opera (Excellent navigateur, trop mconnu. Le meilleur en gestion de JS) ou Chrome, qui grent plus efficacement le JS. FF et Edge sont plus lents, et il faut adapter le code JS.
La transition entre les chunks est encore un peu pourrie. Il faut que j'essaie d'autres techniques.

Bref, des trucs  rgler, mais le principe fonctionne sur tous les navigateurs

Et puis, je vais implmenter un transfert direct des morceaux audio du programme de multiplexage vers les mini-serveurs par pipe nomms, a sera plus efficace que des oprations disques videmment.

----------

