如何在nodejs中流式传输一组mp3文件?

问题描述 投票:0回答:0

我的目录中有几个 mp3 文件,我想一个接一个地进行流式传输,以便浏览器 (a) 立即开始播放音频并继续播放所有 mp3,直到我关闭响应流。 (意图是一个端点,其功能类似于播放列表 mp3 流。)

这是我的代码:

import express from 'express';

const app = express();

function startServer() {
  const port = process.env.PORT || 3000;
  app.listen(port, () => {
    console.log(`Server is running on port ${port}`);
  });
}

app.get('/stream', (req, res) => {
  const mp3Files = fs.readdirSync('.').filter(file => file.endsWith('.mp3'));
  let i = 0;

  res.setHeader('Content-Type', 'audio/mpeg');
  res.set('Transfer-Encoding', 'chunked');

  function sendFile() {
    const mp3File = mp3Files[i];
    console.log(`processing ${mp3File}`);
    const fileStream = fs.createReadStream(mp3File);
    fileStream.on('data', (chunk) => {
      res.write(chunk);
    }).on('end', () => {
      i++;
      if (i < mp3Files.length) {
        sendFile();
      } else {
        res.end();
      }
    });
  }
  sendFile();
});

startServer();

我可以确认所有 mp3 文件都已处理,但浏览器仅播放第一个文件中的音频。需要明确的是,我在客户端根本没有做任何事情 - 我只是将 Chrome 指向 Express API 端点。

我希望获得与将 Chrome 指向任何其他(工作)流音频 URL 相同的结果,例如 https://audio1.maxi80.com

对于我做错了什么有什么想法吗?

node.js audio-streaming
© www.soinside.com 2019 - 2024. All rights reserved.