【问题标题】:How can I use Opus Codec from JavaScript如何从 JavaScript 使用 Opus 编解码器
【发布时间】:2013-12-31 04:00:16
【问题描述】:

我想看看是否可以使用 getUserMedia 或最新浏览器中的类似内容直接访问 Opus。

我一直在研究它,但没有很好的结果。

我知道在webkitSpeechRecognition API 中实际使用了 Opus 或 Speex。我想做语音识别,但使用我自己的服务器而不是 Google 的。

【问题讨论】:

    标签: javascript html speech-recognition getusermedia opus


    【解决方案1】:

    所以有很多关于 Emscripten 的建议,但没有人提出,所以我使用 Emscripten 将编码器 opus-tools 移植到 JavaScript。根据您的想法,现在有以下机会:

    【讨论】:

    • 哇!这真太了不起了。将此标记为已接受的答案,尽管我尚未对其进行测试!
    • @OmarIthawi 谢谢。查看this demo 和report bugs 或告诉我如何让它更棒。
    【解决方案2】:

    我们使用 emscripten 使用 gsm610 和 getUserMedia 进行编码和解码,它运行得非常好,即使在移动设备上也是如此。如今,javascript 几乎可以提供原生性能,因此 emscripten 可用于编译编解码器。唯一的问题是 .js 文件可能非常大,因此您只想编译正在使用的部分。

    【讨论】:

    • 现在我们唯一的挑战是找到一个可以与 getUserMedia 一起使用的免费开源视频编解码器。
    【解决方案3】:

    这不是一个完整的解决方案,@Brad 的答案实际上是此时的正确答案。

    一种方法是编译 Opus to Emscripten 并希望您的 PC 可以使用 JavaScript 处理编码。另一种选择是使用speex.js。

    【讨论】:

      【解决方案4】:

      很遗憾,目前无法直接从 JavaScript 访问浏览器编解码器进行编码。唯一的方法是利用 WebRTC 并在服务器上设置记录。我已经尝试过使用 Chromium 中的其他代码编译 libjingle 以使其在 Node.js 服务器上运行……这几乎是不可能的。

      您目前唯一能做的就是将原始 PCM 数据发送到您的服务器。这会占用相当多的带宽,但您可以通过将 float32 样本转换为 16 位(如果您的语音识别可以处理,则为 8 位)将其最小化。

      希望媒体记录器 API 很快就会出现,以便我们可以使用浏览器编解码器。

      【讨论】:

      • 非常感谢。我想我已经到达了 HTML5 的边缘。遗憾的是,我将使用 rtmp 回到基于 Flash 的解决方案。
      • 可悲的是,谷歌已经在x-webkit-speech 和webkitSpeechRecognition 两个组件中拥有这个,我希望他们只允许更改服务器。这真的可以解决我的问题。
      • @OmarIthawi 我实际上不同意语音识别 API 是应该这样做的地方。我可以想象这样一种情况,语音识别可以由浏览器本身完成,而无需将其发送到某个服务器。 Media Recorder API 可以满足您的迫切需求。否则,如果您可以通过浏览器插件覆盖语音识别,将会很有帮助。
      • 我实际上需要做语音识别:),这就是这个问题的目的。当然,Media Recorder 更适合一般的录制和编解码器问题。
      • @OmarIthawi 是的,我知道您正在寻找语音识别。我的意思是我不同意应该可以覆盖语音识别 API 中的特定功能部分。浏览器不应该总是连接到服务器来提供语音识别......它们可以使用本地软件进行语音识别。 可以做的是完全覆盖语音识别,提供您想做的任何语音识别,从而解决您的问题。
      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2015-08-07
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多