2017-02-06 7 views
3

Ich habe versucht, einen Node-Dienst für das Streaming von Live-Audio zur Google Speech API einzurichten, aber ich habe ein Problem festgestellt, das meiner Meinung nach mit der Authentifizierung zusammenhängen könnte.NodeJs Google Speech-API-Streaming

Der Dienst wird in Knoten mit Express und BinaryServer geschrieben, ich erhalte Daten ohne Probleme (und konnte es auf der lokalen Festplatte speichern, aber dieser Abschnitt des Codes ist nicht in dem folgenden Beispiel), aber wenn ich versuche, an die Google API zu senden, erhalte ich nichts zurück (Obwohl, wenn ich den keyFileName von der Anfrage entferne, bekomme ich "Fehler: Konnte die Standardanmeldeinformationen nicht laden", das ist fair genug, weil ich draußen laufe die GCE)

var express = require("express"); 
var app = express(); 
var port = 54180; 
var BinaryServer = require('binaryjs').BinaryServer; 

var server = BinaryServer({ 
    port: port 
}); 

app.listen(port, function() { 
    console.log('server open on port ' + port); 
}); 

binaryServer = BinaryServer({ 
    port: 9001 
}); 

binaryServer.on('connection', function (client) { 
    console.log('Binary Server connection started'); 

    client.on('stream', function (stream, meta) { 
     console.log('>>>Incoming audio stream'); 

     var speech = require('@google-cloud/speech')({ 
      projectId: 'MYPROJECT-1234' 
       //keyFilename: '/config/KeyFile.json' 
     }); 

     const request = { 
      config: { 
       encoding: 'LINEAR16', 
       sampleRate: 16000 
      }, 
      singleUtterance: false, 
      interimResults: true 
     }; 

     // Create a recognize stream 
     const recognizeStream = speech.createRecognizeStream(request) 
      .on('error', function (error) { 
       console.log('Error'); 
       console.log(error) 
      }) 
      .on('data', function (data) { 
       console.log('Data'); 
       console.log(data); 
      }); 

     // Send the microphone input to the Speech API 
     stream.pipe(recognizeStream); 

     stream.on('end', function() { 
      fileWriter.end(); 
      recognizeStream.end(); 
      console.log('||| Audio stream ended'); 
     }); 
    }); 
}); 

ich werde auch zugeben, dies ist das erste Mal, dass ich versucht habe, auf eine andere API erneut Rohr, so ist es, dass ich diesen Teil nach oben geschraubt haben könnte, aber die Standardanmeldeinformationen Nachricht lässt mich glauben, dass es gut ist, und es ist einfach abzulehnen meine Anfrage ohne Angabe eines Grundes.

Kann jemand herausfinden, was ich falsch mache?

Prost.

+1

Ich bin auch für ähnliche Lösung suchen. Hier ist meine Frage https://stackoverflow.com/questions/43505524/nodejs-convert-int16array-binary-buffer-to-linear16-encoded-raw-stream-for-googl –

Antwort

Verwandte Themen