【发布时间】:2020-01-15 12:43:27
【问题描述】:
我想通过 fs 模块在 node.js 中流式传输视频,我已经尝试了以下代码。
app.get('/video', function(req, res) {
const path = 'assets/sample.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);
const end = parts[1] ? parseInt(parts[1],10) : fileSize-1
const chunksize = (end-start)+1
const file = fs.createReadStream(path, {start, end})
const head = {
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
'Accept-Ranges': 'bytes',
'Content-Length': chunksize,
'Content-Type': 'video/mp4',
}
res.writeHead(206, head)
file.pipe(res)
} else {
const head = {
'Content-Length': fileSize,
'Content-Type': 'video/mp4',
}
res.writeHead(200, head)
fs.createReadStream(path).pipe(res)
}
})
我的视频“sample.mp4”大小为:1055736 字节,即 1 MB。但是当我运行代码时,我发现在启动时 start 变量是 0,end 变量是 1055735 & chunksize 是 1055736。如果你查看 Content-Range 标题,这将等于开始时的低于值。
内容范围:'字节 0-1055735/1055736'
我想一个接一个地流式传输我的视频,而不是等待整个视频加载。但我认为上面的代码不会做同样的事情。
谁能告诉我,这段代码对于视频流是否正确?
提前致谢!
【问题讨论】:
-
我想
req.headers.range === "bytes=0-"? -
对不起?你的回答不够清楚。
-
这不是答案。也许是一个提示,但不是答案。这是一个问题。那么请求头
Range等于"bytes=0-"吗?
标签: javascript node.js