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.