我正在尝试将 Amazon Transcribe Streaming Service 与来自 Node.js 的 http2 请求一起使用,这是我遵循 Streaming request format的文档链接。根据此文档端点是https://transcribe-streaming .<'region'>.amazonaws.com,但向该 url 发出请求会导致 url not found 错误。但是在Java 示例中发现端点为https://transcribestreaming .''.amazonaws.com,因此向该 url 发出请求不会返回任何错误或响应。我正在从 us-east-1 地区尝试。
这是我正在尝试的代码。
const http2 = require('http2');
var aws4 = require('aws4');
var opts = {
service: 'transcribe',
region: 'us-east-1',
path: '/stream-transcription',
headers:{
'content-type': 'application/json',
'x-amz-target': 'com.amazonaws.transcribe.Transcribe.StartStreamTranscription'
}
}
var urlObj = aws4.sign(opts, {accessKeyId: '<access key>', secretAccessKey: '<aws secret>'});
const client = http2.connect('https://transcribestreaming.<region>.amazonaws.com');
client.on('error', function(err){
console.error("error in request ",err);
});
const req = client.request({
':method': 'POST',
':path': '/stream-transcription',
'authorization': urlObj.headers.Authorization,
'content-type': 'application/json',
'x-amz-content-sha256': 'STREAMING-AWS4-HMAC-SHA256-EVENTS',
'x-amz-target': 'com.amazonaws.transcribe.Transcribe.StartStreamTranscription',
'x-amz-date': urlObj['headers']['X-Amz-Date'],
'x-amz-transcribe-language-code': 'en-US',
'x-amz-transcribe-media-encoding': 'pcm',
'x-amz-transcribe-sample-rate': 44100
});
req.on('response', (headers, flags) => {
for (const name in headers) {
console.log(`${name}: ${headers[name]}`);
}
});
let data = '';
req.on('data', (chunk) => { data += chunk; });
req.on('end', () => {
console.log(`\n${data}`);
client.close();
});
req.end();
谁能指出我在这里缺少的东西。我也找不到任何使用 HTTP/2 实现此功能的示例。
更新:将 Content-type 更改为 application/json 返回响应状态为 200,但有以下异常:
`{"Output":{"__type":"com.amazon.coral.service#SerializationException"},"Version":"1.0"}`
更新(2019 年 4 月 22 日):
req.setEncoding('utf8');
req.write(audioBlob);
var audioBlob = new Buffer(JSON.stringify({
"AudioStream": {
"AudioEvent": {
"AudioChunk": audioBufferData
}
}
在结束请求之前,我通过序列化添加一个“audioblod”作为有效负载。我的“audioBufferData”是来自浏览器的原始 PCM 音频格式。我从文档中看到有效负载必须编码为“事件流编码”,但无法弄清楚如何实现它。
因此,如果当前没有此事件流编码,我将收到以下异常,响应状态为 200。
{"Output":{"__type":"com.amazon.coral.service#UnknownOperationException"},"Version":"1.0"}