【发布时间】:2019-07-31 01:32:03
【问题描述】:
我正在尝试将 Amazon Transcribe Streaming Service 与来自 Node.js 的 http2 请求一起使用,这是我正在关注的文档链接 Streaming request format。根据这个文档,端点是https://transcribe-streaming..amazonaws.com,但是向这个 url 发出请求会给出 url not found 错误。 但是在Java Example 找到的端点为https://transcribestreaming.''.amazonaws.com,因此向该网址发出请求不会给出任何错误或响应。我正在从 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 音频格式。 我从documentation看到有效载荷必须编码为“事件流编码”,但无法弄清楚如何实现它。
因此,如果当前没有此事件流编码,我将收到以下异常,响应状态为 200。
{"Output":{"__type":"com.amazon.coral.service#UnknownOperationException"},"Version":"1.0"}
【问题讨论】:
-
你曾经能够让它工作吗?我也有类似的情况。谢谢!
-
不,仍然停留在同一个问题上。
-
还有较旧的流式转录文档,它有正确的主机但不好
content-type:D docs.aws.amazon.com/transcribe/latest/dg/… 我在 Go 中与这个相同的 API 作斗争,我能够通过最初的此处的连接和 IAM 身份验证 stackoverflow.com/questions/53743785/… 尚未完全正常工作。 -
删除/不设置
content-type应该会有所帮助。在我的情况下,设置正确的content-type返回 HTTP 404。不过,我被卡住了。 -
是的,设置 content-type:application/json 返回状态为 200 但有异常 {"Output":{"__type":"com.amazon.coral.service#SerializationException"} 的响应, "版本":"1.0"};但如果未提供内容类型,则会给出 403。
标签: node.js amazon-web-services aws-transcribe