2013-12-12 47 views
10

我想查看是否可以使用getUserMedia或任何類似於最新瀏覽器的方法直接訪問Opus。如何使用JavaScript中的Opus編解碼器

我一直研究它了很多,但沒有很好的效果。

我知道Opus或Speex實際上在webkitSpeechRecognition API中使用。我想做語音識別,但使用我自己的服務器而不是Google的。

回答

11

所以有很多關於Emscripten的建議,但沒有人提供,因此我使用Emscripten將編碼器opus-tools移植到JavaScript。依賴什麼人心中都有,現在有以下機會:

+0

哇!這真太了不起了。將此標記爲已接受的答案,儘管我沒有對它進行測試! –

+0

@OmarIthawi謝謝。看看[這個演示](https://blog.rillke.com/opusenc.js/)和[報告錯誤](https://github.com/Rillke/opusenc.js/issues)或告訴我如何製作它更真棒。 –

3

遺憾的是,目前無法直接從JavaScript訪問瀏覽器的編解碼器進行編碼。唯一的方法是使用WebRTC並在服務器上設置記錄。我嘗試過編譯libjingle與Chromium中的一些其他代碼,以使它在Node.js服務器上運行......這幾乎是不可能的。

目前可以做的唯一的事情就是發送原始PCM數據到服務器。這佔用了相當多的帶寬,但通過將float32採樣轉換爲16位(如果您的語音識別可以處理它),您可以將其最小化。

希望媒體記錄器API將會很快顯現,所以我們可以使用瀏覽器的編解碼器。

+0

感謝一起轉化成作品格式上支持的平臺許多。我想我已經達到了HTML5的邊緣。不幸的是我會回到基於Flash的解決方案,使用'rtmp'。 –

+0

可悲的是,Google已經在「x-webkit-speech」和「webkitSpeechRecognition」這兩個組件中使用了它,我希望它們能夠允許更改服務器。這真的會解決我的問題。 –

+0

@OmarIthawi我真的不同意語音識別API是應該完成的地方。我可以想象一種情況,即語音識別可以由瀏覽器自己完成,而不必將它發送到某個服務器。媒體記錄器API是你的直接需求應該滿足的地方。否則,如果您可以通過瀏覽器插件覆蓋語音識別,這將會很有幫助。 – Brad

3

這不是一個完整的解決方案,@布拉德的回答居然是,此時正確的。

其中一種方法是編譯Opus to Emscripten,並希望您的PC可以使用JavaScript處理編碼。另一種選擇是使用speex.js

4

我們使用emscripten進行編碼和解碼,使用gsm610和getUserMedia進行編碼和解碼,即使在移動設備上,它的工作方式也非常出色。這幾天javascript提供了幾乎原生的性能,所以emscripten可以編譯編解碼器。唯一的問題是可能非常大的.js文件,所以你只想編譯你正在使用的部分。

+1

現在我們唯一的挑戰是找到一個免費的開源視頻編解碼器,它將與getUserMedia一起使用。 – CpnCrunch

相關問題