我正在尝试将客户端(nuxt)端的麦克风输入发送到node + socket.io服务器,然后再发送到Google Speech API。我从navigator.mediaDevices.getUserMedia({ audio: true })
获取流,并使用socket.io-stream将其发送到后端。我的客户端代码如下。
import ss from 'socket.io-stream'
navigator.mediaDevices.getUserMedia({ audio: true }).then((mediaStream) => {
ss(this.$socket).emit('audio', mediaStream);
});
我的服务器代码如下。
const io = require('socket.io')(3555);
const ss = require('socket.io-stream');
const speech = require('@google-cloud/speech');
io.on('connection', (socket) => {
const client = new speech.SpeechClient({ keyFilename: 'key.json' });
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';
const request = {
config: {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
},
interimResults: true,
};
ss(socket).on('audio', (stream) => {
const recognizeStream = client.streamingRecognize(request)
.on('error', console.error)
.on('data', data => {
process.stdout.write(
data.results[0] && data.results[0].alternatives[0]
? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
: `\n\nReached transcription time limit, press Ctrl+C\n`
);
});
stream.pipe(recognizeStream);
});
});
但是此代码不起作用,并显示错误TypeError: stream.pipe is not a function
。
请有人指出错误或告诉我一种解决方法。谢谢!