-
Notifications
You must be signed in to change notification settings - Fork 114
/
server.js
executable file
·81 lines (64 loc) · 2.22 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* Created by noamc on 8/31/14.
*/
var binaryServer = require('binaryjs').BinaryServer,
https = require('https'),
wav = require('wav'),
opener = require('opener'),
fs = require('fs'),
connect = require('connect'),
serveStatic = require('serve-static'),
UAParser = require('./ua-parser'),
CONFIG = require("../config.json"),
lame = require('lame');
var uaParser = new UAParser();
if(!fs.existsSync("recordings"))
fs.mkdirSync("recordings");
var options = {
key: fs.readFileSync('ssl/server.key'),
cert: fs.readFileSync('ssl/server.crt'),
};
var app = connect();
app.use(serveStatic('public'));
var server = https.createServer(options,app);
server.listen(9191);
opener("https://localhost:9191");
var server = binaryServer({server:server});
server.on('connection', function(client) {
console.log("new connection...");
var fileWriter = null;
var writeStream = null;
var userAgent =client._socket.upgradeReq.headers['user-agent'];
uaParser.setUA(userAgent);
var ua = uaParser.getResult();
client.on('stream', function(stream, meta) {
console.log("Stream Start@" + meta.sampleRate +"Hz");
var fileName = "recordings/"+ ua.os.name +"-"+ ua.os.version +"_"+ new Date().getTime();
switch(CONFIG.AudioEncoding){
case "WAV":
fileWriter = new wav.FileWriter(fileName + ".wav", {
channels: 1,
sampleRate: meta.sampleRate,
bitDepth: 16 });
stream.pipe(fileWriter);
break;
case "MP3":
writeStream = fs.createWriteStream( fileName + ".mp3" );
stream.pipe( new lame.Encoder(
{
channels: 1, bitDepth: 16, sampleRate: meta.sampleRate, bitRate: 128, outSampleRate: 22050, mode: lame.MONO
})
)
.pipe( writeStream );
break;
};
});
client.on('close', function() {
if ( fileWriter != null ) {
fileWriter.end();
} else if ( writeStream != null ) {
writeStream.end();
}
console.log("Connection Closed");
});
});