Могу ли я передавать аудио с микрофона с клиента на клиент, используя nodejs?

Я пытаюсь создать голосовой чат в реальном времени. как только клиент удерживает кнопку и говорит, я хочу, чтобы звук передавался через сокет на серверную часть 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);
    });

Мой ожидаемый результат заключается в том, что звук от клиента A будет слышен на клиенте B, я вижу буфер на сервере, я могу видеть буфер обратно в клиенте, но ничего не слышу.

Я знаю, что socket.io 1.x поддерживает двоичные данные, но я не могу найти ни одного примера создания голосового чата, я пробовал также использовать BinaryJS, но результаты такие же, также я знаю, что с WebRTC это простая задача, но Я не хочу использовать WebRTC, кто-нибудь может указать мне хороший ресурс или сказать, что мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос