2017-03-09 5 views
5

websocket 연결의 오디오 스트림을 Google Speech API에 보내려고합니다. websocket은 20ms 단위로 바이너리 메시지를 전송합니다. 증분으로 보내면 Google에 연결이 끊어지지 않도록 일시적으로 데이터를 읽고 로컬 파일에 기록해야한다고 생각합니다. 그러나 이것은 이상적이지 않습니다.Google Speech API에 websocket 바이너리 메시지를 스트림으로 보내는 방법은 무엇입니까?

recognizeStream에 websocket 스트림을 직접 파이프하는 방법이 있습니까? 워드 프로세서에서

구글 streamingRecognize 예 :

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); 

웹 소켓 연결 :

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.'); 
    }); 


}); 

답변

0

이것은 실제로 매우 간단합니다. 너무 단순해서 나는 그것을 보지 못한 작은 양떼를 느낍니다. 코드가 OP에 어떻게 쓰여졌는지 정확히 일치하면 다음과 같이 완벽하게 작동합니다.

else if (message.type === 'binary') { 

    //Send to Google Speech API by passing into recognizeStream 
    recognizeStream.write(message.binaryData) 

} 
0

가장 좋은 방법은 스스로 일을하기보다는 전문 스트리밍 솔루션을 사용하는 것,이 모든 버퍼를 처리하고 Google Speech API에 적합한 꾸준한 스트림을 제공합니다.

01을 사용하여 만드십시오.

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