在linux上使用Motion,每个网络摄像头都会作为一个单独的流在其自己的端口上提供。现在我想使用Node.js将这些流全部在同一个端口上提供。
- 编辑:此解决方案现已可行。我需要从原始的MJPEG流中获取边界字符串(在我的Motion配置中是“BoundaryString”)
app.get('/motion', function(req, res) {
var boundary = "BoundaryString";
var options = {
// 要转发到的主机
host: '192.168.1.2',
// 要转发到的端口
port: 8302,
// 要转发到的路径
path: '/',
// 请求方法
method: 'GET',
// 发送的标头
headers: req.headers
};
var creq = http.request(options, function(cres) {
res.setHeader('Content-Type', 'multipart/x-mixed-replace;boundary="' + boundary + '"');
res.setHeader('Connection', 'close');
res.setHeader('Pragma', 'no-cache');
res.setHeader('Cache-Control', 'no-cache, private');
res.setHeader('Expires', 0);
res.setHeader('Max-Age', 0);
// 等待数据
cres.on('data', function(chunk){
res.write(chunk);
});
cres.on('close', function(){
// 关闭,同时结束客户端请求
res.writeHead(cres.statusCode);
res.end();
});
}).on('error', function(e) {
// 出现错误,向客户端返回500错误并记录错误
console.log(e.message);
res.writeHead(500);
res.end();
});
creq.end();
});
我认为这样服务于192.168.1.2:8302的MJPEG流将被提供为/motion,但实际上并没有。也许是因为它永远不会结束,并且这个代理示例并不是一个真正的流示例?