Javascript 在浏览器中使用Opus(或其他编解码器)对音频缓冲区进行编码

Javascript 在浏览器中使用Opus(或其他编解码器)对音频缓冲区进行编码,javascript,web-audio-api,opus,Javascript,Web Audio Api,Opus,我正在尝试通过Websocket传输音频 我可以通过Web Audio Api从麦克风(或其他来源)获取音频缓冲区,并对原始音频缓冲区进行流式传输,但我认为这不是很有效。 所以我环顾四周,不知怎的对音频缓冲区进行了编码如果Opus编解码器不可行, 我对其他选择持开放态度,并感谢在正确方向上的任何提示 我曾尝试使用MediaRecorder(来自MediaStreamRecording API),但似乎不可能使用该API而不是普通录制 以下是我如何获取原始音频缓冲区的部分: const hand

我正在尝试通过Websocket传输音频

我可以通过Web Audio Api从麦克风(或其他来源)获取音频缓冲区,并对原始音频缓冲区进行流式传输,但我认为这不是很有效。 所以我环顾四周,不知怎的对音频缓冲区进行了编码如果Opus编解码器不可行, 我对其他选择持开放态度,并感谢在正确方向上的任何提示

我曾尝试使用MediaRecorder(来自MediaStreamRecording API),但似乎不可能使用该API而不是普通录制

以下是我如何获取原始音频缓冲区的部分:

const handleSuccess=函数(流){
const context=新的AudioContext();
const source=context.createMediaStreamSource(流);
const processor=context.createScriptProcessor(16384,1,1);
source.connect(处理器);
processor.connect(context.destination);
processor.onaudioprocess=函数(e){
bufferLen=e.inputBuffer.length
const inputBuffer=新的Float32Array(bufferLen);
e、 copyFromChannel(inputBuffer,0);
让数据发送=输入缓冲区
//并发送浮点数组。。。
}
navigator.mediaDevices.getUserMedia({audio:true,video:false})
.then(handleSuccess);
Web音频API具有一个将公开
.stream
媒体流的API,然后您可以通过

但是,如果您只处理麦克风输入,则直接将该媒体流传递给WebRTC,而不需要Web音频步骤


Ps:对于那些只想编码到opus的,那么MediaRecorder是目前唯一的原生方式。它会引起延迟,会生成一个webm文件,而不仅仅是原始数据,并且处理数据的速度不会超过实时速度

现在唯一的选择是编写自己的编码器并在WabAssembly中运行

希望在不久的将来,我们能够访问解决此用例的。Web Audio API有一个可公开
.stream
的媒体流,然后您可以通过

但是,如果您只处理麦克风输入,则直接将该媒体流传递给WebRTC,而不需要Web音频步骤


Ps:对于那些只想编码到opus的,那么MediaRecorder是目前唯一的原生方式。它会引起延迟,会生成一个webm文件,而不仅仅是原始数据,并且处理数据的速度不会超过实时速度

现在唯一的选择是编写自己的编码器并在WabAssembly中运行


希望在不久的将来,我们能够访问解决此用例的。以1秒左右的延迟流式传输MediaRecorder的输出是绝对可能的。如果这还不足以满足您的需要,您应该使用WebRTC。以1秒左右的延迟流式传输MediaRecorder的输出是绝对可能的延迟大约一秒。如果这还不足以满足您的需要,您还是应该使用WebRTC。