2013-12-12 10 views
10

Vorrei vedere se è possibile accedere direttamente a Opus utilizzando getUserMedia o qualcosa di simile dai browser più recenti.Come utilizzare Opus Codec da JavaScript

Ho fatto molte ricerche ma senza buoni risultati.

Sono consapevole che Opus o Speex sono effettivamente utilizzati nell'API webkitSpeechRecognition. Mi piacerebbe fare il riconoscimento vocale ma usare il mio server piuttosto che Google.

risposta

11

Quindi ci sono molti suggerimenti su Emscripten ma nessuno lo ha fatto, quindi ho portato l'encoder opus-tools in JavaScript usando Emscripten. A seconda di ciò che si ha in mente, ora ci sono le seguenti opportunità:

+0

Wow! È incredibile Segnando questo come la risposta accettata, anche se non l'ho ancora testato! –

+0

@OmarIthawi Grazie. Dai un'occhiata [questa demo] (https://blog.rillke.com/opusenc.js/) e [segnala bug] (https://github.com/Rillke/opusenc.js/issues) o dimmi come fare è più fantastico. –

3

Sfortunatamente, non è attualmente possibile accedere ai codec del browser direttamente da JavaScript per la codifica. L'unico modo per farlo sarebbe utilizzare WebRTC e impostare la registrazione sul server. Ho provato questo compilando libjingle con qualche altro codice di Chromium per farlo funzionare su un server Node.js ... è quasi impossibile.

L'unica cosa che puoi fare al momento è inviare dati PCM grezzi al tuo server. Questo richiede un po 'di larghezza di banda, ma è possibile ridurlo al minimo convertendo i campioni float32 a 16 bit (o 8 bit se il riconoscimento vocale è in grado di gestirlo).

Speriamo che l'API del registratore multimediale venga visualizzata presto in modo da poter utilizzare i codec del browser.

+0

Grazie sacco. Penso di aver raggiunto il limite di HTML5. Tragamente tornerò a una soluzione basata su Flash usando 'rtmp'. –

+0

La cosa triste è che Google ha già questo in due componenti 'x-webkit-speech' e' webkitSpeechRecognition', vorrei che si limitassero a cambiare il server. Questo sarebbe davvero risolvere il mio problema. –

+0

@OmarIthawi In realtà non sono d'accordo sul fatto che l'API di riconoscimento vocale è dove dovrebbe essere fatto. Posso immaginare un caso in cui il riconoscimento vocale potrebbe essere eseguito dal browser stesso, senza inviarlo ad alcun server da qualche parte. L'API Media Recorder è il luogo in cui è necessario soddisfare le necessità immediate. In caso contrario, sarebbe utile se fosse possibile ignorare il riconoscimento vocale tramite il plug-in del browser. – Brad

3

Questa non è una soluzione completa, la risposta di @Bick in realtà è quella corretta in questo momento.

Un modo per farlo è compilare Opus to Emscripten e sperare che il PC possa gestire la codifica utilizzando JavaScript. Un'altra alternativa è usare speex.js.

4

Usiamo emscripten per la codifica e la decodifica utilizzando gsm610 con getUserMedia e funziona incredibilmente bene, anche su dispositivi mobili. In questi giorni javascript offre prestazioni quasi native, quindi è possibile eseguire l'emscripten per la compilazione dei codec. L'unico problema è rappresentato dai file .js potenzialmente molto grandi, quindi si desidera compilare solo le parti che si stanno utilizzando.

+1

Ora la nostra unica sfida è trovare un codec video open source gratuito che funzioni con getUserMedia. – CpnCrunch