如何将websocket二进制消息作为stream发送到Google Speech API?

我正尝试将WebSocket连接的audiostream发送到Google Speech API。 websocket以20ms的增量发送二进制消息。 它发送它的增量导致我相信,我将不得不读取和写入数据临时本地文件,以避免与Google的连接。 但是,这并不理想。

有没有办法直接pipe道WebSocketstream到recognitionStream?

Google streaming从文档中识别示例:

 const request = { config: { encoding: encoding, sampleRate: sampleRate } }; const recognizeStream = speech.createRecognizeStream(request) .on('error', console.error) .on('data', (data) => process.stdout.write(data.results)); record.start({ sampleRate: sampleRate, threshold: 0 }).pipe(recognizeStream); 

Websocket连接:

 var HttpDispatcher = require('httpdispatcher'); var dispatcher = new HttpDispatcher(); var WebSocketServer = require('websocket').server; var server = http.createServer(handleRequest); var wsServer = new WebSocketServer({ httpServer: server, autoAcceptConnections: true, }); function handleRequest(request, response){ try { //log the request on console console.log(request.url); //Dispatch dispatcher.dispatch(request, response); } catch(err) { console.log(err); } } wsServer.on('connect', function(connection) { console.log((new Date()) + ' Connection accepted' + ' - Protocol Version ' + connection.webSocketVersion); connection.on('message', function(message) { if (message.type === 'utf8') { console.log(message.utf8Data); } else if (message.type === 'binary') { //Send to Google Speech API by passing into recognizeStream } }); connection.on('close', function(reasonCode, description) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); }); 

最好的解决scheme是使用专门的stream媒体解决scheme,而不是自己做,这将处理所有的缓冲区,并给你一个稳定的stream,适合谷歌语音API.Try使用类似的东西,

https://www.npmjs.com/package/websocket-stream

这其实很简单。 这么简单,我觉得有点不好意思。 按照这个代码是如何写在OP中,这完美的作品:

 else if (message.type === 'binary') { //Send to Google Speech API by passing into recognizeStream recognizeStream.write(message.binaryData) }