2017-03-09 5 views
5

मैं Google स्पीच एपीआई के लिए वेबस्केट कनेक्शन की ऑडियो स्ट्रीम भेजने की कोशिश कर रहा हूं। Websocket 20ms increments में बाइनरी संदेश भेजता है। यह वृद्धि में भेजता है मुझे विश्वास दिलाता है कि मुझे किसी भी तरह से Google को कनेक्शन को मारने से बचने के लिए अस्थायी रूप से डेटा को स्थानीय फ़ाइल में पढ़ना और लिखना होगा। हालांकि, यह आदर्श नहीं है।Google स्पीच एपीआई में स्ट्रीम के रूप में websocket बाइनरी संदेश कैसे भेजें?

क्या वेबसाईट स्ट्रीम को सीधे recognizeStream में पाइप करने का कोई तरीका है? डॉक्स से

गूगल 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); 

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


}); 

उत्तर

0

यह वास्तव में काफी सरल है। इतना आसान है कि मुझे इसे देखने के लिए थोड़ा भेड़िया महसूस नहीं होता है। ओपी में कोड कैसे लिखा गया था इसके अनुसार यह पूरी तरह से काम करता है:

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

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

} 
0

सबसे अच्छा समाधान यह अपने आप कर के बजाय एक विशेष स्ट्रीमिंग का समाधान का उपयोग किया जाएगा इस, सभी बफर को संभालेगा और आपको एक स्थिर स्ट्रीम देगा जो Google स्पीच एपीआई के लिए उपयुक्त है।

01 जैसे कुछ का उपयोग करने का प्रयास करें

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

संबंधित मुद्दे