【发布时间】:2015-10-28 22:44:05
【问题描述】:
当用户请求 .mp4 时,我的 Node.js 服务器有时会收到错误消息,告诉我 req.headers.range 未定义(我没有尝试提供任何其他视频文件类型,不确定 mp4 是否相关)。我不明白为什么缺少此标头。
视频的请求标头是否有时应排除range?
我这样发送流:
var videoReqHandler = function(req, res, pathname) {
var file = dirPath + "/Client" + pathname;
var range = req.headers.range;
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
fs.stat(file, function(err, stats) {
if (err) {
throw err;
} else {
var total = stats.size;
var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
var chunksize = (end - start) + 1;
res.writeHead(206, {
"Content-Range" : "bytes " + start + "-" + end + "/" + total,
"Accept-Ranges" : "bytes",
"Content-Length" : chunksize,
"Content-Type" : "video/mp4"
});
var stream = fs.createReadStream(file, {
start : start,
end : end
}).on("open", function() {
stream.pipe(res);
}).on("error", function(err) {
res.end(err);
});
}
});
};
错误:
/video_stream.js:21
var positions = range.replace(/bytes=/, "").split("-");
TypeError: Cannot call method 'replace' of undefined
【问题讨论】:
标签: javascript node.js video