Kodaizen

Développement web & mobile

Streaming d’un fichier audio avec Node.js

audio studio

Commencez par créer un dossier pour votre projet et placez-y le fichier audio que vous souhaitez diffuser, par exemple, “music.mp3”. Assurez-vous d’avoir Node.js installé et le projet initialisé (npm init).

Cloner le dépôt :

git clone https://github.com/kodaizen/node-streaming.git

Créez un fichier JavaScript, par exemple “stream-server.js”, et ajoutez-y le code suivant :

var http = require("http");
const fs = require("fs");

http
  .createServer(function (req, res) {
    const filePath = "./music.mp3";
    const range = req.headers.range;
    const fileStat = fs.statSync(filePath);

    if (!range) {
      const fileStream = fs.createReadStream(filePath);
      res.writeHead(206, {
        "Content-Type": "audio/mpeg",
        "Content-Length": fileStat.size,
      });
      fileStream.pipe(res);
    } else {
      const parts = range.replace(/bytes=/, "").split("-");
      const start = parseInt(parts[0], 10);
      const end = parts[1] ? parseInt(parts[1], 10) : fileStat.size - 1;
      if (start >= fileStat.size) {
        res.writeHead(416, { "Content-Type": "text/html" });
        res.end(
          "Requested range not satisfiable\n" + start + " >= " + fileStat.size
        );
      }
      const chunksize = end - start + 1;
      const fileStream = fs.createReadStream(filePath, { start, end });

      res.writeHead(206, {
        "Content-Range": `bytes ${start}-${end}/${fileStat.size}`,
        "Accept-Ranges": "bytes",
        "Content-Length": chunksize,
        "Content-Type": "audio/mpeg",
      });
      fileStream.pipe(res);
    }
  })
  .listen(3000);

console.log("Serveur de streaming audio en cours d'exécution sur le port 3000");

Dans cet exemple, le serveur utilise le header “Range” pour déterminer la portion spécifique du fichier audio à renvoyer au client lors du streaming, en fonction des informations de plage (start et end) fournies dans ce header. Si le header “Range” n’est pas présent, le serveur renvoie le fichier audio dans son intégralité.

node stream-server.js

Ouvrez un navigateur et accédez à l’URL suivante : http://localhost:3000. Vous devriez pouvoir écouter le fichier audio en streaming.