Я пытаюсь создать голосовой чат в реальном времени. когда клиент держит кнопку и говорит, я хочу, чтобы звук был отправлен через сокет на серверную часть nodejs, а затем я хочу передать эти данные другому клиенту.
вот код клиента отправителя:
socket.on('connect', function() {
var session = {
audio: true,
video: false
};
navigator.getUserMedia(session, function(stream){
var audioInput = context.createMediaStreamSource(stream);
var bufferSize = 2048;
recorder = context.createScriptProcessor(bufferSize, 1, 1);
recorder.onaudioprocess = onAudio;
audioInput.connect(recorder);
recorder.connect(context.destination);
},function(e){
});
function onAudio(e) {
if(!broadcast) return;
var mic = e.inputBuffer.getChannelData(0);
var converted = convertFloat32ToInt16(mic);
socket.emit('broadcast', converted);
}
});
Затем сервер получает этот буфер и передает его другому клиенту (в данном примере тому же клиенту).
Код сервера
socket.on('broadcast', function(buffer) {
socket.emit('broadcast', new Int16Array(buffer));
});
И затем, чтобы воспроизвести звук на другой стороне (приемнике), клиентский код выглядит так:
socket.on('broadcast', function(raw) {
var buffer = convertInt16ToFloat32(raw);
var src = context.createBufferSource();
var audioBuffer = context.createBuffer(1, buffer.byteLength, context.sampleRate);
audioBuffer.getChannelData(0).set(buffer);
src.buffer = audioBuffer;
src.connect(context.destination);
src.start(0);
});
Мой ожидаемый результат состоит в том, что звук от клиента А будет слышен в клиенте Б, я вижу буфер на сервере, я вижу буфер обратно в клиенте, но ничего не слышу.
Я знаю, что socket.io 1.x поддерживает двоичные данные, но я не могу найти ни одного примера создания голосового чата, я также пытался использовать BinaryJS, но результаты такие же, также я знаю, что с WebRTC это простая задача, но Я не хочу использовать WebRTC, может ли кто-нибудь указать мне хороший ресурс или сказать, что мне не хватает?