gpt4 book ai didi

node.js - 带有 Http/2 的 Node.js 中的 Amazon Transcribe Streaming 服务请求没有响应

转载 作者:IT老高 更新时间:2023-10-28 23:12:33 36 4
gpt4 key购买 nike

我正在尝试将 Amazon Transcribe Streaming Service 与来自 Node.js 的 http2 请求一起使用,这是我正在关注的文档链接 Streaming request format .根据此文档,端点是 https://transcribe-streaming .<'region'>.amazonaws.com,但向此 url 发出请求会导致 url not found 错误。但在 Java Example发现终点为 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 音频格式。我从 documentation 看到有效载荷必须编码为“事件流编码”,但无法弄清楚如何实现它。

因此,如果当前没有此事件流编码,我将收到以下异常,响应状态为 200。

{"Output":{"__type":"com.amazon.coral.service#UnknownOperationException"},"Version":"1.0"}

最佳答案

我联系了 AWS 支持,但他们似乎无法使用 NodeJS 获得 HTTP/2 实现。

但是,他们现在提供了一种直接通过 websocket 与 Transcribe 流 API 交互的方法(博文 here)

如果这适合您的用例,我强烈建议您查看新的示例存储库:https://github.com/aws-samples/amazon-transcribe-websocket-static

如果您在面向公众的页面中使用它,我建议您使用未经身份验证的 Cognito session 来处理凭据检索。我已经在生产应用程序中使用了此功能,因此请随时在任何其他问题中标记我。

关于node.js - 带有 Http/2 的 Node.js 中的 Amazon Transcribe Streaming 服务请求没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55073003/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com