Я передаю аудио, извлеченное из корзины Gridfs, на html-аудио элемент клиента через экспресс-сервер по частям, когда они становятся доступными. Edge и Firefox загружают и буферизируют песню и позволяют мне искать буферизованную песню, в то время как chrome, похоже, не буферизует ее, а загружает фрагменты последовательно (я, вероятно, ошибаюсь).
Сторона сервера:
trackRoute.get('/:trackID', (req, res) => {
try{
var trackID = new ObjectID(req.params.trackID);
}
catch(err){
return res.status(400).json({ message:" :Invalid trackID in URL parameter. Must be a single String of 12 bytes or a string of 24 hex characters" });
}
res.set('content-type', 'audio/mp3');
res.set('accept-ranges', 'bytes');
res.set('Transfer-Encoding', 'chunked');
let bucket = new mongodb.GridFSBucket(db,
{
bucketName: 'songs'
}
);
let downloadStream = bucket.openDownloadStream(trackID);
// downloadStream.pipe(res);
downloadStream.on('data', (chunk) => {
res.write(chunk);
});
downloadStream.on('error', (err) => {
res.sendStatus(404);
});
downloadStream.on('end', () => {
res.end();
});
// let readableSongStream = fs.createReadStream("C:\\Users\\Sajeel\\Music\\Demons - Imagine Dragons.mp3");
// readableSongStream.pipe(res);
});
СЕТИ СЕТЕЙ
Chrome:
Занимает 2,3 минуты и все еще не позволяет мне искать песню, пока вся песня не будет проиграна
Firefox:
131ms
Край:
1.09s