Ste*_*enL 5 javascript websocket getusermedia scriptprocessor web-audio-api
我们一直在开发基于 JavaScript 的音频聊天客户端,该客户端在浏览器中运行并通过 WebSocket 将音频样本发送到服务器。我们之前尝试使用 Web Audio API 的 ScriptProcessorNode 来获取样本值。这在我们的台式机和笔记本电脑上运行良好,但在从我们必须支持的手持平台传输时,我们遇到了较差的音频质量。我们将此归因于记录的脚本处理器性能问题(https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API)。在手持设备上,脚本处理器缓冲区大小为 2048,音频始终出现中断。在下一个最大大小间隔 (4096),音频很流畅(没有中断),但延迟太多(大约两秒)。
我们从 ScriptProcessorNode 获得的结果促使我们尝试使用 Audio Worklet。不幸的是,在我们的工作集实现中,音频质量更差:中断和延迟,即使在我们的笔记本电脑上也是如此。我想知道是否有一种方法可以调整我们的工作集实现以获得更好的性能,或者我们所经历的是否是音频工作集当前状态的预期(“符合课程标准”)(Chromium 问题796330、813825和836306似乎相关)。
以下是有关代码功能的更多详细信息:
其工艺方法如下。var“samples”是一个 Float32Array,它被初始化为缓冲区大小并重用。我对缓冲区大小进行了一些尝试,但似乎没有影响。该方法基于AudioWorklet:Web 音频的未来第 4.1 节中的指导,以最大限度地减少内存分配。
if (micKeyed == true) {
if (inputs[0][0].length == framesPerBlock) {
samples.set(inputs[0][0], currentBlockIndex * framesPerBlock);
currentBlockIndex++;
if (currentBlockIndex == lastBlockIndex) {
// console.log('About to send buffer.');
this.port.postMessage(samples);
currentBlockIndex = 0;
}
} else {
console.error("Got a block of unexpected length!!!");
}
}
return true;
Run Code Online (Sandbox Code Playgroud)
目前正在使用 CentOS 7 上运行 Chrome 72.0.3626.109 的 PC 进行测试。我们的手持设备是 Panasonic FZ-N1,在 Android 6.0.1 上运行 Chrome 72.0.3626.105。
感谢您的阅读以及您可能提供的任何建议。
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |