我的目录中有几个 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。
对于我做错了什么有什么想法吗?