Emettre un flux audio en direct

a marqué ce sujet comme résolu.

Bonsoir,

Je cherche à faire en sorte que des les utilisateurs puissent recevoir un flux audio et l’écouter en simultané sur navigateur (http://site.com/flux comme source de l’audio dans le tag html par exemple) via nodejs, pour cela il faudrait que côté serveur differentes sources (Fichier mp3) soit automatiquement diffusées.

A la manière des webradio: https://www.internet-radio.com/

J’ai fais plein de recherches, mais tout ce que j’ai trouvé semble très compliqué, ou alors totalement à côté de la plaque, comme:

https://medium.com/@richard534/uploading-streaming-audio-using-nodejs-express-mongodb-gridfs-b031a0bcb20f

https://stackoverflow.com/questions/24976123/streaming-a-video-file-to-an-html5-video-player-with-node-js-so-that-the-video-c

Ceci me semble être ce que je cherche: https://www.npmjs.com/package/websockets-streaming-audio, mais je ne comprend pas grand chose (Et ce n’est pas du tout expliqué).

Je cherche si elle existe la solution la plus simple. J’ai vu qu’il était possible de le faire avec socket.io, mais ça me semble absurde (Et toujours compliqué), je me trompe peut être ?

Avez vous des pistes ? Existe-il une manière simple de le faire ?

Merci d’avance pour vos réponses.

+0 -0

Tu connais le HLS ? Ça te permettrait de faire un flux audio (ou même vidéo) en live sans avoir besoin de websockets. Le principe et de générer à la volée (puisque c’est du direct) plein de petits fichiers audio qui vont être téléchargés et joués par le client (sans interruption entre eux).

Pour que le client sache ce qu’il doit télécharger et jouer et dans quel ordre, il demande périodiquement (puisque c’est du live) un manifeste (fichier m3u8) qui est mis à jour aussitôt qu’un nouveau fichier audio est généré et prêt à être diffusé.

En fait, cette méthode déplace toute l’intelligence côté client, puisque côté serveur il suffit alors de servir des fichiers statiques. Côté client, il faudra trouver une lib JavaScript qui saura gérer le HLS ou le coder soi-même (pas très difficile).

C’est utilisé par certaines Web radio ainsi que pour du flux vidéo en live, comme sur Twitch par exemple.

Tu connais le HLS ? Ça te permettrait de faire un flux audio (ou même vidéo) en live sans avoir besoin de websockets. Le principe et de générer à la volée (puisque c’est du direct) plein de petits fichiers audio qui vont être téléchargés et joués par le client (sans interruption entre eux).

Pour que le client sache ce qu’il doit télécharger et jouer et dans quel ordre, il demande périodiquement (puisque c’est du live) un manifeste (fichier m3u8) qui est mis à jour aussitôt qu’un nouveau fichier audio est généré et prêt à être diffusé.

En fait, cette méthode déplace toute l’intelligence côté client, puisque côté serveur il suffit alors de servir des fichiers statiques. Côté client, il faudra trouver une lib JavaScript qui saura gérer le HLS ou le coder soi-même (pas très difficile).

C’est utilisé par certaines Web radio ainsi que pour du flux vidéo en live, comme sur Twitch par exemple.

sgble

Merci beaucoup ! Je vais faire des recherches là dessus, ça semble correspondre parfaitement à ce que je cherche à faire.

J’avais déjà essayé une méthode similaire où le serveur coupait l’audio au fur et à mesure en part de 1 secondes, et le client n’avait qu’à actualiser la source de l’audio toute les secondes pour écouter chaque bouts. Mais c’était saccadé et c’est une technique bancale.

S’il n’est pas question de diffusion en direct : Pourquoi ne pas simplement jouer une vidéo YouTube en utilisant la lib js pour la jouer en simultané ? 🤔

A-312

Ça ne répond pas à ma demande.

Une petite info pour la prochaine fois : au lien d’indiquer le thème du sujet avec des acollades comme « [node.js] », il y a la possibilité d’utiliser les tags comme « nodejs » et « javascript ».

Helmasaur

C’est corrigé, merci.

Une autre piste à analyser peut-être: installer un serveur icecast ou shoutcast, et se connecter au serveur depuis node.js en tant que source.

C’est peut-être plus simple, ça dépend aussi de comment l’audio est généré (est-ce que tu crées des fichiers ou une playlist, ou bien est-ce que c’est du véritable direct ?), si tu prévois de diffuser quelque chose en attendant au cas où tu ne fais pas du direct H24, etc.

L’avantage de icecast/shoutcast c’est que tu peux gérer plusieurs sources, ajouter un jingle, ajouter des métadonnées, gérer les priorités (utile pour switcher sur le flux de direct dès que tu commences à diffuser), limiter la bande passante pour éviter de trop surcharger le réseau, et plein d’autres choses bien pratiques.

L’intérêt aussi, c’est que tu rends la diffusion indépendante des sources. Si demain tu changes le truc qui génère ton audio, par exemple tu passes de node.js à python, tu n’auras pas à reprogrammer la gestion de la diffusion.

Dans ce cas, le client est stupide: pas de développement côté client, la plus simple des balises <audio> fait l’affaire. Tu ne fais qu’un développement du côté du serveur.

JE suis sûr qu’il y a des lib node.js qui implémentent déjà le protocole de diffusion de icecast et/Ou shoutcast. Petit bonus, icecast est un logiciel libre.

+0 -0

Une autre piste à analyser peut-être: installer un serveur icecast ou shoutcast, et se connecter au serveur depuis node.js en tant que source.

QuentinC C’est ce que j’ai fait il y a quelques temps et il faudrait que j’écrive un article sur Zeste de Savoir à propos de mon périple !

Par ailleurs, il est à noter qu’avec cette solution, il faut forcément un serveur et non seulement des fichiers.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte