2013-12-12 6 views
10

verwenden Ich würde gerne sehen, ob es möglich ist, direkten Zugriff auf Opus mit getUserMedia oder etwas ähnliches von den neuesten Browsern haben.Wie kann ich Opus Codec von JavaScript

Ich habe viel darüber recherchiert, aber ohne gute Ergebnisse.

Ich bin mir bewusst, dass entweder Opus oder Speex tatsächlich in webkitSpeechRecognition API verwendet werden. Ich würde gerne Spracherkennung machen, aber meinen eigenen Server anstelle von Google verwenden.

Antwort

11

Also es gibt viele Vorschläge über Emscripten, aber niemand hat es getan, also portierte ich den Encoder opus-tools in JavaScript mit Emscripten. Abhängig davon, was man denkt, gibt es jetzt die folgenden Möglichkeiten:

+0

Wow! Das ist großartig. Dies als die akzeptierte Antwort zu markieren, obwohl ich es nicht getestet habe! –

+0

@OmarIthawi Danke. Schauen Sie sich [diese Demo] (https://blog.rillke.com/opusenc.js/) und [Fehler melden] (https://github.com/Rillke/opusenc.js/issues) an oder sagen Sie mir, wie ich vorgehen soll es ist toller. –

3

Leider ist es derzeit nicht möglich, direkt von JavaScript aus auf Browser-Codecs zuzugreifen. Die einzige Möglichkeit wäre, WebRTC zu verwenden und die Aufzeichnung auf dem Server einzurichten. Ich habe das probiert, indem ich libjingle mit einem anderen Code aus Chromium kompiliert habe, um es auf einem Node.js Server laufen zu lassen ... das ist fast unmöglich.

Das einzige, was Sie zur Zeit tun können, ist das Senden roher PCM-Daten an Ihren Server. Dies erfordert ziemlich viel Bandbreite, aber Sie können dies minimieren, indem Sie die float32-Samples auf 16 Bit (oder 8 Bit, wenn Ihre Spracherkennung damit umgehen kann) umwandeln.

Hoffentlich wird die Media Recorder API bald erscheinen, so dass wir Browser Codecs verwenden können.

+0

Dank zu konvertieren erlauben würden, ein Menge. Ich denke, ich habe den Rand von HTML5 erreicht. Leider werde ich mit 'rtmp' zu einer Flash-basierten Lösung zurückkehren. –

+0

Das Traurige ist, dass Google dies bereits in den beiden Komponenten 'x-webkit-rede' und' webkitSpeechRecognition' hat, ich wünschte, sie würden nur den Server wechseln. Dies würde mein Problem wirklich lösen. –

+0

@OmarIthawi Ich stimme eigentlich nicht überein, dass die Spracherkennung API ist, wo dies getan werden sollte. Ich kann mir einen Fall vorstellen, bei dem die Spracherkennung vom Browser selbst durchgeführt werden könnte, ohne sie irgendwo an einen Server zu senden. Die Media Recorder-API ist die Stelle, an der Ihr unmittelbarer Bedarf gedeckt werden sollte. Andernfalls wäre es hilfreich, wenn Sie die Spracherkennung über das Browser-Plugin überschreiben könnten. – Brad

3

Dies ist keine vollständige Lösung, @ Brads Antwort ist eigentlich die richtige zur Zeit.

Ein Weg, es zu tun ist, kompilieren Opus to Emscripten und hoffe, dass Ihr PC Codierung mit JavaScript umgehen kann. Eine andere Alternative ist die Verwendung von speex.js.

4

Wir verwenden emscripten für die Kodierung und Dekodierung mit gsm610 mit getUserMedia, und es funktioniert unglaublich gut, auch auf mobilen Geräten. Heutzutage bietet Javascript fast native Leistung, so dass emscripten für das Kompilieren von Codecs geeignet ist. Das einzige Problem sind potenziell sehr große .js-Dateien. Daher möchten Sie nur die Teile kompilieren, die Sie verwenden.

+1

Nun besteht unsere einzige Herausforderung darin, einen kostenlosen Open-Source-Video-Codec zu finden, der mit getUserMedia funktioniert. – CpnCrunch

Verwandte Themen