Node.js 流式视频片段在倒带时会丢失已下载的片段
我已经设法以2mb的数据流传输视频,但我希望它在倒带时缓存(至少暂时缓存)已经下载的视频,但它开始从头开始下载。我可能会使用缓存npm包,但我认为一定有更好的方法 以下代码执行拆分和流式处理: 服务器端:Node.js 流式视频片段在倒带时会丢失已下载的片段,node.js,express,Node.js,Express,我已经设法以2mb的数据流传输视频,但我希望它在倒带时缓存(至少暂时缓存)已经下载的视频,但它开始从头开始下载。我可能会使用缓存npm包,但我认为一定有更好的方法 以下代码执行拆分和流式处理: 服务器端: app.get('/video', function (req, res) { const path = 'path_to_random_video.mp4' const stat = fs.statSync(path) const fileSize = stat.si
app.get('/video', function (req, res) {
const path = 'path_to_random_video.mp4'
const stat = fs.statSync(path)
const fileSize = stat.size
const range = req.headers.range
if (range) {
const parts = range.replace(/bytes=/, "").split("-")
const start = parseInt(parts[0], 10)
let end = parts[1]
? parseInt(parts[1], 10)
: fileSize - 1
if (start >= fileSize) {
res.status(416).send('Requested range not satisfiable\n' + start + ' >= ' + fileSize);
return
}
let chunksize = (end - start) + 1
var maxChunk = 2048 * 1024; // 2MB at a time
if (chunksize > maxChunk) {
end = start + maxChunk - 1;
chunksize = (end - start) + 1;
}
const file = fs.createReadStream(path, { start, end, autoClose: true })
const header = {
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
'Accept-Ranges': 'bytes',
'Content-Length': chunksize,
'Content-Type': 'video/mp4',
}
res.writeHead(206, header)
file.pipe(res)
}
}
客户端
<video id="videoPlayer" controls>
<source src="/video" type="video/mp4">
</video>