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

Reply via email to