Hi,
We are writing a script that reads a large set of JPG files on our server
(infinite, since we have another process that keeps writing JPG files to
the same directory) and send them to users' browsers as an MJPEG stream at
fixed time interval (variable "frameDelay" in code below). This is similar
to what an IP camera would do.
We found two separate issues with this seemingly simple script:
(1) the memory usage of this script keeps going up and always ends up being
killed by the system (Ubuntu);
(2) setInterval () doesn't seem to work - the script sends JPG files at a
much faster rate than 1000/frameDealy (for example, when frameDelay is set
to 40, meaning 25 frames/sec, it actually sends about 70 frames/sec).
It's possible that they were caused by our mistakes in the code, but we
have inspected this seemingly simple script many many times ;-( Therefore
I'm posting the code below. Any comments / suggestions are greatly
appreciated!
===================================================
....(removed some code here)......
app.get('/stream', function (req, res) {
res.writeHead(200, {
'Content-Type':'multipart/x-mixed-replace;boundary="' + boundary +
'"',
'Transfer-Encoding':'none',
'Connection':'keep-alive',
'Expires':'Fri, 01 Jan 1990 00:00:00 GMT',
'Cache-Control':'no-cache, no-store, max-age=0, must-revalidate',
'Pragma':'no-cache'
});
res.write(CRLF + "--" + boundary + CRLF);
setInterval(function () {
if(fileList.length<=1){
fileList = fs.readdirSync(location).sort();
}else{
var fname = fileList.shift();
if(fs.existsSync(location+fname)){
var data = fs.readFileSync(location+fname);
res.write('Content-Type:image/jpeg' + CRLF +
'Content-Length: ' + data.length + CRLF + CRLF);
res.write(data);
res.write(CRLF + '--' + boundary + CRLF);
fs.unlinkSync(location+fname);
}else{
console.log("File doesn't find")
}
}
console.log("new response:" + fname);
}, frameDelay);
});
app.listen(port);
console.log("Server running at port " + port);
===========================================
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en