node.js - 使用 nodejs 和 Express 进行视频流

标签 node.js html express

我正在尝试使用 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/

相关文章:

node.js - 将参数从服务器端传递到客户端 Node.js Express

php - 如何确定div的高度并在高度较大的div上设置边框?

javascript - 如何使用 addEventListener 使按钮将我的页面重定向到另一个页面?

javascript - 简单节点/Express 应用程序无法识别 session 存储

node.js - 如何在 Node js 中模拟 AWS QLDB

node.js - libxmljs "could not locate the bindings file"错误(Windows)

php - HTML 标签中的字符大小写

node.js - 在 Express 中捕获非法 JSON POST 数据?

json - Mongodb 聚合返回一个循环 Json 对象,而在 shell 中它返回一个 json?

javascript - 如何在主机入口域上创建 Node 应用程序监听?