ho bisogno di avere un flusso audio dal vivo in tempo reale dal 1 client a un server per più client ascoltatore.Ottenere l'audio streaming dai server ai client NodeJS
Attualmente ho la registrazione dalla lavorazione client e streaming l'audio attraverso socket.io al server. Il server riceve questi dati e deve trasmettere l'audio (anche tramite socket.io?) Ai client che vogliono ascoltare questo stream. Deve essere il più realistico possibile (ridurre al minimo il ritardo).
sto usando GetUserMedia per registrare il microfono (compatibilità del browser non è importante qui). Voglio che i client utilizzino tag audio HTML5 per ascoltare lo streaming. I dati ricevuti sul server sono blocchi (attualmente imballati da 700) imballati in un blob con tipo audio/wav.
Questo è il mio codice di inviare al server:
mediaRecorder.ondataavailable = function(e) {
this.chunks.push(e.data);
if (this.chunks.length >= 700)
{
this.sendData(this.chunks);
this.chunks = [];
}
};
mediaRecorder.sendData = function(buffer) {
blob = new Blob(buffer, { 'type' : 'audio/wav' });
socket.emit('voice', blob);
}
Sul server sono in grado di inviare i pezzi al client nello stesso modo in questo modo:
socket.on('voice', function(blob) {
socket.broadcast.emit('voice', blob);
});
On il cliente posso giocare a questo come questo:
var audio = document.createElement('audio');
socket.on('voice', function(arrayBuffer) {
var blob = new Blob([arrayBuffer], { 'type' : 'audio/wav' });
audio.src = window.URL.createObjectURL(blob);
audio.play();
});
questo funziona per la prima blob di blocchi mando, ma non ti è permesso ke ep cambiando in audio.src in una nuova sorgente URL quindi questa non è una soluzione funzionante.
penso di avere a creare una sorta di flusso sul server che posso mettere nel tag audio del HTML5 sui client di ascolto, ma io non so come. I BLOB ricevuti con blocchi dovrebbero essere aggiunti a questo stream in tempo reale.
Qual è l'approccio migliore per farlo? Lo sto facendo direttamente dal microfono del client al server?
Se avete sentito parlare di WebRTC, che poi è una soluzione naturale per il server meno problema WebRTC è peer to peer. –
Lo so ma non voglio che sia peer to peer ma trasmesso da un server.Il client che registra l'audio non ha abbastanza larghezza di banda da trasmettere a tutti i client, quindi ho bisogno di un server per farlo –
Si potrebbe usare l'architettura MCU di WebRTC, ma immagino che sia fuori portata qui. –