Sto provando a creare una chat vocale in tempo reale. quando un client è in possesso di un pulsante e parla, voglio che il suono venga inviato tramite il socket al backend nodejs, quindi voglio trasmettere questi dati a un altro client.Posso ascoltare l'audio del microfono dal client al client usando nodejs?
qui è il codice del client mittente:
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);
}
});
Il server quindi ottiene questo buffer e streaming a un altro client (in questo esempio, lo stesso cliente)
Server Codice
socket.on('broadcast', function(buffer) {
socket.emit('broadcast', new Int16Array(buffer));
});
E quindi, per riprodurre il suono dall'altra parte (il ricevitore), il codice cliente è come:
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);
});
Il mio risultato atteso è che il suono dal client A sarà ascoltato nel client B, posso vedere il buffer sul server, posso vedere il buffer nel client ma non sento nulla.
So che socket.io 1.x supporta i dati binari ma non riesco a trovare alcun esempio di creazione di una chat vocale, ho provato anche a utilizzare BinaryJS ma i risultati sono gli stessi, inoltre, so che con WebRTC questo è un compito semplice ma non voglio usare WebRTC, qualcuno può indicarmi una buona risorsa o dirmi cosa mi manca?
Grazie mille per questa risposta informativa.La ragione per cui non voglio usare webrtc: prima devo usare i servizi STUN e TURN per farlo funzionare su Internet e poi, diciamo che vuoi che un client trasmetta a 10 utenti, significa 10 connessioni peer, più i clienti nella chat, più connessioni peer ogni client ha bisogno di stabilire – udidu
sì, hai bisogno di server STUN e TURN ma troverai molti server che puoi utilizzare o ospitare da te (https://code.google.com/p/ rfc5766-turn-server /). Per molti e molti problemi puoi dare un'occhiata al software chiamato: MCU. Il miglior MCU per WebRTC (open source) al momento è Licodo: http://lynckia.com/licode/ penso (e utilizzo), ma puoi anche dare un'occhiata a: http://www.kurento.org/e Telepresence: https://code.google.com/p/telepresence/ – Cracker0dks