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