我希望从浏览器获取音频输入并将其流式传输到多个听众。预期用途是音乐,所以质量必须在mp3标准左右。
我尝试了两种方法,都产生了不成功的结果:
网络RTC
- 直接在浏览器之间流式传输音频效果很好,但是尽管我所看到的,音频质量似乎是不可定制的。(我看到它使用的是 Opus 音频编解码器,但似乎没有公开任何控件)。
- 有人对如何提高 WebRTC 流中的音频质量有任何见解吗?
网络套接字
问题是从浏览器到服务器的传输。我可以通过以下方法获取的 PCM 音频数据已被证明太大而无法通过 websockets 重复流式传输到服务器。该流在高速互联网环境中完美运行,但在较慢的 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 数据以便更容易地流式传输到服务器?或者也许有更简单的方法来解决这个问题?