some more modifications regarding buffering of files

This commit is contained in:
Daniel Sommer 2022-04-20 18:08:19 +02:00
parent c0ffcbebb6
commit 96a102f117
2 changed files with 23 additions and 19 deletions

View file

@ -155,28 +155,24 @@ class AudioServer {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
this.buffer.written = 0; this.buffer.written = 0;
while (true) { while (true) {
if (this.buffer.stream.bytesRead === this.buffer.size && buffer.length === 0) { if (buffer[0] === undefined) {
client.audiosocket.end(() => {
logger.debug(client.getTag() + ' sent audio file \'' + this.buffer.file + '\' after ' + (Date.now() - timestamp) + 'ms...');
});
break;
}
if (buffer.length === 0) {
this.buffer.stream.resume();
await sleep(1); await sleep(1);
continue; continue;
}
if (!this.buffer.stream.isPaused()) {
this.buffer.stream.pause();
} }
const tmp = buffer[0]; const tmp = buffer[0];
buffer.shift(); buffer.shift();
if ((client.audiosocket.bytesWritten + tmp.length) >= this.buffer.size) {
logger.debug(client.getTag() + ' sent audio file \'' + this.buffer.file + '\' after ' + (Date.now() - timestamp) + 'ms...');
client.audiosocket.end(tmp);
break;
}
client.audiosocket.write(tmp); client.audiosocket.write(tmp);
this.buffer.buffered -= tmp.length;
if (this.buffer.stream.isPaused() && this.buffer.buffered < this.buffer.limit) {
this.buffer.stream.resume();
logger.debug('resuming read stream');
}
} }
// client.audiosocket.end(() => {
// logger.debug(client.getTag() + ' sent audio file \'' + this.buffer.file + '\' after ' + (Date.now() - timestamp) + 'ms...');
// });
client.audiosocket.on('error', (error) => { client.audiosocket.on('error', (error) => {
logger.error(client.getTag() + ' encountered an error: ' + error); logger.error(client.getTag() + ' encountered an error: ' + error);
}); });
@ -205,17 +201,27 @@ class AudioServer {
async #bufferFile() { async #bufferFile() {
// const stream = fs.createReadStream(this.buffer.file); // const stream = fs.createReadStream(this.buffer.file);
const buffer = await new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const timestamp = Date.now(); const timestamp = Date.now();
const buffer = []; const buffer = [];
let resolved = false; let resolved = false;
this.buffer.buffered = 0;
this.buffer.stream.on('data', (data) => { this.buffer.stream.on('data', (data) => {
this.buffer.buffered += data.length;
buffer.push(data); buffer.push(data);
if (resolved !== true && this.buffer.stream.bytesRead >= this.buffer.threshold) { if (resolved !== true && this.buffer.stream.bytesRead >= this.buffer.threshold) {
resolved = true; resolved = true;
logger.debug('buffering threshold of ' + this.buffer.threshold + ' bytes for file \'' + this.buffer.file + '\' took ' + (Date.now() - timestamp) + 'ms'); logger.debug('buffering threshold of ' + this.buffer.threshold + ' bytes for file \'' + this.buffer.file + '\' took ' + (Date.now() - timestamp) + 'ms');
resolve(buffer); resolve(buffer);
} }
if (this.buffer.buffered >= this.buffer.limit) {
logger.debug('pausing read stream');
this.buffer.stream.pause();
if (resolved !== true) {
resolved = true;
resolve(buffer);
}
}
}); });
this.buffer.stream.on('close', () => { this.buffer.stream.on('close', () => {
// this.buffer.data = Buffer.concat(buffer); // this.buffer.data = Buffer.concat(buffer);
@ -227,8 +233,6 @@ class AudioServer {
reject(error); reject(error);
}); });
}); });
return buffer;
} }
#getClientById(clientId) { #getClientById(clientId) {

View file

@ -23,6 +23,6 @@
}, },
"audio": { "audio": {
"threshold": 10, "threshold": 10,
"bufferlimit": 128 "bufferlimit": 64
} }
} }