ブラウザーからオーディオ入力を取得し、それを複数のリスナーにストリーミングしようとしています。用途は音楽用ですので、音質はmp3規格程度でお願いします。
私は2つの方法を試みましたが、どちらも失敗した結果をもたらしました:
WebRTC
- ブラウザ間でオーディオを直接ストリーミングすることは問題なく機能しますが、私が見たところ、オーディオ品質はカスタマイズできないようです。(Opus オーディオ コーデックを使用していることがわかりましたが、コントロールを公開していないようです)。
- WebRTC ストリームのオーディオ品質を向上させる方法について洞察を持っている人はいますか?
ウェブソケット
問題は、ブラウザからサーバーへの転送です。以下の方法で取得できる PCM オーディオ データは、websocket 経由でサーバーに繰り返しストリーミングするには大きすぎることがわかっています。ストリームは高速インターネット環境では完全に機能しますが、低速の wifi では使用できません。
var context = new webkitAudioContext() navigator.webkitGetUserMedia({audio:true}, gotStream) function gotStream (stream) { var source = context.createMediaStreamSource(stream) var proc = context.createScriptProcessor(2048, 2, 2) source.connect(proc) proc.connect(context.destination) proc.onaudioprocess = function(event) { var audio_data = event.inputBuffer.getChannelData(0)|| new Float32Array(2048) console.log(audio_data) // send audio_data to server } }
そこで主な質問は、サーバーへのストリーミングを容易にするために PCM データを圧縮する方法はないかということです。それとも、これについてもっと簡単な方法がありますか?