3 回答
TA贡献1799条经验 获得超6个赞
我联系了 AWS 支持,他们现在建议尽可能使用 websockets 而不是 HTTP/2(博客文章在这里)
如果这适合您的用例,我强烈建议您查看新的示例存储库: https: //github.com/aws-samples/amazon-transcribe-websocket-static,它显示了 JS 中基于浏览器的解决方案。
我还注意到该演示的作者在他的个人 Github 上有一个明确的例子: https: //github.com/brandonmwest/amazon-transcribe-websocket-express但我还没有确认这是否有效。
感谢这些示例不是在 Python 中,但我认为使用 Websocket 客户端而不是 HTTP/2 会更好(老实说,它仍然有点可怕:P)
TA贡献1887条经验 获得超5个赞
尝试不设置内容类型标头,看看您得到什么响应。我正在尝试做同样的事情(但在 Ruby 中)并且“修复”了SerializationException
. 仍然无法让它工作,但我现在有一个新的错误需要考虑:)
更新:我现在已经开始工作了。我的问题是签名。如果同时传递了标头host
和标头,则在检查签名时,它们将与服务器端连接并被视为在服务器端,因此签名永远不会匹配。这在 AWS 方面似乎不是正确的行为,但在 Go 中它看起来不会成为您的问题。authority
,
host
TA贡献1942条经验 获得超3个赞
我也在与 Node.js 作斗争。文档不清楚的是,在一个地方它说不应该Content-Type
是application/json
,但在其他地方,它使有效负载看起来应该编码为application/vnd.amazon.eventstream
. 看起来有效负载应该仔细格式化为二进制格式而不是 JSON 对象,如下所示:
Amazon Transcribe 使用一种称为事件流编码的格式进行流式转录。这种格式使用描述每个事件内容的标头信息对二进制数据进行编码。您可以将此信息用于在不使用 Amazon Transcribe SDK 的情况下调用 Amazon Transcribe 终端节点的应用程序。Amazon Transcribe 使用 HTTP/2 协议进行流式转录。流式请求的关键组件是:
标题框架。这包含请求的 HTTP 标头,以及授权标头中的签名,Amazon Transcribe 将其用作种子签名来签署以下数据帧。
事件流编码中的一个或消息帧。该帧包含元数据和原始音频字节。
结束帧。这是一个带有空主体的事件流编码中的签名消息。
TA贡献1963条经验 获得超6个赞
我对在节点 js 中将 AWS 转录服务与他们的 WebSocket API 一起使用有类似的要求。鉴于目前官方包中还没有对此提供支持,我已经继续编写了一个名为 AWS-transcribe 的包,可以在此处找到。我希望这有帮助。
它提供了一个围绕 WebSocket 的流接口,可以像下面的例子一样使用
import { AwsTranscribe, StreamingClient } from "aws-transcribe"
const client = new AwsTranscribe({
// if these aren't provided, they will be taken from the environment
accessKeyId: "ACCESS KEY HERE",
secretAccessKey: "SECRET KEY HERE",
})
const transcribeStream = client
.createStreamingClient({
region: "eu-west-1",
sampleRate,
languageCode: "en-US",
})
// enums for returning the event names which the stream will emit
.on(StreamingClient.EVENTS.OPEN, () => console.log(`transcribe connection opened`))
.on(StreamingClient.EVENTS.ERROR, console.error)
.on(StreamingClient.EVENTS.CLOSE, () => console.log(`transcribe connection closed`))
.on(StreamingClient.EVENTS.DATA, (data) => {
const results = data.Transcript.Results
if (!results || results.length === 0) {
return
}
const result = results[0]
const final = !result.IsPartial
const prefix = final ? "recognized" : "recognizing"
const text = result.Alternatives[0].Transcript
console.log(`${prefix} text: ${text}`)
})
someStream.pipe(transcribeStream)
- 3 回答
- 0 关注
- 184 浏览
添加回答
举报