|
var lame = require('lame'); |
|
var http = require('http'); |
|
// var Readable = require('stream').Readable; |
|
|
|
|
|
var clients = {}; |
|
|
|
function writeBits(readable) { |
|
for (var i = 0; i < 100; i++) { |
|
readable.push(new Buffer()) |
|
|
|
} |
|
} |
|
|
|
var makeclientstore = function () { |
|
var store = {}; |
|
var counter = 0; |
|
|
|
function storeClient(rr) { |
|
console.log("counter is ", counter); |
|
store[counter++] = rr; |
|
return counter; |
|
} |
|
|
|
function delClient(counter) { |
|
console.log("deleting counter"); |
|
delete store[counter-1]; |
|
return counter; |
|
} |
|
|
|
function getStore() { |
|
return store; |
|
} |
|
|
|
return ({ |
|
storeClient: storeClient, |
|
delClient: delClient, |
|
getStore: getStore |
|
}); |
|
} |
|
|
|
var getEncoder = function () { |
|
return new lame.Encoder({ |
|
// input |
|
channels: 2, // 2 channels (left and right) |
|
bitDepth: 16, // 16-bit samples |
|
sampleRate: 44100, // 44,100 Hz sample rate |
|
|
|
// output |
|
bitRate: 128, |
|
outSampleRate: 22050, |
|
mode: lame.STEREO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO |
|
}); |
|
} |
|
|
|
var clientstore = makeclientstore(); |
|
|
|
// Listen on a web port and respond with a chunked response header. |
|
var server = http.createServer(function(req, res){ |
|
res.writeHead(200,{ |
|
"Content-Type": "audio/mpeg", |
|
'Transfer-Encoding': 'chunked' |
|
}); |
|
|
|
var counter = clientstore.storeClient({r: req, s: res }); |
|
|
|
var rs = new (require('stream')).Readable; |
|
rs._read = function () { |
|
var i = 0; |
|
rs.push("hello"); |
|
if (i++>100) |
|
rs.push(null); |
|
} |
|
|
|
var e = getEncoder() |
|
rs.pipe(e); |
|
e.pipe(res); |
|
|
|
console.log('Client connected; streaming'); |
|
|
|
res.on("close", function () { |
|
console.log("from: ", Object.keys(clientstore.getStore())); |
|
clientstore.delClient(counter); |
|
console.log("to: ", Object.keys(clientstore.getStore())); |
|
}); |
|
}); |
|
|
|
server.listen("8000", "127.0.0.1"); |
|
|
|
console.log('Server running at http://127.0.0.1:8000'); |