如何在JavaScript中使用Opus编解码器

15

我希望查看是否可以通过最新浏览器使用getUserMedia或类似方式直接访问Opus。

我一直在做这方面的研究,但是没有很好的结果。

我知道webkitSpeechRecognition API实际上会使用Opus或Speex。我想进行语音识别,但使用自己的服务器而不是谷歌的。

4个回答

20

虽然有很多关于Emscripten的建议,但没有人真正去做。所以我使用Emscripten将编码器 opus-tools 移植到JavaScript中。根据想要实现的功能,现在有以下选择:


哇!这太棒了。我将其标记为已接受的答案,尽管我还没有测试过它! - Omar Al-Ithawi
@OmarIthawi 谢谢。请查看此演示报告错误,或告诉我如何使其更加出色。 - Rainer Rillke

5

我们正在使用emscripten编码和解码gsm610格式的音频,同时结合getUserMedia使用,即使在移动设备上也能表现出色。如今JavaScript拥有接近原生的性能,因此使用emscripten进行编译代码是可行的。唯一的问题可能是.js文件非常大,所以您需要仅编译您正在使用的部分。


1
现在我们唯一的挑战是寻找一个可以与getUserMedia一起使用的自由开源视频编解码器。 - CpnCrunch
我该如何获取这个编解码器的asm.js版本或任何开源实现? - grijjLY

3
很遗憾,目前无法直接从JavaScript中访问浏览器编解码器以进行编码。唯一的方法是利用WebRTC并在服务器上设置录制。我曾尝试通过将libjingle与Chromium的其他代码编译在一起,使其在Node.js服务器上运行...但几乎是不可能的。
目前唯一能做的就是将原始PCM数据发送到服务器。这会占用相当多的带宽,但您可以将float32样本转换为16位(如果您的语音识别支持,则为8位)来最小化带宽消耗。
希望媒体录制API很快就能出现,这样我们就可以使用浏览器编解码器了。

非常感谢。我想我已经到达了HTML5的边缘。不幸的是,我将回到使用“rtmp”的基于Flash的解决方案。 - Omar Al-Ithawi
可悲的是,谷歌已经有了两个组件x-webkit-speechwebkitSpeechRecognition,但我希望他们能够允许更改服务器。这真的会解决我的问题。 - Omar Al-Ithawi
@OmarIthawi,我不同意使用语音识别API来完成这项任务。我可以想象浏览器本身就可以完成语音识别,而无需将其发送到某个服务器。媒体记录器API是满足您即时需求的地方。否则,如果您能通过浏览器插件覆盖语音识别,那将非常有帮助。 - Brad
我实际上需要进行语音识别 :), 这就是这个问题的目的。当然,媒体记录器更适合于通用录制和编解码器问题。 - Omar Al-Ithawi
1
@OmarIthawi 是的,我明白你正在寻找语音识别。但我认为不应该允许覆盖语音识别API中的特定功能部分。浏览器不应总是需要连接服务器才能提供语音识别...它们可以具备使用本地软件进行语音识别的能力。可以做的是完全覆盖语音识别,提供任何你想要的语音识别,这样就解决了你的问题。 - Brad

3

这不是一种完整的解决方案,@Brad 的答案目前实际上是正确的。

一种方法是编译 Opus to Emscripten 并希望你的电脑可以使用 JavaScript 进行编码。另一种替代方案是使用 speex.js


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接