Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript中的Opus编解码器_Javascript_Html_Speech Recognition_Getusermedia_Opus - Fatal编程技术网

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

如何使用JavaScript中的Opus编解码器,javascript,html,speech-recognition,getusermedia,opus,Javascript,Html,Speech Recognition,Getusermedia,Opus,我想看看是否可以使用getUserMedia或任何类似的最新浏览器直接访问Opus 我对它做了很多研究,但没有什么好结果 我知道Opus或Speex实际上用于webkitSpeechRecognitionAPI。我想做语音识别,但使用我自己的服务器,而不是谷歌的。不幸的是,目前无法直接从JavaScript访问浏览器编解码器进行编码。唯一的方法是利用WebRTC并在服务器上设置录制。我尝试过用Chromium编译libjingle和其他一些代码,让它在Node.js服务器上运行。。。这几乎是不可

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

我对它做了很多研究,但没有什么好结果


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

不幸的是,目前无法直接从JavaScript访问浏览器编解码器进行编码。唯一的方法是利用WebRTC并在服务器上设置录制。我尝试过用Chromium编译libjingle和其他一些代码,让它在Node.js服务器上运行。。。这几乎是不可能的

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


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

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


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

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

因此有很多关于Emscripten的建议,但没有人这样做,所以我使用Emscripten将编码器移植到JavaScript。根据您的想法,现在有以下机会:

  • | | | | | Web工作者大小:1.3 MiB
  • | | | | | Web工作者大小:0.6 MiB
  • 当使用Mozilla Firefox时,可以使用,它还允许在支持的平台上与
    AudioContext.decodeAudioData()一起将任意声音文件转换为Opus格式

非常感谢。我想我已经达到了HTML5的边缘。遗憾的是,我将回到使用
rtmp
的基于Flash的解决方案。遗憾的是,谷歌已经在两个组件
x-webkit-speechrecognition
webkitSpeechRecognition
中实现了这一点,我希望他们能允许更改服务器。这将真正解决我的问题。@OmarIthawi我实际上不同意语音识别API是应该做这件事的地方。我可以想象这样一种情况,即语音识别可以由浏览器本身完成,而无需将其发送到某个服务器。媒体录制器API是您当前需要满足的地方。否则,如果你可以通过浏览器插件覆盖语音识别,那将非常有用。我需要做语音识别,实际上:),这就是这个问题的目的。当然,媒体录制器更适合一般录制和编解码器问题。@OmarIthawi是的,我知道您正在寻找语音识别。我想说的是,我不同意可以覆盖语音识别API中的特定功能部分。浏览器不应该总是连接到服务器来提供语音识别。。。他们可以用本地软件进行语音识别。我们可以做的是完全覆盖语音识别,提供您想要做的任何语音识别,这就解决了您的问题。现在我们唯一的挑战是找到一个免费的开源视频编解码器,它将与getUserMedia一起工作。哇!这太神奇了。将此标记为已接受的答案,尽管我尚未测试它@谢谢你。看看,或者告诉我如何让它更棒。