1つのクライアントから複数のリスナークライアントまでのリアルタイムのオーディオストリームが必要です。NodeJSサーバーからクライアントにライブストリーミングオーディオを取得する
現在、私はクライアントからの録音を行い、オーディオをsocket.ioからサーバーにストリームしています。サーバーはこのデータを受信し、このストリームをリスンするクライアントにオーディオを(またsocket.io?を介して)ストリーミングする必要があります。可能な限りリアルタイムでなければなりません(遅延を最小限に抑える)。
私はGetUserMediaを使用してマイクを録音しています(ブラウザの互換性はここでは重要ではありません)。私は、クライアントがストリームを聞くためにHTML5オーディオタグを使用するようにしたい。サーバー上で受信されたデータは、オーディオ/ wavタイプのブロブにパックされたチャンク(現在700でパックされています)です。
これは、それをサーバーに送信するために私のコードです:オン
socket.on('voice', function(blob) {
socket.broadcast.emit('voice', blob);
});
:私はクライアントにこのような同じようにチャンクを送信することができるよサーバで
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);
}
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();
});
これは私が送っチャンクの最初のブロブのために動作しますが、あなたはKEを許可していないクライアントは、私はこのように、これを再生することができますepをaudio.srcから新しいURLソースに変更すると、これは動作する解決策ではありません。
私はリッスンクライアントのHTML5のオーディオタグに入れることができる何らかのストリームをサーバー上に作成しなければならないと思いますが、私はその方法を知らないのです。チャンク付きの受信したブロブは、リアルタイムでこのストリームに追加する必要があります。
これを行うにはどのような方法が最適ですか?クライアントのマイクからサーバーまで、私はそうしていますか?
webrtcについて聞いたことがあるなら、webrtcはピア・ツー・ピアであるため、これは問題の自然な解決策です。 –
私は知っているが、ピアツーピアではなく、サーバーからブロードキャストすることを望んでいる。オーディオを録音しているクライアントは、すべてのクライアントにブロードキャストするのに十分な帯域幅を持っているので、それを行うにはサーバが必要です –
WebRTCのMCUアーキテクチャを使用できますが、ここでは範囲外です。 –