Я пытаюсь поток MP3-файл с сервера nodeJS с помощью BinaryJS - http://binaryjs.com/перекрывающихся части в то время как буферная mp3
Но, когда я декодирование буферов на стороне клиента, они, кажется, перекрытие, это означает, что новый кусок данных воспроизводится за несколько миллисекунд до того, как закончился предыдущий, что привело к задержке звука.
есть ли способ заставить клиента ждать, пока текущий буфер не будет закончен, прежде чем запускать новый?
Сервер:
var BinaryServer = require('binaryjs').BinaryServer;
var fs = require('fs');
var server = BinaryServer({port: 9000});
server.on('connection', function(client){
var file = fs.createReadStream(__dirname + '/Song.mp3', {
'flags': 'r',
'bufferSize': 4 * 1024
});
});
client.send(file);
});
Клиент:
var client = new BinaryClient('ws://localhost:9000');
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
client.on('stream', function (stream, meta) {
var parts = [];
var last = 0;
stream.on('data', function (data) {
var source = context.createBufferSource();
context.decodeAudioData(data, function (buf) {
source.buffer = buf;
source.connect(context.destination);
source.loop = false;
source.start(last);
last += buf.duration;
source.onended = function() {
console.log('Your audio has finished playing');
};
},
function (e) {
"Error with decoding audio data" + e.err
});
parts.push(data);
});
stream.on('end', function() {
console.log(parts);
});
});