我正在尝试使用 nodejs 和 express 将视频流式传输到 html5 视频播放器。据我所知,很多人以前都这样做过,但是很少有人使用过 express(在我发现的内容中)。
大多数人说这样做:
var express = require('express');
var request = require('request');
var stylus = require('stylus');
var fs = require('fs');
var path = require('path');
var url = require('url');
var http = require('http');
var app = express();
app.use(stylus.middleware({
// Source directory
src: __dirname + '/assets/stylesheets',
// Destination directory
dest: __dirname + '/public',
// Compile function
compile: function(str, path) {
return stylus(str)
.set('filename', path)
.set('compress', true);
}
}));
app.enable('trust proxy');
// Routing to the user
app.use(express.static(__dirname + "/public"));
var server = require('http').createServer(app);
// var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.listen(port, function() {
console.log("Server is listening on port " + port.toString());
});
app.post('/playVideo', function(req, res) {
var video = req.query.video;
var file = path.resolve(__dirname,video);
var range = req.headers.range;
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
fs.stat(file, function(err, stats) {
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/avi"
});
var stream = fs.createReadStream(file, { start: start, end: end })
.on("open", function() {
stream.pipe(res);
}).on("error", function(err) {
res.end(err);
});
});
});
不幸的是,当我尝试这样做时,我无法获得 req.headers
对象。它是未定义的。我假设这是因为我正在使用 Express,尽管我不得不假设它仍然可以使用 Express。
如何使用 express 获取 header ?
谢谢!
最佳答案
我认为你应该使用中间件 body-parser
例子如下:
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
关于node.js - 使用 nodejs 和 Express 进行视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35388976/