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

View file

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