Korzystanie z Motion na Linuksie, każda kamera internetowa jest serwowana jako strumień na własnym porcie. Chciałbym teraz obsłużyć te strumienie, wszystkie na tym samym porcie, używając Node.js.Rura strumienia MJPEG za pośrednictwem proxy Node.js
- Edytuj: To rozwiązanie działa. Musiałem dostać ciąg brzegowy ze strumienia MJPEG oryginału (który był „BoundaryString” w moim filmie config)
app.get('/motion', function(req, res) {
var boundary = "BoundaryString";
var options = {
// host to forward to
host: '192.168.1.2',
// port to forward to
port: 8302,
// path to forward to
path: '/',
// request method
method: 'GET',
// headers to send
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);
// wait for data
cres.on('data', function(chunk){
res.write(chunk);
});
cres.on('close', function(){
// closed, let's end client request as well
res.writeHead(cres.statusCode);
res.end();
});
}).on('error', function(e) {
// we got an error, return 500 error to client and log error
console.log(e.message);
res.writeHead(500);
res.end();
});
creq.end();
});
Myślę ten serwuje strumień MJPEG/w 192.168.1.2:8302 jako ruch , ale tak nie jest. Może dlatego, że nigdy się nie kończy, a ten przykład proxy nie był tak naprawdę przykładem transmisji strumieniowej?
Można zamiast tego użyć opcji nginx. – david
To musi być rozwiązanie węzła. – skerit